HLController.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.malk.suodisi.controller;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.excel.ExcelWriter;
  4. import com.alibaba.excel.write.metadata.WriteSheet;
  5. import com.alibaba.fastjson.JSON;
  6. import com.malk.server.aliwork.YDConf;
  7. import com.malk.server.aliwork.YDParam;
  8. import com.malk.server.common.McException;
  9. import com.malk.server.common.McR;
  10. import com.malk.server.dingtalk.DDConf;
  11. import com.malk.service.aliwork.YDClient;
  12. import com.malk.suodisi.server.XYR;
  13. import com.malk.utils.*;
  14. import lombok.SneakyThrows;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.PostMapping;
  18. import org.springframework.web.bind.annotation.RequestBody;
  19. import org.springframework.web.bind.annotation.RequestMapping;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. import java.io.InputStream;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. /**
  27. * 错误抛出与拦截详见 CatchException
  28. */
  29. @Slf4j
  30. @RestController
  31. @RequestMapping("/harrison")
  32. public class HLController {
  33. @Autowired
  34. private YDClient ydClient;
  35. @Autowired
  36. private DDConf ddConf;
  37. // prd: 物流类型打印模板 业务类型 中文->英文 对照
  38. private static final Map<String, String> PART_EN = new HashMap<>();
  39. static {
  40. PART_EN.put("内陆运输", "TRANSPORTATION");
  41. PART_EN.put("THC", "TERMINAL HANDLING CHARGES");
  42. PART_EN.put("港口货代", "TNPA CARGO DUES");
  43. PART_EN.put("海运", "OCEAN FREIGHT");
  44. PART_EN.put("检测", "SAMPLING AND ANALYSIS");
  45. PART_EN.put("单证", "DOCUMENTATION FEE");
  46. PART_EN.put("保险", "OCEAN INSURANCE");
  47. }
  48. @PostMapping("/invoice")
  49. McR HL_invoice(@RequestBody Map data, HttpServletResponse response, HttpServletRequest request) {
  50. // data.putAll(UtilMap.map("type, abbr, formId", "销售发票, FLOURISH, 4070f44f-72da-4beb-b4b4-64d65d70c271"));
  51. log.info("invoice, {}", data);
  52. McException.assertParamException_Null(data, "formId, abbr, type");
  53. String formId = UtilMap.getString(data, "formId");
  54. Map formData = ydClient.queryData(YDParam.builder()
  55. .formInstId(formId)
  56. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  57. /// 字段: 销售方, 购买方, 发票号, 合同号, 付款条款, 船名, 提单号, 原厂地(国家), 装货港, 卸货港, 包装方式, 贸易方式, 提单日期, 品名
  58. Map printData = UtilMap.map("seller, buyer, invoice, contract, payment, vessel, lading, origin, ladP, disP, packing, trade, bDate, commodity",
  59. "selectField_mgvg350c, selectField_mgvh3io0, textField_l6q5sysr, selectField_mkdpx3e7, selectField_l5rljms7, selectField_migsdo11, textField_migsdo16, textField_migsdo17, selectField_mkdpx3e8, selectField_mkdpx3e9, textareaField_migsdo1a, textField_migsdo1b, dateField_migsdo1e, selectField_l6mztuvx",
  60. formData);
  61. printData.put("date", UtilDateTime.formatDate(new Date(UtilMap.getLong(formData, "dateField_mgvqvr4l")))); // 开票日期
  62. String title = UtilMap.getString(formData, "selectField_mgvqvr4j").equals("最终发票") ? "FINAL COMMERCIAL INVOICE" : "PROVISIONAL COMMERCIAL INVOICE";
  63. printData.put("title", title); // 发票类型
  64. String[] sAddrs = UtilMap.getString(formData, "textareaField_migsdo0w").split("\\|");
  65. for (int i = 0; i < sAddrs.length; i++) {
  66. printData.put("sAddr" + i, sAddrs[i]); // 销售方-地址
  67. }
  68. String[] bAddrs = UtilMap.getString(formData, "textareaField_migsdo0x").split("\\|");
  69. for (int i = 0; i < bAddrs.length; i++) {
  70. printData.put("bAddr" + i, bAddrs[i]); // 购买方-地址
  71. }
  72. List<Map> details = UtilMap.getList(formData, "tableField_mgvqvr53");
  73. List<Map> dataList = details.stream().map(item-> {
  74. // 字段: 业务-业务类型, 吨数-结算吨数, 单价-发票金额(原币), 总价-发票合计(原币)
  75. Map row = UtilMap.map("part, num, price, amount, rate",
  76. "selectField_mgugk66v, numberField_mgvqvr58, numberField_l5ryl6qe, numberField_l5m487p0, numberField_mgugk673",
  77. item);
  78. String part = UtilMap.getString(item, "selectField_mgugk66v");
  79. row.put("part", PART_EN.getOrDefault(part, part)); // prd: 物流类型模板展示英文业务类型, 命中映射才替换
  80. row.put("quantity", UtilMap.getFloat(item, "numberField_mgvqvr58") + "MT");
  81. row.put("exchange", UtilNumber.formatPrecisionString(UtilMap.getFloat(item, "numberField_l5ryl6qe") * UtilMap.getFloat(item, "numberField_mgugk673")));
  82. row.put("empty", ""); // ppExt: 添加了子表, 若模板未用到会异常, 添加标注
  83. return row;
  84. }).collect(Collectors.toList());
  85. printData.put("oTotal", UtilMap.getFloat(formData, "numberField_mhek85oq")); // 发票金额合计-原币
  86. log.info("printData, {}", printData);
  87. String type = UtilMap.getString(data, "type"); // 模板类型
  88. String abbr = UtilMap.getString(data, "abbr"); // 公司简称
  89. String fileName = abbr + " " + title;
  90. UtilExcel.exportMapAndListByTemplate(response, printData, dataList, Map.class, fileName, abbr + " " + type + ".xlsx");
  91. return McR.success();
  92. }
  93. }