新火炬后端单体项目初始化代码
zhangherong
13 小时以前 a27f1b573fc5cf9a3b78e2eacb56e44310f83456
art: 添加入库逻辑,SAP订单同步参数动态配置
已添加1个文件
已修改9个文件
已删除1个文件
206 ■■■■ 文件已修改
src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInventory.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/enums/MaterialCategory.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/enums/MaterialInventoryStatusEnum.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInboundService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInboundServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncCreationJob.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/request/WMSWebServiceSendItem.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/wms/service/impl/MESWebServiceSoapImpl.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-prod.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInventory.java
@@ -9,6 +9,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.modules.lsw.enums.MaterialInventoryStatusEnum;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
@@ -76,4 +77,15 @@
    @Excel(name = "库存状态", width = 15)
    @ApiModelProperty(value = "库存状态")
    private String inventoryStatus;
    public LswMaterialInventory(){}
    public LswMaterialInventory(LswMaterialInbound inbound, String materialId, String inventoryCategory) {
        this.warehouseId = inbound.getWarehouseId();
        this.quantity = inbound.getQuantity();
        this.batchNumber = inbound.getBatchNumber();
        this.inventoryStatus = MaterialInventoryStatusEnum.NORMAL.name();
        this.inventoryCategory = inventoryCategory;
        this.materialId = materialId;
    }
}
src/main/java/org/jeecg/modules/lsw/enums/MaterialCategory.java
ÎļþÒÑɾ³ý
src/main/java/org/jeecg/modules/lsw/enums/MaterialInventoryStatusEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package org.jeecg.modules.lsw.enums;
public enum MaterialInventoryStatusEnum {
    NORMAL, //正常
    OUTBOUND, //已出库
    ;
}
src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInboundService.java
@@ -15,4 +15,11 @@
 */
public interface ILswMaterialInboundService extends IService<LswMaterialInbound> {
    IPage<Map<String, Object>> getlswMaterialInboundListData(Integer pageNo, Integer pageSize, HttpServletRequest req);
    /**
     * ç‰©æ–™å…¥åº“
     * @param materialInbound å…¥åº“信息
     * @return
     */
    boolean inboundMaterial(LswMaterialInbound materialInbound);
}
src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInboundServiceImpl.java
@@ -4,12 +4,20 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.lsw.entity.LswMaterial;
import org.jeecg.modules.lsw.entity.LswMaterialInbound;
import org.jeecg.modules.lsw.entity.LswMaterialInventory;
import org.jeecg.modules.lsw.mapper.LswMaterialInboundMapper;
import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
import org.jeecg.modules.lsw.service.ILswMaterialService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -21,6 +29,10 @@
 */
@Service
public class LswMaterialInboundServiceImpl extends ServiceImpl<LswMaterialInboundMapper, LswMaterialInbound> implements ILswMaterialInboundService {
    @Autowired
    private ILswMaterialInventoryService inventoryService;
    @Autowired
    private ILswMaterialService materialService;
    @Override
    public IPage<Map<String, Object>> getlswMaterialInboundListData(Integer pageNo, Integer pageSize, HttpServletRequest req) {
@@ -40,4 +52,29 @@
        }
        return super.getBaseMapper().getlswMaterialInboundListData(pageData, paramMap);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean inboundMaterial(LswMaterialInbound materialInbound) {
        if (StringUtils.isBlank(materialInbound.getMaterialNumber())
                || StringUtils.isBlank(materialInbound.getFactoryId())
                || StringUtils.isBlank(materialInbound.getWarehouseId())
                || materialInbound.getQuantity() == null
                || materialInbound.getQuantity().intValue() > 0
                || StringUtils.isBlank(materialInbound.getBatchNumber())) {
            return false;
        }
        LswMaterial material = materialService.queryByMaterialNumber(materialInbound.getMaterialNumber());
        if(material == null) {
            return false;
        }
        //保存入库信息
        materialInbound.setDelFlag(CommonConstant.DEL_FLAG_0);
        materialInbound.setReceiveTime(new Date());
        super.save(materialInbound);
        //保存库存信息
        LswMaterialInventory lswMaterialInventory = new LswMaterialInventory(materialInbound, material.getId(), material.getMaterialCategory());
        inventoryService.save(lswMaterialInventory);
        return true;
    }
}
src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncCreationJob.java
@@ -23,6 +23,7 @@
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@@ -34,7 +35,8 @@
@Slf4j
public class ProductionOrderSyncCreationJob implements Job {
    //工厂编码(新火炬 2301)
    private static final String FACTORY_CODE = "2301";
    @Value("${xhj.factoryCode:2301}")
    private String FACTORY_CODE;
    /**
     * è®¢å•类型
     * æ ‡å‡†ç”Ÿäº§è®¢å• Z001
@@ -43,7 +45,8 @@
     * è¯•制生产订单(新火炬)  Z011
     * æ‹†é›¶ç”Ÿäº§è®¢å•(新火炬)  2012
     */
    private static final String ORDER_TYPE_CODE = "Z001";
    @Value("${xhj.orderType:Z001}")
    private String ORDER_TYPE_CODE;
    /**
     * ç”Ÿäº§è°ƒåº¦å‘˜
     * 001 ä¸€åˆ†åŽ‚è°ƒåº¦å‘˜
@@ -58,14 +61,16 @@
     * 010 å…­åŽ‚è°ƒåº¦å‘˜
     * 012 å…«åˆ†åŽ‚è°ƒåº¦å‘˜
     */
    private static final String PRODUCTION_MANAGER = "010";
    @Value("${xhj.productionManager:012}")
    private String PRODUCTION_MANAGER;
    /**
     * ç”Ÿäº§è®¢å•状态,实际上,只有REL状态的工单才可以进行操作
     * CRTD æ–°å»º
     * REL ä¸‹è¾¾
     * TECO å…³é—­
     */
    private static final String ORDER_STATUS = "REL";
    @Value("${xhj.orderStatus:REL}")
    private String ORDER_STATUS;
    /**
     * è¯·æ±‚成功编码
src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java
@@ -23,6 +23,7 @@
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@@ -34,7 +35,8 @@
@Slf4j
public class ProductionOrderSyncUpdateJob implements Job {
    //工厂编码(新火炬 2301)
    private static final String FACTORY_CODE = "2301";
    @Value("${xhj.factoryCode:2301}")
    private String FACTORY_CODE;
    /**
     * è®¢å•类型
     * æ ‡å‡†ç”Ÿäº§è®¢å• Z001
@@ -43,7 +45,8 @@
     * è¯•制生产订单(新火炬)  Z011
     * æ‹†é›¶ç”Ÿäº§è®¢å•(新火炬)  2012
     */
    private static final String ORDER_TYPE_CODE = "Z001";
    @Value("${xhj.orderType:Z001}")
    private String ORDER_TYPE_CODE;
    /**
     * ç”Ÿäº§è°ƒåº¦å‘˜
     * 001 ä¸€åˆ†åŽ‚è°ƒåº¦å‘˜
@@ -58,14 +61,16 @@
     * 010 å…­åŽ‚è°ƒåº¦å‘˜
     * 012 å…«åˆ†åŽ‚è°ƒåº¦å‘˜
     */
    private static final String PRODUCTION_MANAGER = "010";
    @Value("${xhj.productionManager:012}")
    private String PRODUCTION_MANAGER;
    /**
     * ç”Ÿäº§è®¢å•状态,实际上,只有REL状态的工单才可以进行操作
     * CRTD æ–°å»º
     * REL ä¸‹è¾¾
     * TECO å…³é—­
     */
    private static final String ORDER_STATUS = "REL";
    @Value("${xhj.orderStatus:REL}")
    private String ORDER_STATUS;
    /**
     * è¯·æ±‚成功编码
src/main/java/org/jeecg/modules/wms/request/WMSWebServiceSendItem.java
@@ -8,6 +8,7 @@
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import java.math.BigDecimal;
@Getter
@Setter
@@ -63,7 +64,7 @@
    private String mesStockID;
    /** æ•°é‡ */
    @XmlElement(name = "Quantity")
    private String quantity;
    private BigDecimal quantity;
    /** SAP批次号 */
    @XmlElement(name = "SapTrackLot")
    private String sapTrackLot;
src/main/java/org/jeecg/modules/wms/service/impl/MESWebServiceSoapImpl.java
@@ -5,7 +5,12 @@
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.aspect.annotation.ApiLog;
import org.jeecg.common.constant.ApiLogCategoryEnum;
import org.jeecg.modules.base.entity.LineSideWarehouse;
import org.jeecg.modules.base.service.ILineSideWarehouseService;
import org.jeecg.modules.lsw.entity.LswMaterialInbound;
import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
import org.jeecg.modules.mes.entity.MesMaterialTransferRequest;
import org.jeecg.modules.mes.enums.MaterialTransferRequestStatus;
import org.jeecg.modules.mes.service.IMesMaterialTransferRequestService;
import org.jeecg.modules.wms.dto.WSResponse;
import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
@@ -21,6 +26,7 @@
import javax.jws.WebService;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
import java.math.BigDecimal;
@Slf4j
@@ -30,6 +36,10 @@
    @Autowired
    private IMesMaterialTransferRequestService materialTransferRequestService;
    @Autowired
    private ILineSideWarehouseService lineSideWarehouseService;
    @Autowired
    private ILswMaterialInboundService materialInboundService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -45,16 +55,58 @@
            response.setErrorDesc("传入的参数为空!");
            return response;
        }
        for(WMSWebServiceSendItem item : request.getWmsWebServiceSendItemList()) {
            if(StringUtils.isNotBlank(item.getReservationOrder())) {
        String errorCode = "N";
        int errorCount = 0;
        int successCount = 0;
        StringBuilder errorMsg = new StringBuilder();
        for (WMSWebServiceSendItem item : request.getWmsWebServiceSendItemList()) {
            if (StringUtils.isNotBlank(item.getReservationOrder())) {
                //物料拉动回调
                MesMaterialTransferRequest transferRequest = materialTransferRequestService.queryByReservationCode(item.getReservationOrder());
                if(transferRequest == null) {
                    response.setErrorCode("N");
                    response.setErrorDesc("根据预留号未找到物料拉动单!");
                    return response;
                if (transferRequest == null) {
                    errorCount++;
                    errorMsg.append("根据预留号[").append(item.getReservationOrder()).append("]未找到物料拉动单!");
                    continue;
                }
            }else if(StringUtils.isNotBlank(item.getAlign())){
                LineSideWarehouse warehouse = lineSideWarehouseService.getById(transferRequest.getTargetWarehouseId());
                if(warehouse == null || !warehouse.getWarehouseCode().equals(item.getDestSection())) {
                    errorCount++;
                    errorMsg.append("线边库[").append(item.getDestSection()).append("]未找到!");
                    continue;
                }
                if(!transferRequest.getMaterialNumber().equals(item.getSkuCode())) {
                    errorCount++;
                    errorMsg.append("物料编号[").append(item.getSkuCode()).append("]不匹配!");
                    continue;
                }
                if(StringUtils.isBlank(item.getTrackLot())) {
                    errorCount++;
                    errorMsg.append("批次号[").append(item.getTrackLot()).append("]不能为空!");
                    continue;
                }
                transferRequest.setRequestStatus(MaterialTransferRequestStatus.CHECKED_IN.name());
                //计算实际拉动数量
                BigDecimal actualQuantity = transferRequest.getActualQuantity() == null ? item.getQuantity() : transferRequest.getActualQuantity().add(item.getQuantity());
                transferRequest.setActualQuantity(actualQuantity);
                //添加入库信息
                LswMaterialInbound inbound = new LswMaterialInbound();
                inbound.setWarehouseId(transferRequest.getTargetWarehouseId());
                inbound.setReceiver("WMS");
                inbound.setMaterialNumber(transferRequest.getMaterialNumber());
                inbound.setMaterialName(transferRequest.getMaterialName());
                inbound.setBatchNumber(item.getTrackLot());
                inbound.setQuantity(item.getQuantity());
                inbound.setFactoryId(warehouse.getFactoryId());
                boolean b = materialInboundService.inboundMaterial(inbound);
                if(!b) {
                    errorCount++;
                    errorMsg.append("预留号[").append(item.getReservationOrder()).append("]入库失败!");
                    continue;
                }
                //更新物料拉动单
                materialTransferRequestService.updateById(transferRequest);
            } else if (StringUtils.isNotBlank(item.getAlign())) {
                //移库单回调
            }
        }
src/main/resources/application-dev.yml
@@ -303,4 +303,9 @@
  appId: cli_a74aab6353b7d00e
  appSecret: mx5wm7X9S8WSzZCOYlxcggXTFL8iujIT
  sync:
    departmentId: od-47692f32e6b66cc3985d317fee780a8b
    departmentId: od-47692f32e6b66cc3985d317fee780a8b
xhj:
  factoryCode: 2301
  orderType: Z001
  productionManager: 010
  orderStatus: REL
src/main/resources/application-prod.yml
@@ -302,4 +302,9 @@
  appId: cli_a74aab6353b7d00e
  appSecret: mx5wm7X9S8WSzZCOYlxcggXTFL8iujIT
  sync:
    departmentId: od-47692f32e6b66cc3985d317fee780a8b
    departmentId: od-47692f32e6b66cc3985d317fee780a8b
xhj:
  factoryCode: 2301
  orderType: Z001
  productionManager: 010
  orderStatus: REL