| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package com.jeesite.modules.mes.service;
- import java.util.Date;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.jeesite.common.collect.ListUtils;
- import com.jeesite.common.entity.Page;
- import com.jeesite.common.lang.DateUtils;
- import com.jeesite.common.lang.StringUtils;
- import com.jeesite.common.service.CrudService;
- import com.jeesite.common.service.ServiceException;
- import com.jeesite.modules.mes.entity.MesMaterialBl;
- import com.jeesite.modules.mes.entity.MesMaterialLl;
- import com.jeesite.modules.mes.dao.MesMaterialLlDao;
- import com.jeesite.modules.mes.util.U9cAuthUtil;
- import com.jeesite.modules.file.utils.FileUploadUtils;
- /**
- * 生产领料单Service
- * @author sxl
- * @version 2026-06-30
- */
- @Service
- public class MesMaterialLlService extends CrudService<MesMaterialLlDao, MesMaterialLl> {
- @Autowired
- private MesMaterialBlService mesMaterialBlService;
- /**
- * 获取单条数据
- * @param mesMaterialLl
- * @return
- */
- @Override
- public MesMaterialLl get(MesMaterialLl mesMaterialLl) {
- return super.get(mesMaterialLl);
- }
- /**
- * 查询分页数据
- * @param mesMaterialLl 查询条件
- * @param mesMaterialLl.page 分页对象
- * @return
- */
- @Override
- public Page<MesMaterialLl> findPage(MesMaterialLl mesMaterialLl) {
- return super.findPage(mesMaterialLl);
- }
- /**
- * 查询列表数据
- * @param mesMaterialLl
- * @return
- */
- @Override
- public List<MesMaterialLl> findList(MesMaterialLl mesMaterialLl) {
- return super.findList(mesMaterialLl);
- }
- /**
- * 保存数据(插入或更新)
- * @param mesMaterialLl
- */
- @Override
- @Transactional
- public void save(MesMaterialLl mesMaterialLl) {
- super.save(mesMaterialLl);
- // 保存上传图片
- FileUploadUtils.saveFileUpload(mesMaterialLl, mesMaterialLl.getId(), "mesMaterialLl_image");
- }
- /**
- * 更新状态
- * @param mesMaterialLl
- */
- @Override
- @Transactional
- public void updateStatus(MesMaterialLl mesMaterialLl) {
- super.updateStatus(mesMaterialLl);
- }
- /**
- * 删除数据
- * @param mesMaterialLl
- */
- @Override
- @Transactional
- public void delete(MesMaterialLl mesMaterialLl) {
- super.delete(mesMaterialLl);
- }
- /**
- * 生产领料单出库:根据生产订单号匹配备料行号
- */
- @Transactional
- public void materialLl(MesMaterialLl mesMaterialLl) {
- MesMaterialLl entity;
- if (StringUtils.isNotBlank(mesMaterialLl.getId())) {
- entity = get(mesMaterialLl);
- if (entity == null) {
- throw new ServiceException(text("生产领料单不存在!"));
- }
- } else {
- entity = mesMaterialLl;
- }
- if (StringUtils.isBlank(entity.getMoDocNo())) {
- throw new ServiceException(text("生产订单号不能为空!"));
- }
- MesMaterialBl query = new MesMaterialBl();
- query.setOrderId(entity.getMoDocNo());
- query.setErpSn(entity.getItemCode());
- List<MesMaterialBl> blList = mesMaterialBlService.findList(query);
- if (ListUtils.isEmpty(blList)) {
- throw new ServiceException(text("未找到对应备料信息!"));
- }
- MesMaterialBl mesMaterialBl = blList.get(0);
- if (StringUtils.isBlank(mesMaterialBl.getDocLineNo())) {
- throw new ServiceException(text("备料行号不能为空!"));
- }
- entity.setMopickList(mesMaterialBl.getDocLineNo());
- save(entity);
- entity.setIsNewRecord(false);
- syncIssueDocToErp(entity);
- }
- private String buildCreateIssueDocJson(MesMaterialLl mesMaterialLl) {
- JSONObject root = new JSONObject(true);
- root.put("OtherID", StringUtils.defaultIfBlank(mesMaterialLl.getOtherId(), mesMaterialLl.getId()));
- root.put("BusinessDate", formatIssueDocDate(mesMaterialLl.getBusinessDate()));
- root.put("MODocNo", StringUtils.defaultIfBlank(mesMaterialLl.getMoDocNo(), ""));
- root.put("DeptCode", StringUtils.defaultIfBlank(mesMaterialLl.getDeptCode(), ""));
- root.put("EmployeeCode", StringUtils.defaultIfBlank(mesMaterialLl.getEmployeeCode(), ""));
- JSONObject line = new JSONObject(true);
- line.put("IsNoPickLine", "1".equals(mesMaterialLl.getIsNoPickLine()));
- line.put("WHCode", StringUtils.defaultIfBlank(mesMaterialLl.getWhCode(), ""));
- line.put("BinCode", StringUtils.defaultIfBlank(mesMaterialLl.getBinCode(), ""));
- line.put("ItemCode", StringUtils.defaultIfBlank(mesMaterialLl.getItemCode(), ""));
- line.put("LotCode", StringUtils.defaultIfBlank(mesMaterialLl.getLotCode(), ""));
- line.put("ProjectCode", StringUtils.defaultIfBlank(mesMaterialLl.getProjectCode(), ""));
- line.put("IssuedQty", mesMaterialLl.getIssuedQty() != null ? mesMaterialLl.getIssuedQty() : 0);
- line.put("MOPickList", StringUtils.defaultIfBlank(mesMaterialLl.getMopickList(), ""));
- JSONArray lineDtos = new JSONArray();
- lineDtos.add(line);
- root.put("LineDtos", lineDtos);
- JSONArray requestArray = new JSONArray();
- requestArray.add(root);
- return requestArray.toJSONString();
- }
- private String formatIssueDocDate(Date date) {
- if (date == null) {
- return "";
- }
- return DateUtils.formatDate(date, "yyyy-MM-dd");
- }
- private void syncIssueDocToErp(MesMaterialLl mesMaterialLl) {
- String requestJson = buildCreateIssueDocJson(mesMaterialLl);
- JSONObject response = U9cAuthUtil.createIssueDoc(requestJson);
- if (response == null) {
- throw new ServiceException(text("同步ERP失败!"));
- }
- if (!Boolean.TRUE.equals(response.getBoolean("Success"))) {
- String msg = response.getString("ResMsg");
- throw new ServiceException(text(StringUtils.isNotBlank(msg) ? msg : "同步ERP失败!"));
- }
- JSONArray dataList = response.getJSONArray("Data");
- if (dataList == null || dataList.isEmpty()) {
- throw new ServiceException(text("同步ERP失败:返回数据为空!"));
- }
- JSONObject data = dataList.getJSONObject(0);
- if (data == null || !Boolean.TRUE.equals(data.getBoolean("IsSucceed"))) {
- String errorMsg = data != null ? data.getString("ErrorMsg") : null;
- throw new ServiceException(text(StringUtils.isNotBlank(errorMsg) ? errorMsg : "同步ERP失败!"));
- }
- String issueDocNo = data.getString("Code");
- if (StringUtils.isBlank(issueDocNo)) {
- throw new ServiceException(text("同步ERP失败:未返回生产领料单号!"));
- }
- mesMaterialLl.setIssueDocNo(issueDocNo);
- mesMaterialLl.setIsNewRecord(false);
- mesMaterialLl.setState("1");
- super.update(mesMaterialLl);
- }
- }
|