MesMaterialLlService.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.jeesite.modules.mes.service;
  2. import java.util.Date;
  3. import java.util.List;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import com.alibaba.fastjson.JSONArray;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.jeesite.common.collect.ListUtils;
  10. import com.jeesite.common.entity.Page;
  11. import com.jeesite.common.lang.DateUtils;
  12. import com.jeesite.common.lang.StringUtils;
  13. import com.jeesite.common.service.CrudService;
  14. import com.jeesite.common.service.ServiceException;
  15. import com.jeesite.modules.mes.entity.MesMaterialBl;
  16. import com.jeesite.modules.mes.entity.MesMaterialLl;
  17. import com.jeesite.modules.mes.dao.MesMaterialLlDao;
  18. import com.jeesite.modules.mes.util.U9cAuthUtil;
  19. import com.jeesite.modules.file.utils.FileUploadUtils;
  20. /**
  21. * 生产领料单Service
  22. * @author sxl
  23. * @version 2026-06-30
  24. */
  25. @Service
  26. public class MesMaterialLlService extends CrudService<MesMaterialLlDao, MesMaterialLl> {
  27. @Autowired
  28. private MesMaterialBlService mesMaterialBlService;
  29. /**
  30. * 获取单条数据
  31. * @param mesMaterialLl
  32. * @return
  33. */
  34. @Override
  35. public MesMaterialLl get(MesMaterialLl mesMaterialLl) {
  36. return super.get(mesMaterialLl);
  37. }
  38. /**
  39. * 查询分页数据
  40. * @param mesMaterialLl 查询条件
  41. * @param mesMaterialLl.page 分页对象
  42. * @return
  43. */
  44. @Override
  45. public Page<MesMaterialLl> findPage(MesMaterialLl mesMaterialLl) {
  46. return super.findPage(mesMaterialLl);
  47. }
  48. /**
  49. * 查询列表数据
  50. * @param mesMaterialLl
  51. * @return
  52. */
  53. @Override
  54. public List<MesMaterialLl> findList(MesMaterialLl mesMaterialLl) {
  55. return super.findList(mesMaterialLl);
  56. }
  57. /**
  58. * 保存数据(插入或更新)
  59. * @param mesMaterialLl
  60. */
  61. @Override
  62. @Transactional
  63. public void save(MesMaterialLl mesMaterialLl) {
  64. super.save(mesMaterialLl);
  65. // 保存上传图片
  66. FileUploadUtils.saveFileUpload(mesMaterialLl, mesMaterialLl.getId(), "mesMaterialLl_image");
  67. }
  68. /**
  69. * 更新状态
  70. * @param mesMaterialLl
  71. */
  72. @Override
  73. @Transactional
  74. public void updateStatus(MesMaterialLl mesMaterialLl) {
  75. super.updateStatus(mesMaterialLl);
  76. }
  77. /**
  78. * 删除数据
  79. * @param mesMaterialLl
  80. */
  81. @Override
  82. @Transactional
  83. public void delete(MesMaterialLl mesMaterialLl) {
  84. super.delete(mesMaterialLl);
  85. }
  86. /**
  87. * 生产领料单出库:根据生产订单号匹配备料行号
  88. */
  89. @Transactional
  90. public void materialLl(MesMaterialLl mesMaterialLl) {
  91. MesMaterialLl entity;
  92. if (StringUtils.isNotBlank(mesMaterialLl.getId())) {
  93. entity = get(mesMaterialLl);
  94. if (entity == null) {
  95. throw new ServiceException(text("生产领料单不存在!"));
  96. }
  97. } else {
  98. entity = mesMaterialLl;
  99. }
  100. if (StringUtils.isBlank(entity.getMoDocNo())) {
  101. throw new ServiceException(text("生产订单号不能为空!"));
  102. }
  103. MesMaterialBl query = new MesMaterialBl();
  104. query.setOrderId(entity.getMoDocNo());
  105. query.setErpSn(entity.getItemCode());
  106. List<MesMaterialBl> blList = mesMaterialBlService.findList(query);
  107. if (ListUtils.isEmpty(blList)) {
  108. throw new ServiceException(text("未找到对应备料信息!"));
  109. }
  110. MesMaterialBl mesMaterialBl = blList.get(0);
  111. if (StringUtils.isBlank(mesMaterialBl.getDocLineNo())) {
  112. throw new ServiceException(text("备料行号不能为空!"));
  113. }
  114. entity.setMopickList(mesMaterialBl.getDocLineNo());
  115. save(entity);
  116. entity.setIsNewRecord(false);
  117. syncIssueDocToErp(entity);
  118. }
  119. private String buildCreateIssueDocJson(MesMaterialLl mesMaterialLl) {
  120. JSONObject root = new JSONObject(true);
  121. root.put("OtherID", StringUtils.defaultIfBlank(mesMaterialLl.getOtherId(), mesMaterialLl.getId()));
  122. root.put("BusinessDate", formatIssueDocDate(mesMaterialLl.getBusinessDate()));
  123. root.put("MODocNo", StringUtils.defaultIfBlank(mesMaterialLl.getMoDocNo(), ""));
  124. root.put("DeptCode", StringUtils.defaultIfBlank(mesMaterialLl.getDeptCode(), ""));
  125. root.put("EmployeeCode", StringUtils.defaultIfBlank(mesMaterialLl.getEmployeeCode(), ""));
  126. JSONObject line = new JSONObject(true);
  127. line.put("IsNoPickLine", "1".equals(mesMaterialLl.getIsNoPickLine()));
  128. line.put("WHCode", StringUtils.defaultIfBlank(mesMaterialLl.getWhCode(), ""));
  129. line.put("BinCode", StringUtils.defaultIfBlank(mesMaterialLl.getBinCode(), ""));
  130. line.put("ItemCode", StringUtils.defaultIfBlank(mesMaterialLl.getItemCode(), ""));
  131. line.put("LotCode", StringUtils.defaultIfBlank(mesMaterialLl.getLotCode(), ""));
  132. line.put("ProjectCode", StringUtils.defaultIfBlank(mesMaterialLl.getProjectCode(), ""));
  133. line.put("IssuedQty", mesMaterialLl.getIssuedQty() != null ? mesMaterialLl.getIssuedQty() : 0);
  134. line.put("MOPickList", StringUtils.defaultIfBlank(mesMaterialLl.getMopickList(), ""));
  135. JSONArray lineDtos = new JSONArray();
  136. lineDtos.add(line);
  137. root.put("LineDtos", lineDtos);
  138. JSONArray requestArray = new JSONArray();
  139. requestArray.add(root);
  140. return requestArray.toJSONString();
  141. }
  142. private String formatIssueDocDate(Date date) {
  143. if (date == null) {
  144. return "";
  145. }
  146. return DateUtils.formatDate(date, "yyyy-MM-dd");
  147. }
  148. private void syncIssueDocToErp(MesMaterialLl mesMaterialLl) {
  149. String requestJson = buildCreateIssueDocJson(mesMaterialLl);
  150. JSONObject response = U9cAuthUtil.createIssueDoc(requestJson);
  151. if (response == null) {
  152. throw new ServiceException(text("同步ERP失败!"));
  153. }
  154. if (!Boolean.TRUE.equals(response.getBoolean("Success"))) {
  155. String msg = response.getString("ResMsg");
  156. throw new ServiceException(text(StringUtils.isNotBlank(msg) ? msg : "同步ERP失败!"));
  157. }
  158. JSONArray dataList = response.getJSONArray("Data");
  159. if (dataList == null || dataList.isEmpty()) {
  160. throw new ServiceException(text("同步ERP失败:返回数据为空!"));
  161. }
  162. JSONObject data = dataList.getJSONObject(0);
  163. if (data == null || !Boolean.TRUE.equals(data.getBoolean("IsSucceed"))) {
  164. String errorMsg = data != null ? data.getString("ErrorMsg") : null;
  165. throw new ServiceException(text(StringUtils.isNotBlank(errorMsg) ? errorMsg : "同步ERP失败!"));
  166. }
  167. String issueDocNo = data.getString("Code");
  168. if (StringUtils.isBlank(issueDocNo)) {
  169. throw new ServiceException(text("同步ERP失败:未返回生产领料单号!"));
  170. }
  171. mesMaterialLl.setIssueDocNo(issueDocNo);
  172. mesMaterialLl.setIsNewRecord(false);
  173. mesMaterialLl.setState("1");
  174. super.update(mesMaterialLl);
  175. }
  176. }