orderController.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  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. _,isExist := data[orderPackage["order_issue_id"]]["orderPackages"]
  162. if isExist {
  163. data[orderPackage["order_issue_id"]]["orderPackages"] = append(data[orderPackage["order_issue_id"]]["orderPackages"].([]map[string]string),orderPackage)
  164. }else{
  165. sliced := []map[string]string{
  166. orderPackage,
  167. }
  168. data[orderPackage["order_issue_id"]]["orderPackages"] = sliced
  169. }
  170. }
  171. return data
  172. }
  173. func mergerSecondOrderPackage(data map[string]map[string]interface{}, secondOrderPackages []map[string]string) map[string]map[string]interface{} {
  174. for _,secondOrderPackage := range secondOrderPackages {
  175. _,isExist := data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"]
  176. if isExist {
  177. data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"] = append(data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"].([]map[string]string),secondOrderPackage)
  178. }else{
  179. sliced := []map[string]string{
  180. secondOrderPackage,
  181. }
  182. data[secondOrderPackage["order_issue_id"]]["secondOrderPackages"] = sliced
  183. }
  184. }
  185. return data
  186. }
  187. func mergerRejectedBillItem(data map[string]map[string]interface{}, rejectedBillItems []map[string]string) map[string]map[string]interface{} {
  188. for _,rejectedBillItem := range rejectedBillItems {
  189. _,isExist := data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"]
  190. if isExist {
  191. data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"] = append(data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"].([]map[string]string),rejectedBillItem)
  192. }else{
  193. sliced := []map[string]string{
  194. rejectedBillItem,
  195. }
  196. data[rejectedBillItem["order_issue_id"]]["rejectedBillItems"] = sliced
  197. }
  198. }
  199. return data
  200. }
  201. func mergerLog(data map[string]map[string]interface{}, logs []map[string]string) map[string]map[string]interface{} {
  202. for _,log := range logs {
  203. _,isExist := data[log["order_issue_id"]]["logs"]
  204. if isExist {
  205. data[log["order_issue_id"]]["logs"] = append(data[log["order_issue_id"]]["logs"].([]map[string]string),log)
  206. }else{
  207. sliced := []map[string]string{
  208. log,
  209. }
  210. data[log["order_issue_id"]]["logs"] = sliced
  211. }
  212. }
  213. return data
  214. }
  215. func OrderIssueFormat(dataMap map[string]map[string]interface{}) ([]interface{}, [][]interface{}, map[string]string) {
  216. row := []interface{}{
  217. "登记日期","创建日期","客户","店铺","客户订单号","原始承运商","收货人",
  218. "收货电话","省","市","区","收货人地址","原始运单号","原始商品条码","原始商品名称","原始商品数量",
  219. "退单备注","退单商品名","退单商品条码","退单商品数量","退单状态",
  220. "操作类型","说明","操作者","情况说明","问题类别","二次订单号","二次承运商","二次运单号",
  221. "二次商品条码","二次商品名","二次商品数量","最终状态",
  222. "承运商赔偿金额","承运商快递减免",
  223. "宝时赔偿金额","宝时快递减免","事故责任方",
  224. }
  225. column := map[string]int{
  226. "order_issues_created_at" : 0,
  227. "order_created_at" : 1,
  228. "owner_name" : 2,
  229. "shop_name" : 3,
  230. "client_code" : 4,
  231. "logistic_name" : 5,
  232. "consignee_name" : 6,
  233. "consignee_phone" : 7,
  234. "province" : 8,
  235. "city" : 9,
  236. "district" : 10,
  237. "address" : 11,
  238. "order_package_logistic_number" : 12,
  239. "commodity_sku" : 13,
  240. "commodity_name" : 14,
  241. "commodity_amount" : 15,
  242. "remark" : 16,
  243. "name_goods" : 17,
  244. "barcode_goods" : 18,
  245. "rejected_bill_amount" : 19,
  246. "rejecting_status" : 20,
  247. "log_type" : 21,
  248. "log_content" : 22,
  249. "user_name" : 23,
  250. "result_explain" : 24,
  251. "order_issue_type_name" : 25,
  252. "s_o_client_code" : 26,
  253. "s_logistics_name" : 27,
  254. "logistic_number" : 28,
  255. "s_c_sku" : 29,
  256. "s_c_name" : 30,
  257. "s_o_p_c_amount" : 31,
  258. "final_status" : 32,
  259. "logistic_indemnity_money" : 33,
  260. "logistic_express_remission" : 34,
  261. "baoshi_indemnity_money" : 35,
  262. "baoshi_express_remission" : 36,
  263. "user_workgroup_name" : 37,
  264. }
  265. data := make([]map[string]interface{},len(dataMap))
  266. for _,value := range dataMap {
  267. data[value["index"].(int)] = value
  268. }
  269. var list [][]interface{}
  270. mergeRow := make(map[string]string)
  271. rownum := 0
  272. for _,v := range data{
  273. var orderPackages []map[string]string
  274. var secondOrderPackages []map[string]string
  275. var rejectedBillItems []map[string]string
  276. var logs []map[string]string
  277. if v["orderPackages"] != nil {
  278. orderPackages = v["orderPackages"].([]map[string]string)
  279. }
  280. orderPackagesLength := len(orderPackages)
  281. if v["secondOrderPackages"] != nil {
  282. secondOrderPackages = v["secondOrderPackages"].([]map[string]string)
  283. }
  284. secondOrderPackagesLength := len(secondOrderPackages)
  285. if v["rejectedBillItems"] != nil {
  286. rejectedBillItems = v["rejectedBillItems"].([]map[string]string)
  287. }
  288. rejectedBillItemsLength := len(rejectedBillItems)
  289. if v["logs"] != nil {
  290. logs = v["logs"].([]map[string]string)
  291. }
  292. logsLength := len(logs)
  293. count := 1
  294. if orderPackagesLength> count {
  295. count = orderPackagesLength
  296. }
  297. if secondOrderPackagesLength > count {
  298. count = secondOrderPackagesLength
  299. }
  300. if rejectedBillItemsLength > count {
  301. count = rejectedBillItemsLength
  302. }
  303. if logsLength > count {
  304. count = logsLength
  305. }
  306. if count > 1{
  307. mergeRow[strconv.Itoa(rownum+2)] = strconv.Itoa(rownum+1+count)
  308. }
  309. for i := 0; i<count; i++ {
  310. line := make([]interface{},len(row))
  311. for key,value := range column {
  312. if key == "order_created_at" || key == "order_issues_created_at" {
  313. line[value] = utilities.DateFormat(v[key].(string),"2006-01-02T15:04:05Z")
  314. continue
  315. }
  316. if key == "order_package_logistic_number" || key == "commodity_sku" || key == "commodity_name" || key == "commodity_amount"{
  317. if i < orderPackagesLength && orderPackages != nil{
  318. line[value] = orderPackages[i][key]
  319. }else{
  320. line[value] = ""
  321. }
  322. continue
  323. }
  324. if key == "logistic_number" || key == "s_c_sku" || key == "s_c_name" || key == "s_o_p_c_amount"{
  325. if i < secondOrderPackagesLength && secondOrderPackages != nil{
  326. line[value] = secondOrderPackages[i][key]
  327. }else{
  328. line[value] = ""
  329. }
  330. continue
  331. }
  332. if key == "rejected_bill_amount" || key == "name_goods" || key == "barcode_goods" || key == "remark"{
  333. if i < rejectedBillItemsLength && rejectedBillItems != nil{
  334. line[value] = rejectedBillItems[i][key]
  335. }else{
  336. line[value] = ""
  337. }
  338. continue
  339. }
  340. if key == "log_type" || key == "log_content" || key == "user_name"{
  341. if i < logsLength && logs != nil{
  342. line[value] = logs[i][key]
  343. }else{
  344. line[value] = ""
  345. }
  346. continue
  347. }
  348. line[value] = v[key]
  349. }
  350. list = append(list,line)
  351. rownum++
  352. }
  353. }
  354. return row, list, mergeRow
  355. }
  356. func GetOrderIssuesModel(orderIssues []map[string]string)(modelData map[string]map[string]interface{}, orderPackageConditionValue string,
  357. secondOrderPackageConditionValue string, rejectedBillItemConditionValue string, logConditionValue string){
  358. modelData = make(map[string]map[string]interface{})
  359. orderPackageConditionValue = " WHERE order_packages.order_id IN ("
  360. secondOrderPackageConditionValue = " WHERE s_o_p.order_id IN ("
  361. rejectedBillItemConditionValue = " WHERE rejected_bill_items.id_rejected_bill IN ("
  362. logConditionValue = " WHERE order_issue_process_logs.order_issue_id IN ("
  363. for index,value := range orderIssues{
  364. orderIssue := map[string]interface{}{
  365. "index": index,
  366. "id": value["id"],
  367. "district": value["district"],
  368. "address": value["address"],
  369. "city": value["city"],
  370. "province": value["province"],
  371. "consignee_name": value["consignee_name"],
  372. "consignee_phone": value["consignee_phone"],
  373. "client_code": value["client_code"],
  374. "order_created_at": value["order_created_at"],
  375. "logistic_name": value["logistic_name"],
  376. "owner_name": value["owner_name"],
  377. "s_o_client_code": value["s_o_client_code"],
  378. "logistic_number": value["logistic_number"],
  379. "order_issues_created_at": value["order_issues_created_at"],
  380. "shop_name": value["shop_name"],
  381. "rejecting_status": value["rejecting_status"],
  382. "result_explain": value["result_explain"],
  383. "order_issue_type_name": value["order_issue_type_name"],
  384. "final_status": value["final_status"],
  385. "logistic_indemnity_money": value["logistic_indemnity_money"],
  386. "logistic_express_remission": value["logistic_express_remission"],
  387. "baoshi_indemnity_money": value["baoshi_indemnity_money"],
  388. "baoshi_express_remission": value["baoshi_express_remission"],
  389. "user_workgroup_name": value["user_workgroup_name"],
  390. }
  391. modelData[value["id"]] = orderIssue
  392. if index < len(orderIssues)-1{
  393. if value["order_id"] != "" {
  394. orderPackageConditionValue += value["order_id"]+","
  395. }
  396. if value["s_o_id"] != "" {
  397. secondOrderPackageConditionValue += value["s_o_id"]+","
  398. }
  399. if value["rejected_bill_id"] != "" {
  400. rejectedBillItemConditionValue += value["rejected_bill_id"]+","
  401. }
  402. if value["id"] != "" {
  403. logConditionValue += value["id"]+","
  404. }
  405. }else{
  406. if value["order_id"] != "" {
  407. orderPackageConditionValue += value["order_id"]
  408. }
  409. if value["s_o_id"] != "" {
  410. secondOrderPackageConditionValue += value["s_o_id"]
  411. }
  412. if value["rejected_bill_id"] != "" {
  413. rejectedBillItemConditionValue += value["rejected_bill_id"]
  414. }
  415. if value["id"] != "" {
  416. logConditionValue += value["id"]
  417. }
  418. }
  419. }
  420. orderPackageConditionValue += ")"
  421. secondOrderPackageConditionValue += ")"
  422. rejectedBillItemConditionValue += ")"
  423. logConditionValue += ")"
  424. return
  425. }