orderController.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. package controller
  2. import (
  3. "bswas/utilities"
  4. "strconv"
  5. "strings"
  6. )
  7. func OrderFormat(data []map[string]string) ([]interface{}, [][]interface{}, map[string]string) {
  8. row := []interface{}{
  9. "编号","订单状态","备注","接口下发时间","店铺名称","客户","客户订单号","承运人","快递单号","收货人名称","收货人电话",
  10. "省","市","区","收货人地址","波次编号","仓库","快递获取标记","快递获取时间","产品代码","产品条码","明细状态",
  11. "产品名称","订单数量","复核时间","接口取消标记","拣货单打印标记","接口回传标记","接口回传异常备注","订单冻结",
  12. }
  13. column := map[string]int{
  14. "ORDERNO" : 0,
  15. "ORDERCODENAME" : 1,
  16. "NOTES" : 2,
  17. "ADDTIME" : 3,
  18. "ISSUEPARTYNAME" : 4,
  19. "CUSTOMER_DESCR_C" : 5,
  20. "SOREFERENCE1" : 6,
  21. "CARRIERNAME" : 7,
  22. "SOREFERENCE5" : 8,
  23. "C_CONTACT" : 9,
  24. "C_TEL2" : 10,
  25. "C_PROVINCE" : 11,
  26. "C_CITY" : 12,
  27. "C_DISTRICT" : 13,
  28. "C_ADDRESS1" : 14,
  29. "WAVENO" : 15,
  30. "WAREHOUSEID" : 16,
  31. "EDISENDFLAG2" : 17,
  32. "EDISENDTIME2" : 18,
  33. "SKU" : 19,
  34. "ALTERNATE_SKU1" : 20,
  35. "ORDERDETAILCODENAME" : 21,
  36. "DESCR_C" : 22,
  37. "QTYORDERED" : 23,
  38. "CHECKTIME" : 24,
  39. "ERPCANCELFLAG" : 25,
  40. "PICKING_PRINT_FLAG" : 26,
  41. "EDISENDFLAG" : 27,
  42. "EDIREMARKS2" : 28,
  43. "RELEASESTATUS" : 29,
  44. }
  45. list := make([][]interface{},len(data))
  46. mergeRow := make(map[string]string)
  47. var columnName string
  48. var startIndex int
  49. rowAmount := 0
  50. for k,v := range data{
  51. if columnName == v["ORDERNO"] {
  52. rowAmount++
  53. }else{
  54. if rowAmount != 0 {
  55. mergeRow[strconv.Itoa(startIndex+2)] = strconv.Itoa(startIndex+2+rowAmount)
  56. }
  57. columnName = v["ORDERNO"]
  58. startIndex = k
  59. rowAmount = 0
  60. }
  61. if rowAmount != 0 {
  62. mergeRow[strconv.Itoa(startIndex+2)] = strconv.Itoa(startIndex+2+rowAmount)
  63. }
  64. line := make([]interface{},len(row))
  65. for key,value := range column {
  66. if key == "ADDTIME" || key == "EDISENDTIME2" || key == "CHECKTIME"{
  67. line[value] = utilities.DateFormat(v[key], "2006-01-02T15:04:05+08:00")
  68. continue
  69. }
  70. line[value] = v[key]
  71. }
  72. list[k] = line
  73. }
  74. return row,list,mergeRow
  75. }
  76. func OrderWaveFormat(data []map[string]string) ([]interface{}, [][]interface{}) {
  77. row := []interface{}{
  78. "波次号","波次状态","波次规则","波次描述","承运人","操作员","创建时间","拣货单打印人","拣货单打印时间",
  79. "快递单号打印人","快递单号打印时间",
  80. }
  81. column := map[string]int{
  82. "WAVENO" : 0,
  83. "CODENAME_C" : 1,
  84. "WAVERULE" : 2,
  85. "DESCR" : 3,
  86. "DESCR_C" : 4,
  87. "ADDWHO" : 5,
  88. "ADDTIME" : 6,
  89. "pickerPrint" : 7,
  90. "pickerPrintTime" : 8,
  91. "expressPrinting" : 9,
  92. "expressPrintTime" : 10,
  93. }
  94. list := make([][]interface{},len(data))
  95. for k,v := range data{
  96. line := make([]interface{},len(row))
  97. for key,value := range column {
  98. val := ""
  99. if key == "pickerPrint" && v["USERDEFINE1"] != ""{
  100. index := strings.IndexAny(v["USERDEFINE1"],"-PK")
  101. if index != -1{
  102. val = v["USERDEFINE1"][0:index-1]
  103. }
  104. }
  105. if key == "pickerPrintTime" && v["USERDEFINE1"] != ""{
  106. index := strings.IndexAny(v["USERDEFINE1"],"-PK")
  107. if index != -1{
  108. val = v["USERDEFINE1"][index+3:len(v["USERDEFINE1"])-1]
  109. }
  110. }
  111. if key == "expressPrinting" && v["USERDEFINE2"] != ""{
  112. index := strings.IndexAny(v["USERDEFINE2"],"-EX")
  113. if index != -1{
  114. val = v["USERDEFINE2"][0:index-1]
  115. }else{
  116. index := strings.IndexAny(v["USERDEFINE2"],"-Auto")
  117. if index != -1{
  118. val = v["USERDEFINE2"][0:index-1]
  119. }
  120. }
  121. }
  122. if key == "expressPrintTime" && v["USERDEFINE2"] != ""{
  123. index := strings.IndexAny(v["USERDEFINE2"],"-EX")
  124. if index != -1{
  125. val = v["USERDEFINE2"][index+3:len(v["USERDEFINE2"])-1]
  126. }else{
  127. index := strings.IndexAny(v["USERDEFINE2"],"-Auto")
  128. if index != -1{
  129. val = v["USERDEFINE2"][index+5:len(v["USERDEFINE2"])-1]
  130. }
  131. }
  132. }
  133. if val != ""{
  134. line[value] = val
  135. }else{
  136. line[value] = v[key]
  137. }
  138. }
  139. list[k] = line
  140. }
  141. return row, list
  142. }
  143. func MergerOrderIssueData(data map[string]map[string]interface{}, orderPackages []map[string]string,
  144. secondOrderPackages []map[string]string, rejectedBillItems []map[string]string, logs []map[string]string) map[string]map[string]interface{} {
  145. if len(orderPackages) > 0{
  146. data = mergerOrderPackage(data, orderPackages)
  147. }
  148. if len(secondOrderPackages) > 0{
  149. data = mergerSecondOrderPackage(data, secondOrderPackages)
  150. }
  151. if len(rejectedBillItems) > 0{
  152. data = mergerRejectedBillItem(data, rejectedBillItems)
  153. }
  154. if len(logs) > 0{
  155. data = mergerLog(data, logs)
  156. }
  157. return data
  158. }
  159. func mergerOrderPackage(data map[string]map[string]interface{}, orderPackages []map[string]string) map[string]map[string]interface{} {
  160. for _,orderPackage := range orderPackages {
  161. if data[orderPackage["order_issue_id"]] == nil {
  162. items := []map[string]string{
  163. orderPackage,
  164. }
  165. se := map[string]interface{}{
  166. "orderPackages" : items,
  167. }
  168. data[orderPackage["order_issue_id"]] = se
  169. continue
  170. }
  171. if data[orderPackage["order_issue_id"]]["orderPackages"] == nil {
  172. items := []map[string]string{
  173. orderPackage,
  174. }
  175. data[orderPackage["order_issue_id"]]["orderPackages"] = items
  176. continue
  177. }
  178. data[orderPackage["order_issue_id"]]["orderPackages"] = append(data[orderPackage["order_issue_id"]]["orderPackages"].([]map[string]string),orderPackage)
  179. }
  180. return data
  181. }
  182. func mergerSecondOrderPackage(data map[string]map[string]interface{}, secondOrderPackages []map[string]string) map[string]map[string]interface{} {
  183. for _,secondOrderPackage := range secondOrderPackages {
  184. if data[secondOrderPackage["order_issue_id"]] == nil {
  185. items := []map[string]string{
  186. secondOrderPackage,
  187. }
  188. se := map[string]interface{}{
  189. "secondOrderPackages" : items,
  190. }
  191. data[secondOrderPackage["order_issue_id"]] = se
  192. continue
  193. }
  194. if data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"] == nil {
  195. items := []map[string]string{
  196. secondOrderPackage,
  197. }
  198. data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"] = items
  199. continue
  200. }
  201. data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"] = append(data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"].([]map[string]string),secondOrderPackage)
  202. }
  203. return data
  204. }
  205. func mergerRejectedBillItem(data map[string]map[string]interface{}, rejectedBillItems []map[string]string) map[string]map[string]interface{} {
  206. for _,rejectedBillItem := range rejectedBillItems {
  207. if data[rejectedBillItem["order_issue_id"]] == nil {
  208. items := []map[string]string{
  209. rejectedBillItem,
  210. }
  211. se := map[string]interface{}{
  212. "rejectedBillItems" : items,
  213. }
  214. data[rejectedBillItem["order_issue_id"]] = se
  215. continue
  216. }
  217. if data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"] == nil {
  218. items := []map[string]string{
  219. rejectedBillItem,
  220. }
  221. data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"] = items
  222. continue
  223. }
  224. data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"] = append(data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"].([]map[string]string),rejectedBillItem)
  225. }
  226. return data
  227. }
  228. func mergerLog(data map[string]map[string]interface{}, logs []map[string]string) map[string]map[string]interface{} {
  229. for _,log := range logs {
  230. if data[log["order_issue_id"]] == nil {
  231. items := []map[string]string{
  232. log,
  233. }
  234. se := map[string]interface{}{
  235. "logs" : items,
  236. }
  237. data[log["order_issue_id"]] = se
  238. continue
  239. }
  240. if data[log["order_issue_id"]]["logs"] == nil {
  241. items := []map[string]string{
  242. log,
  243. }
  244. data[log["order_issue_id"]]["logs"] = items
  245. continue
  246. }
  247. data[log["order_issue_id"]]["logs"] = append(data[log["order_issue_id"]]["logs"].([]map[string]string),log)
  248. }
  249. return data
  250. }
  251. func OrderIssueFormat(dataMap map[string]map[string]interface{}) ([]interface{}, [][]interface{}, map[string]string) {
  252. row := []interface{}{
  253. "登记日期","创建日期","客户","店铺","客户订单号","原始承运商","收货人",
  254. "收货电话","省","市","区","收货人地址","原始运单号","原始商品条码","原始商品名称","原始商品数量",
  255. "退单备注","退单商品名","退单商品条码","退单商品数量","退单状态",
  256. "操作类型","说明","操作者","情况说明","问题类别","二次订单号","二次承运商","二次运单号",
  257. "二次商品条码","二次商品名","二次商品数量","最终状态",
  258. "承运商赔偿金额","承运商快递减免",
  259. "宝时赔偿金额","宝时快递减免","事故责任方",
  260. }
  261. column := map[string]int{
  262. "order_issues_created_at" : 0,
  263. "order_created_at" : 1,
  264. "owner_name" : 2,
  265. "shop_name" : 3,
  266. "client_code" : 4,
  267. "logistic_name" : 5,
  268. "consignee_name" : 6,
  269. "consignee_phone" : 7,
  270. "province" : 8,
  271. "city" : 9,
  272. "district" : 10,
  273. "address" : 11,
  274. "order_package_logistic_number" : 12,
  275. "commodity_sku" : 13,
  276. "commodity_name" : 14,
  277. "commodity_amount" : 15,
  278. "remark" : 16,
  279. "name_goods" : 17,
  280. "barcode_goods" : 18,
  281. "rejected_bill_amount" : 19,
  282. "rejecting_status" : 20,
  283. "log_type" : 21,
  284. "log_content" : 22,
  285. "user_name" : 23,
  286. "result_explain" : 24,
  287. "order_issue_type_name" : 25,
  288. "s_o_client_code" : 26,
  289. "s_logistics_name" : 27,
  290. "logistic_number" : 28,
  291. "s_c_sku" : 29,
  292. "s_c_name" : 30,
  293. "s_o_p_c_amount" : 31,
  294. "final_status" : 32,
  295. "logistic_indemnity_money" : 33,
  296. "logistic_express_remission" : 34,
  297. "baoshi_indemnity_money" : 35,
  298. "baoshi_express_remission" : 36,
  299. "user_workgroup_name" : 37,
  300. }
  301. data := make([]map[string]interface{},len(dataMap))
  302. for _,value := range dataMap {
  303. data[value["index"].(int)] = value
  304. }
  305. var list [][]interface{}
  306. mergeRow := make(map[string]string)
  307. rownum := 0
  308. for _,v := range data{
  309. var orderPackages []map[string]string
  310. var secondOrderPackages []map[string]string
  311. var rejectedBillItems []map[string]string
  312. var logs []map[string]string
  313. if v["orderPackages"] != nil {
  314. orderPackages = v["orderPackages"].([]map[string]string)
  315. }
  316. orderPackagesLength := len(orderPackages)
  317. if v["secondOrderPackages"] != nil {
  318. secondOrderPackages = v["secondOrderPackages"].([]map[string]string)
  319. }
  320. secondOrderPackagesLength := len(secondOrderPackages)
  321. if v["rejectedBillItems"] != nil {
  322. rejectedBillItems = v["rejectedBillItems"].([]map[string]string)
  323. }
  324. rejectedBillItemsLength := len(rejectedBillItems)
  325. if v["logs"] != nil {
  326. logs = v["logs"].([]map[string]string)
  327. }
  328. logsLength := len(logs)
  329. count := 1
  330. if orderPackagesLength> count {
  331. count = orderPackagesLength
  332. }
  333. if secondOrderPackagesLength > count {
  334. count = secondOrderPackagesLength
  335. }
  336. if rejectedBillItemsLength > count {
  337. count = rejectedBillItemsLength
  338. }
  339. if logsLength > count {
  340. count = logsLength
  341. }
  342. if count > 1{
  343. mergeRow[strconv.Itoa(rownum+2)] = strconv.Itoa(rownum+1+count)
  344. }
  345. for i := 0; i<count; i++ {
  346. line := make([]interface{},len(row))
  347. for key,value := range column {
  348. if key == "order_created_at" || key == "order_issues_created_at" {
  349. line[value] = utilities.DateFormat(v[key].(string),"2006-01-02T15:04:05Z")
  350. continue
  351. }
  352. if key == "order_package_logistic_number" || key == "commodity_sku" || key == "commodity_name" || key == "commodity_amount"{
  353. if i < orderPackagesLength && orderPackages != nil{
  354. line[value] = orderPackages[i][key]
  355. }else{
  356. line[value] = ""
  357. }
  358. continue
  359. }
  360. if key == "logistic_number" || key == "s_c_sku" || key == "s_c_name" || key == "s_o_p_c_amount"{
  361. if i < secondOrderPackagesLength && secondOrderPackages != nil{
  362. line[value] = secondOrderPackages[i][key]
  363. }else{
  364. line[value] = ""
  365. }
  366. continue
  367. }
  368. if key == "rejected_bill_amount" || key == "name_goods" || key == "barcode_goods" || key == "remark"{
  369. if i < rejectedBillItemsLength && rejectedBillItems != nil{
  370. line[value] = rejectedBillItems[i][key]
  371. }else{
  372. line[value] = ""
  373. }
  374. continue
  375. }
  376. if key == "log_type" || key == "log_content" || key == "user_name"{
  377. if i < logsLength && logs != nil{
  378. line[value] = logs[i][key]
  379. }else{
  380. line[value] = ""
  381. }
  382. continue
  383. }
  384. line[value] = v[key]
  385. }
  386. list = append(list,line)
  387. rownum++
  388. }
  389. }
  390. return row, list, mergeRow
  391. }
  392. func GetOrderIssuesModel(orderIssues []map[string]string)(modelData map[string]map[string]interface{}, orderPackageConditionValue string,
  393. secondOrderPackageConditionValue string, rejectedBillItemConditionValue string, logConditionValue string){
  394. modelData = make(map[string]map[string]interface{})
  395. orderPackageConditionValue = " WHERE order_packages.order_id IN ("
  396. secondOrderPackageConditionValue = " WHERE o_d.client_code IN ("
  397. rejectedBillItemConditionValue = " WHERE rejected_bills.logistic_number_return IN ("
  398. logConditionValue = " WHERE order_issue_process_logs.order_issue_id IN ("
  399. for index,value := range orderIssues{
  400. orderIssue := map[string]interface{}{
  401. "index": index,
  402. "id": value["id"],
  403. "district": value["district"],
  404. "address": value["address"],
  405. "city": value["city"],
  406. "province": value["province"],
  407. "consignee_name": value["consignee_name"],
  408. "consignee_phone": value["consignee_phone"],
  409. "client_code": value["client_code"],
  410. "order_created_at": value["order_created_at"],
  411. "logistic_name": value["logistic_name"],
  412. "owner_name": value["owner_name"],
  413. "s_o_client_code": value["s_o_client_code"],
  414. "logistic_number": value["logistic_number"],
  415. "order_issues_created_at": value["order_issues_created_at"],
  416. "shop_name": value["shop_name"],
  417. "rejecting_status": value["rejecting_status"],
  418. "result_explain": value["result_explain"],
  419. "order_issue_type_name": value["order_issue_type_name"],
  420. "final_status": value["final_status"],
  421. "logistic_indemnity_money": value["logistic_indemnity_money"],
  422. "logistic_express_remission": value["logistic_express_remission"],
  423. "baoshi_indemnity_money": value["baoshi_indemnity_money"],
  424. "baoshi_express_remission": value["baoshi_express_remission"],
  425. "user_workgroup_name": value["user_workgroup_name"],
  426. }
  427. modelData[value["id"]] = orderIssue
  428. if index < len(orderIssues)-1{
  429. if value["order_id"] != "" {
  430. orderPackageConditionValue += value["order_id"]+","
  431. }
  432. if value["s_o_client_code"] != "" {
  433. secondOrderPackageConditionValue += "'"+value["s_o_client_code"]+"',"
  434. }
  435. if value["logistic_number_return"] != "" {
  436. rejectedBillItemConditionValue += "'"+value["logistic_number_return"]+"',"
  437. }
  438. if value["id"] != "" {
  439. logConditionValue += value["id"]+","
  440. }
  441. }else{
  442. if value["order_id"] != "" {
  443. orderPackageConditionValue += value["order_id"]
  444. }
  445. if value["s_o_client_code"] != "" {
  446. secondOrderPackageConditionValue += "'"+value["s_o_client_code"]+"'"
  447. }
  448. if value["logistic_number_return"] != "" {
  449. rejectedBillItemConditionValue += "'"+value["logistic_number_return"]+"'"
  450. }
  451. if value["id"] != "" {
  452. logConditionValue += value["id"]
  453. }
  454. }
  455. }
  456. orderPackageConditionValue += ")"
  457. secondOrderPackageConditionValue += ")"
  458. rejectedBillItemConditionValue += ")"
  459. logConditionValue += ")"
  460. return
  461. }