orderController.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  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])
  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_created_at" : 0,
  227. "order_issues_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. "order_issue_type_name" : 24,
  251. "s_o_client_code" : 25,
  252. "s_logistics_name" : 26,
  253. "logistic_number" : 27,
  254. "s_c_sku" : 28,
  255. "s_c_name" : 29,
  256. "s_o_p_c_amount" : 30,
  257. "final_status" : 31,
  258. "logistic_indemnity_money" : 32,
  259. "logistic_express_remission" : 33,
  260. "baoshi_indemnity_money" : 34,
  261. "baoshi_express_remission" : 35,
  262. "user_workgroup_name" : 36,
  263. }
  264. data := make([]map[string]interface{},len(dataMap))
  265. for _,value := range dataMap {
  266. data[value["index"].(int)] = value
  267. }
  268. var list [][]interface{}
  269. mergeRow := make(map[string]string)
  270. rownum := 0
  271. for _,v := range data{
  272. var orderPackages []map[string]string
  273. var secondOrderPackages []map[string]string
  274. var rejectedBillItems []map[string]string
  275. var logs []map[string]string
  276. if v["orderPackages"] != nil {
  277. orderPackages = v["orderPackages"].([]map[string]string)
  278. }
  279. orderPackagesLength := len(orderPackages)
  280. if v["secondOrderPackages"] != nil {
  281. secondOrderPackages = v["secondOrderPackages"].([]map[string]string)
  282. }
  283. secondOrderPackagesLength := len(secondOrderPackages)
  284. if v["rejectedBillItems"] != nil {
  285. rejectedBillItems = v["rejectedBillItems"].([]map[string]string)
  286. }
  287. rejectedBillItemsLength := len(rejectedBillItems)
  288. if v["logs"] != nil {
  289. logs = v["logs"].([]map[string]string)
  290. }
  291. logsLength := len(logs)
  292. count := 1
  293. if orderPackagesLength> count {
  294. count = orderPackagesLength
  295. }
  296. if secondOrderPackagesLength > count {
  297. count = secondOrderPackagesLength
  298. }
  299. if rejectedBillItemsLength > count {
  300. count = rejectedBillItemsLength
  301. }
  302. if logsLength > count {
  303. count = logsLength
  304. }
  305. if count > 1{
  306. mergeRow[strconv.Itoa(rownum+2)] = strconv.Itoa(rownum+1+count)
  307. }
  308. for i := 0; i<count; i++ {
  309. line := make([]interface{},len(row))
  310. for key,value := range column {
  311. if key == "order_created_at" || key == "order_issues_created_at" {
  312. line[value] = utilities.DateFormat(v[key].(string))
  313. continue
  314. }
  315. if key == "order_package_logistic_number" || key == "commodity_sku" || key == "commodity_name" || key == "commodity_amount"{
  316. if i < orderPackagesLength && orderPackages != nil{
  317. line[value] = orderPackages[i][key]
  318. }else{
  319. line[value] = ""
  320. }
  321. continue
  322. }
  323. if key == "logistic_number" || key == "s_c_sku" || key == "s_c_name" || key == "s_o_p_c_amount"{
  324. if i < secondOrderPackagesLength && secondOrderPackages != nil{
  325. line[value] = secondOrderPackages[i][key]
  326. }else{
  327. line[value] = ""
  328. }
  329. continue
  330. }
  331. if key == "rejected_bill_amount" || key == "name_goods" || key == "barcode_goods" || key == "remark"{
  332. if i < rejectedBillItemsLength && rejectedBillItems != nil{
  333. line[value] = rejectedBillItems[i][key]
  334. }else{
  335. line[value] = ""
  336. }
  337. continue
  338. }
  339. if key == "log_type" || key == "log_content" || key == "user_name"{
  340. if i < logsLength && logs != nil{
  341. line[value] = logs[i][key]
  342. }else{
  343. line[value] = ""
  344. }
  345. continue
  346. }
  347. line[value] = v[key]
  348. }
  349. list = append(list,line)
  350. rownum++
  351. }
  352. }
  353. return row, list, mergeRow
  354. }
  355. func GetOrderIssuesModel(orderIssues []map[string]string)(modelData map[string]map[string]interface{}, orderPackageConditionValue string,
  356. secondOrderPackageConditionValue string, rejectedBillItemConditionValue string, logConditionValue string){
  357. modelData = make(map[string]map[string]interface{})
  358. orderPackageConditionValue = " WHERE order_packages.order_id IN ("
  359. secondOrderPackageConditionValue = " WHERE s_o_p.order_id IN ("
  360. rejectedBillItemConditionValue = " WHERE rejected_bill_items.id_rejected_bill IN ("
  361. logConditionValue = " WHERE order_issue_process_logs.order_issue_id IN ("
  362. for index,value := range orderIssues{
  363. orderIssue := map[string]interface{}{
  364. "index": index,
  365. "id": value["id"],
  366. "district": value["district"],
  367. "address": value["address"],
  368. "city": value["city"],
  369. "province": value["province"],
  370. "consignee_name": value["consignee_name"],
  371. "consignee_phone": value["consignee_phone"],
  372. "client_code": value["client_code"],
  373. "order_created_at": value["order_created_at"],
  374. "logistic_name": value["logistic_name"],
  375. "owner_name": value["owner_name"],
  376. "s_o_client_code": value["s_o_client_code"],
  377. "logistic_number": value["logistic_number"],
  378. "order_issues_created_at": value["order_issues_created_at"],
  379. "shop_name": value["shop_name"],
  380. "rejecting_status": value["rejecting_status"],
  381. "order_issue_type_name": value["order_issue_type_name"],
  382. "final_status": value["final_status"],
  383. "logistic_indemnity_money": value["logistic_indemnity_money"],
  384. "logistic_express_remission": value["logistic_express_remission"],
  385. "baoshi_indemnity_money": value["baoshi_indemnity_money"],
  386. "baoshi_express_remission": value["baoshi_express_remission"],
  387. "user_workgroup_name": value["user_workgroup_name"],
  388. }
  389. modelData[value["id"]] = orderIssue
  390. if index < len(orderIssues)-1{
  391. if value["order_id"] != "" {
  392. orderPackageConditionValue += value["order_id"]+","
  393. }
  394. if value["s_o_id"] != "" {
  395. secondOrderPackageConditionValue += value["s_o_id"]+","
  396. }
  397. if value["rejected_bill_id"] != "" {
  398. rejectedBillItemConditionValue += value["rejected_bill_id"]+","
  399. }
  400. if value["id"] != "" {
  401. logConditionValue += value["id"]+","
  402. }
  403. }else{
  404. if value["order_id"] != "" {
  405. orderPackageConditionValue += value["order_id"]
  406. }
  407. if value["s_o_id"] != "" {
  408. secondOrderPackageConditionValue += value["s_o_id"]
  409. }
  410. if value["rejected_bill_id"] != "" {
  411. rejectedBillItemConditionValue += value["rejected_bill_id"]
  412. }
  413. if value["id"] != "" {
  414. logConditionValue += value["id"]
  415. }
  416. }
  417. }
  418. orderPackageConditionValue += ")"
  419. secondOrderPackageConditionValue += ")"
  420. rejectedBillItemConditionValue += ")"
  421. logConditionValue += ")"
  422. return
  423. }