| | |
| | | "avatar": "", |
| | | "version": "4.9.2", |
| | | "createdTime": "2025-3-10 16:38:19", |
| | | "updatedTime": "2025-8-20 15:14:16", |
| | | "updatedTime": "2025-8-27 16:35:43", |
| | | "dbConns": [], |
| | | "profile": { |
| | | "default": { |
| | |
| | | "#DDE5FF" |
| | | ], |
| | | "DDLToggleCase": "L", |
| | | "menuWidth": "304px" |
| | | "menuWidth": "331px" |
| | | }, |
| | | "entities": [ |
| | | { |
| | |
| | | "id": "9056CBAC-AC31-46AC-802D-7ECC455F7834" |
| | | }, |
| | | { |
| | | "defKey": "inventory_id", |
| | | "defName": "åºåID", |
| | | "comment": "", |
| | | "type": "", |
| | | "len": "", |
| | | "scale": "", |
| | | "primaryKey": false, |
| | | "notNull": false, |
| | | "autoIncrement": false, |
| | | "defaultValue": "", |
| | | "hideInGraph": false, |
| | | "refDict": "", |
| | | "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", |
| | | "extProps": {}, |
| | | "domain": "16120F75-6AA7-4483-868D-F07F511BB081", |
| | | "id": "F0CCB50E-95F3-4D54-BE72-846BDAD32511" |
| | | }, |
| | | { |
| | | "defKey": "warehouse_id", |
| | | "defName": "åºåå°", |
| | | "comment": "", |
| | | "type": "", |
| | | "len": "", |
| | | "scale": "", |
| | | "primaryKey": false, |
| | | "notNull": false, |
| | | "autoIncrement": false, |
| | | "defaultValue": "", |
| | | "hideInGraph": false, |
| | | "refDict": "", |
| | | "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", |
| | | "extProps": {}, |
| | | "domain": "16120F75-6AA7-4483-868D-F07F511BB081", |
| | | "id": "3892DFB2-BCFA-413E-9930-4B88E5C8EFE8" |
| | | }, |
| | | { |
| | | "defKey": "batch_number", |
| | | "defName": "æ¹æ¬¡å·", |
| | | "comment": "", |
| | |
| | | "extProps": {}, |
| | | "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4", |
| | | "id": "5B833F2B-D8C6-478D-B830-604D2CC6AAF0" |
| | | }, |
| | | { |
| | | "defKey": "work_order_id", |
| | | "defName": "å·¥åID", |
| | | "comment": "", |
| | | "type": "", |
| | | "len": "", |
| | | "scale": "", |
| | | "primaryKey": false, |
| | | "notNull": false, |
| | | "autoIncrement": false, |
| | | "defaultValue": "", |
| | | "hideInGraph": false, |
| | | "refDict": "", |
| | | "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", |
| | | "extProps": {}, |
| | | "domain": "16120F75-6AA7-4483-868D-F07F511BB081", |
| | | "id": "8D4EEF04-86ED-455F-A843-E9CAADBA042C" |
| | | } |
| | | ], |
| | | "correlations": [], |
| | |
| | | "id": "144B6087-1070-4007-9882-2A64F8AAAD91" |
| | | }, |
| | | { |
| | | "defKey": "order_category", |
| | | "defName": "ç§»åºç±»å", |
| | | "defKey": "inventory_id", |
| | | "defName": "åºåID", |
| | | "comment": "", |
| | | "type": "", |
| | | "len": "", |
| | |
| | | "refDict": "", |
| | | "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64", |
| | | "extProps": {}, |
| | | "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792", |
| | | "id": "EB0DE062-AF2C-4401-8773-663BBDB65F84" |
| | | "domain": "16120F75-6AA7-4483-868D-F07F511BB081", |
| | | "id": "F0B826E3-51CF-4FA3-A239-95CFBAA64184" |
| | | }, |
| | | { |
| | | "defKey": "original_warehouse_id", |
| | |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | |
| | | public class LswMaterialOutbound implements Serializable { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /**主é®*/ |
| | | /**主é®*/ |
| | | @TableId(type = IdType.ASSIGN_ID) |
| | | @ApiModelProperty(value = "主é®") |
| | | private String id; |
| | |
| | | @ApiModelProperty(value = "产线ID") |
| | | @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name") |
| | | private String factoryId; |
| | | /**åºåID*/ |
| | | @Excel(name = "åºåID", width = 15) |
| | | @ApiModelProperty(value = "åºåID") |
| | | private String inventoryId; |
| | | /**线边åºID*/ |
| | | @Excel(name = "线边åºID", width = 15) |
| | | @ApiModelProperty(value = "线边åºID") |
| | | private String warehouseId; |
| | | /**æ¹æ¬¡å·*/ |
| | | @Excel(name = "æ¹æ¬¡å·", width = 15) |
| | | @ApiModelProperty(value = "æ¹æ¬¡å·") |
| | |
| | | /**åºåºæ°é*/ |
| | | @Excel(name = "åºåºæ°é", width = 15) |
| | | @ApiModelProperty(value = "åºåºæ°é") |
| | | private Double quantity; |
| | | /**å·¥åID*/ |
| | | @Excel(name = "å·¥åID", width = 15) |
| | | @ApiModelProperty(value = "å·¥åID") |
| | | private String workOrderId; |
| | | private BigDecimal quantity; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.lsw.enums; |
| | | |
| | | public enum MaterialInventoryCategoryEnum { |
| | | INBOUND, //å
¥åº |
| | | UNLOADING, //䏿 |
| | | ; |
| | | } |
| | |
| | | */ |
| | | public interface ILswMaterialOutboundService extends IService<LswMaterialOutbound> { |
| | | IPage<Map<String, Object>> getlswMaterialOutboundListData(Integer pageNo, Integer pageSize, HttpServletRequest req); |
| | | |
| | | /** |
| | | * ç©æåºåº |
| | | * @param outbound |
| | | * @return |
| | | */ |
| | | boolean outboundMaterial(LswMaterialOutbound outbound); |
| | | } |
| | |
| | | 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.LswMaterialInventory; |
| | | import org.jeecg.modules.lsw.entity.LswMaterialOutbound; |
| | | import org.jeecg.modules.lsw.enums.MaterialInventoryStatusEnum; |
| | | import org.jeecg.modules.lsw.mapper.LswMaterialOutboundMapper; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInboundService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInventoryService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialOutboundService; |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: ç©æåºåºå |
| | | * @Author: jeecg-boot |
| | | * @Date: 2025-06-30 |
| | | * @Date: 2025-06-30 |
| | | * @Version: V1.0 |
| | | */ |
| | | @Service |
| | | public class LswMaterialOutboundServiceImpl extends ServiceImpl<LswMaterialOutboundMapper, LswMaterialOutbound> implements ILswMaterialOutboundService { |
| | | @Autowired |
| | | private ILswMaterialService materialService; |
| | | @Autowired |
| | | private ILswMaterialInventoryService materialInventoryService; |
| | | |
| | | @Override |
| | | public IPage<Map<String, Object>> getlswMaterialOutboundListData(Integer pageNo, Integer pageSize, HttpServletRequest req) { |
| | |
| | | } |
| | | return super.getBaseMapper().getlswMaterialOutboundListData(pageData, paramMap); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean outboundMaterial(LswMaterialOutbound outbound) { |
| | | if (StringUtils.isBlank(outbound.getMaterialNumber()) |
| | | || StringUtils.isBlank(outbound.getFactoryId()) |
| | | || StringUtils.isBlank(outbound.getWarehouseId()) |
| | | || outbound.getQuantity() == null |
| | | || outbound.getQuantity().intValue() > 0 |
| | | || StringUtils.isBlank(outbound.getBatchNumber()) |
| | | || StringUtils.isBlank(outbound.getInventoryId())) { |
| | | return false; |
| | | } |
| | | LswMaterialInventory inventory = materialInventoryService.getById(outbound.getInventoryId()); |
| | | if(inventory == null) { |
| | | return false; |
| | | } |
| | | //æ´æ°åºåç¶æ |
| | | inventory.setInventoryStatus(MaterialInventoryStatusEnum.OUTBOUND.name()); |
| | | materialInventoryService.updateById(inventory); |
| | | //ä¿ååºåºä¿¡æ¯ |
| | | outbound.setDelFlag(CommonConstant.DEL_FLAG_0); |
| | | outbound.setOutboundTime(new Date()); |
| | | super.save(outbound); |
| | | return true; |
| | | } |
| | | } |
| | |
| | | @Excel(name = "ç§»åºåå·", width = 15) |
| | | @ApiModelProperty(value = "ç§»åºåå·") |
| | | private String workOrderCode; |
| | | /**ç§»åºç±»å*/ |
| | | @Excel(name = "ç§»åºç±»å", width = 15, dicCode = "order_category") |
| | | @Dict(dicCode = "order_category") |
| | | @ApiModelProperty(value = "ç§»åºç±»å") |
| | | private String orderCategory; |
| | | /**åºåID*/ |
| | | @Excel(name = "åºåID", width = 15) |
| | | @ApiModelProperty(value = "åºåID") |
| | | private String inventoryId; |
| | | /**ååºåå°*/ |
| | | @Excel(name = "ååºåå°", width = 15) |
| | | @ApiModelProperty(value = "ååºåå°") |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.mes.enums; |
| | | |
| | | public enum TransferOrderStatusEnum { |
| | | NEW, //æ°å»º |
| | | PRINTED, //å·²æå°ã已请æ±WMS |
| | | COMPLETED, //已宿 |
| | | CANCELED, //å·²æ¤é |
| | | ; |
| | | } |
| | |
| | | */ |
| | | public interface IMesTransferOrderPrintService extends IService<MesTransferOrderPrint> { |
| | | List<MesTransferOrderPrint> queryOrderPrintByOrderId(String orderId); |
| | | |
| | | /** |
| | | * æ ¹æ®ç§»åºåå·æ¥è¯¢ç§»åºè®°å½ |
| | | * @param orderCode |
| | | * @return |
| | | */ |
| | | MesTransferOrderPrint queryByOrderCode(String orderCode); |
| | | } |
| | |
| | | package org.jeecg.modules.mes.service.impl; |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.modules.mes.entity.MesTransferOrderPrint; |
| | | import org.jeecg.modules.mes.mapper.MesTransferOrderPrintMapper; |
| | | import org.jeecg.modules.mes.service.IMesTransferOrderPrintService; |
| | |
| | | public List<MesTransferOrderPrint> queryOrderPrintByOrderId(String orderId) { |
| | | return baseMapper.queryOrderPrintByOrderId(orderId); |
| | | } |
| | | |
| | | @Override |
| | | public MesTransferOrderPrint queryByOrderCode(String orderCode) { |
| | | LambdaQueryWrapper<MesTransferOrderPrint> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(MesTransferOrderPrint::getWorkOrderCode, orderCode); |
| | | wrapper.eq(MesTransferOrderPrint::getDelFlag, CommonConstant.DEFAULT_0); |
| | | List<MesTransferOrderPrint> list = super.list(wrapper); |
| | | if(CollectionUtil.isNotEmpty(list)) { |
| | | return list.get(0); |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | |
| | | /** é¢çå· */ |
| | | @XmlElement(name = "ReservationOrder") |
| | | private String reservationOrder; |
| | | /** 坹齿¹å¼ */ |
| | | /** MESç§»åºåå· */ |
| | | @XmlElement(name = "Align") |
| | | private String align; |
| | | /** æå· */ |
| | |
| | | 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.LswMaterial; |
| | | import org.jeecg.modules.lsw.entity.LswMaterialInbound; |
| | | import org.jeecg.modules.lsw.entity.LswMaterialInventory; |
| | | import org.jeecg.modules.lsw.entity.LswMaterialOutbound; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInboundService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInventoryService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialOutboundService; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialService; |
| | | import org.jeecg.modules.mes.entity.MesMaterialTransferRequest; |
| | | import org.jeecg.modules.mes.entity.MesTransferOrderPrint; |
| | | import org.jeecg.modules.mes.enums.MaterialTransferRequestStatus; |
| | | import org.jeecg.modules.mes.enums.TransferOrderStatusEnum; |
| | | import org.jeecg.modules.mes.service.IMesMaterialTransferRequestService; |
| | | import org.jeecg.modules.mes.service.IMesTransferOrderPrintService; |
| | | import org.jeecg.modules.wms.dto.WSResponse; |
| | | import org.jeecg.modules.wms.request.ReceiveWMSScanItemList; |
| | | import org.jeecg.modules.wms.request.WMSWebServiceSendItem; |
| | |
| | | private ILineSideWarehouseService lineSideWarehouseService; |
| | | @Autowired |
| | | private ILswMaterialInboundService materialInboundService; |
| | | @Autowired |
| | | private IMesTransferOrderPrintService transferOrderPrintService; |
| | | @Autowired |
| | | private ILswMaterialOutboundService materialOutboundService; |
| | | @Autowired |
| | | private ILswMaterialInventoryService materialInventoryService; |
| | | @Autowired |
| | | private ILswMaterialService materialService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | response.setErrorDesc("ä¼ å
¥çåæ°ä¸ºç©ºï¼"); |
| | | return response; |
| | | } |
| | | String errorCode = "N"; |
| | | int errorCount = 0; |
| | | int successCount = 0; |
| | | StringBuilder errorMsg = new StringBuilder(); |
| | |
| | | MesMaterialTransferRequest transferRequest = materialTransferRequestService.queryByReservationCode(item.getReservationOrder()); |
| | | if (transferRequest == null) { |
| | | errorCount++; |
| | | errorMsg.append("æ ¹æ®é¢çå·[").append(item.getReservationOrder()).append("]æªæ¾å°ç©ææå¨åï¼"); |
| | | errorMsg.append("æ ¹æ®é¢çå·[").append(item.getReservationOrder()).append("]æªæ¾å°ç©ææå¨åï¼\n"); |
| | | continue; |
| | | } |
| | | LineSideWarehouse warehouse = lineSideWarehouseService.getById(transferRequest.getTargetWarehouseId()); |
| | | if(warehouse == null || !warehouse.getWarehouseCode().equals(item.getDestSection())) { |
| | | if (warehouse == null || !warehouse.getWarehouseCode().equals(item.getDestSection())) { |
| | | errorCount++; |
| | | errorMsg.append("线边åº[").append(item.getDestSection()).append("]æªæ¾å°ï¼"); |
| | | errorMsg.append("线边åº[").append(item.getDestSection()).append("]æªæ¾å°ï¼\n"); |
| | | continue; |
| | | } |
| | | if(!transferRequest.getMaterialNumber().equals(item.getSkuCode())) { |
| | | if (!transferRequest.getMaterialNumber().equals(item.getSkuCode())) { |
| | | errorCount++; |
| | | errorMsg.append("ç©æç¼å·[").append(item.getSkuCode()).append("]ä¸å¹é
ï¼"); |
| | | errorMsg.append("ç©æç¼å·[").append(item.getSkuCode()).append("]ä¸å¹é
ï¼\n"); |
| | | continue; |
| | | } |
| | | if(StringUtils.isBlank(item.getTrackLot())) { |
| | | if (StringUtils.isBlank(item.getTrackLot())) { |
| | | errorCount++; |
| | | errorMsg.append("æ¹æ¬¡å·[").append(item.getTrackLot()).append("]ä¸è½ä¸ºç©ºï¼"); |
| | | errorMsg.append("æ¹æ¬¡å·[").append(item.getTrackLot()).append("]ä¸è½ä¸ºç©ºï¼\n"); |
| | | continue; |
| | | } |
| | | transferRequest.setRequestStatus(MaterialTransferRequestStatus.CHECKED_IN.name()); |
| | |
| | | inbound.setQuantity(item.getQuantity()); |
| | | inbound.setFactoryId(warehouse.getFactoryId()); |
| | | boolean b = materialInboundService.inboundMaterial(inbound); |
| | | if(!b) { |
| | | if (!b) { |
| | | errorCount++; |
| | | errorMsg.append("é¢çå·[").append(item.getReservationOrder()).append("]å
¥åºå¤±è´¥ï¼"); |
| | | errorMsg.append("é¢çå·[").append(item.getReservationOrder()).append("]å
¥åºå¤±è´¥ï¼\n"); |
| | | continue; |
| | | } |
| | | //æ´æ°ç©ææå¨å |
| | | materialTransferRequestService.updateById(transferRequest); |
| | | successCount++; |
| | | } else if (StringUtils.isNotBlank(item.getAlign())) { |
| | | //ç§»åºååè° |
| | | MesTransferOrderPrint transferOrder = transferOrderPrintService.queryByOrderCode(item.getAlign()); |
| | | if (transferOrder == null) { |
| | | errorCount++; |
| | | errorMsg.append("ç§»åºå[").append(item.getAlign()).append("]ä¸åå¨ï¼\n"); |
| | | continue; |
| | | } |
| | | LswMaterialInventory inventory = materialInventoryService.getById(item.getMesStockID()); |
| | | if (inventory == null) { |
| | | errorCount++; |
| | | errorMsg.append("åºåä¿¡æ¯[").append(item.getMesStockID()).append("]ä¸åå¨ï¼\n"); |
| | | continue; |
| | | } |
| | | LswMaterial material = materialService.queryByMaterialNumber(item.getSkuCode()); |
| | | if(material == null) { |
| | | errorCount++; |
| | | errorMsg.append("ç©æç¼å·[").append(item.getSkuCode()).append("]ä¸åå¨ï¼\n"); |
| | | continue; |
| | | } |
| | | LineSideWarehouse warehouse = lineSideWarehouseService.getById(transferOrder.getOriginalWarehouseId()); |
| | | if (warehouse == null || !warehouse.getWarehouseCode().equals(item.getDestSection())) { |
| | | errorCount++; |
| | | errorMsg.append("线边åº[").append(item.getDestSection()).append("]æªæ¾å°ï¼\n"); |
| | | continue; |
| | | } |
| | | //ç§»åºåæ´æ¹ |
| | | transferOrder.setOrderStatus(TransferOrderStatusEnum.COMPLETED.name()); |
| | | //æååºåº |
| | | LswMaterialOutbound outbound = new LswMaterialOutbound(); |
| | | outbound.setBatchNumber(inventory.getBatchNumber()); |
| | | outbound.setQuantity(item.getQuantity()); |
| | | outbound.setMaterialNumber(material.getMaterialNumber()); |
| | | outbound.setMaterialName(material.getMaterialName()); |
| | | outbound.setInventoryId(inventory.getId()); |
| | | outbound.setWarehouseId(transferOrder.getOriginalWarehouseId()); |
| | | outbound.setFactoryId(warehouse.getFactoryId()); |
| | | outbound.setOutboundStaff("WMS"); |
| | | boolean b = materialOutboundService.outboundMaterial(outbound); |
| | | if (!b) { |
| | | errorCount++; |
| | | errorMsg.append("ç§»åºå[").append(item.getAlign()).append("]åºåºå¤±è´¥ï¼\n"); |
| | | continue; |
| | | } |
| | | transferOrderPrintService.updateById(transferOrder); |
| | | successCount++; |
| | | } |
| | | } |
| | | //å¤çè¿åç»æ |
| | | if (errorCount > 0) { |
| | | response.setErrorCode("N"); |
| | | if (successCount > 0) { |
| | | String msg = "æåæ§è¡" + successCount + "æ¡ï¼å¤±è´¥" + errorCount + "æ¡ï¼\n"; |
| | | errorMsg.insert(0, msg); |
| | | } else { |
| | | String msg = "失败" + errorCount + "æ¡ï¼\n"; |
| | | errorMsg.insert(0, msg); |
| | | } |
| | | response.setErrorDesc(errorMsg.toString()); |
| | | } else { |
| | | response.setErrorCode("Y"); |
| | | String msg = "æåæ§è¡" + successCount + "æ¡ï¼\n"; |
| | | response.setErrorDesc(msg); |
| | | } |
| | | return response; |
| | | } |
| | | } |
| | |
| | | xhj: |
| | | factoryCode: 2301 |
| | | orderType: Z001 |
| | | productionManager: 010 |
| | | productionManager: 012 |
| | | orderStatus: REL |