diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java index 9d73bbaf..ae4a8dae 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java @@ -25,6 +25,12 @@ public interface ErrorCodeConstants { ErrorCode ITEMBASIC_VALIDITY_DAYS_NOT_EXISTS = new ErrorCode(1_000_020_013, "有效天数不存在"); ErrorCode ITEMBASIC_AVAIABLE_NOT_EXISTS = new ErrorCode(1_000_020_014, "是否可用不存在"); ErrorCode ITEMBASIC_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_020_015, "导入物品基础信息不能为空"); + ErrorCode ITEMBASIC_TYPE_AND_BUSINESSTYPE_NOT_EQUALS = new ErrorCode(1_000_020_016, "物料类型与业务类型的物料类型不一致"); + ErrorCode ITEMBASIC_STATUS_AND_BUSINESSSTATUS_NOT_EQUALS = new ErrorCode(1_000_020_017, "物料状态与业务类型的物料状态不一致"); + ErrorCode FROM_LOCATION_TYPE_AND_BUSINESSTYPE_INLOCATION_TYPE_NOT_EQUALS = new ErrorCode(1_000_020_018, "从库位类型与业务类型的从库位类型不一致"); + ErrorCode TO_LOCATION_TYPE_AND_BUSINESSTYPE_OUTLOCATION_TYPE_NOT_EQUALS = new ErrorCode(1_000_020_019, "到库位类型与业务类型的到库位类型不一致"); + ErrorCode INVENTORY_STATUS_AND_BUSINESS_IN_INVENTORY_STATUS_NOT_EQUALS_OR_NULL = new ErrorCode(1_000_020_020, "入库库存状态与业务类型的入库库存状态不一致或者为空"); + ErrorCode INVENTORY_STATUS_AND_BUSINESS_OUT_INVENTORY_STATUS_NOT_EQUALS_OR_NULL = new ErrorCode(1_000_020_020, "出库库存状态与业务类型的出库库存状态不一致或者为空"); //物品包装信息ErrorCode ErrorCode ITEMPACKAGING_NOT_EXISTS = new ErrorCode(1_000_021_000, "物品包装信息 不存在"); ErrorCode ITEMPACKAGING_ITEM_CODE_NOT_EXISTS = new ErrorCode(1_000_021_001, "code不存在"); @@ -167,7 +173,8 @@ public interface ErrorCodeConstants { ErrorCode LOCATION_USER_GROUP_CODE_NOT_EXISTS = new ErrorCode(1_000_037_009, "用户组代码不存在"); ErrorCode LOCATION_AVAILABLE_NOT_EXISTS = new ErrorCode(1_000_037_010, "是否可用不存在"); ErrorCode LOCATION_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_037_011, "导入库位不能为空"); - ErrorCode LOCATION_ITEMCODE_AND_LOCATIONCODE_NOT_EXISTS = new ErrorCode(1_000_037_011, "未查找到零件item_code库位location_code对应的上架策略"); + ErrorCode LOCATION_ITEMCODE_AND_LOCATIONCODE_NOT_EXISTS = new ErrorCode(1_000_037_012, "未查找到零件item_code库位location_code对应的上架策略"); + ErrorCode LOCATION_HANDLE_TOLOCATIONCODE_AND_RECOMMEND_TOLOCATIONCODECODE_INCONFORMITY = new ErrorCode(1_000_037_013, "实际库位与任务推荐的目标库位不一致"); //车间ErrorCode ErrorCode WORKSHOP_NOT_EXISTS = new ErrorCode(1_038_000_000, "车间不存在"); ErrorCode WORKSHOP_CODE_EXISTS = new ErrorCode(1_039_000_001, "code已存在"); @@ -561,6 +568,7 @@ public interface ErrorCodeConstants { ErrorCode PRODUCTION_MAIN_MASSAGE_EXISTS = new ErrorCode(1_001_101_002, "生产计明细:订单号pline_number、零件号pitem_code无效"); ErrorCode PRODUCTION_MAIN_NUMBER_CLOSE_EXISTS = new ErrorCode(1_001_101_003, "生产计划number已经关闭"); ErrorCode PRODUCTION_MAIN_NUMBER_NOT_EXISTS = new ErrorCode(1_001_101_004, "生产计划number无效"); + ErrorCode PRODUCTION_DETAIL_VOID_STATUS_ERROR = new ErrorCode(1_001_101_005, "生产计划明细无效,状态错误"); //制品收货申请主ErrorCode ErrorCode PRODUCTRECEIPT_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_102_000, "制品收货申请主不存在"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java index 84242078..6f116e12 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/accountcalendar/AccountcalendarController.java @@ -1,6 +1,5 @@ package com.win.module.wms.controller.accountcalendar; -import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.PageResult; import com.win.framework.dict.core.util.DictFrameworkUtils; @@ -9,10 +8,7 @@ import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.wms.controller.accountcalendar.vo.*; -import com.win.module.system.api.user.dto.AdminUserRespDTO; -import com.win.module.wms.controller.itembasic.vo.ItembasicExcelVO; import com.win.module.wms.convert.accountcalendar.AccountcalendarConvert; -import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.dal.dataobject.accountcalendar.AccountcalendarDO; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.accountcalendar.AccountcalendarService; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/CarrierController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/CarrierController.java index 1b337efc..bc2abdcb 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/CarrierController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/CarrierController.java @@ -119,11 +119,11 @@ public class CarrierController { List list = Arrays.asList(); Map mapDropDown = new HashMap<>(); String[] currency = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.CURRENCY); - mapDropDown.put(10, currency); + mapDropDown.put(11, currency); String[] type = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.CARRIER_TYPE); - mapDropDown.put(12, type); + mapDropDown.put(13, type); String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); - mapDropDown.put(13, available); + mapDropDown.put(14, available); // 输出 ExcelUtils.write(response, "承运商导入模板.xls", "承运商列表", CarrierImportExcelVo.class, list,mapDropDown); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/vo/CarrierImportExcelVo.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/vo/CarrierImportExcelVo.java index acbaec3b..89b7fc0c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/vo/CarrierImportExcelVo.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/carrier/vo/CarrierImportExcelVo.java @@ -25,6 +25,9 @@ public class CarrierImportExcelVo { @ExcelProperty("代码") private String code; + @ExcelProperty("名称") + private String name; + @ExcelProperty("简称") private String shortName; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java index 4aa6e16e..94b74076 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/LocationController.java @@ -1,6 +1,7 @@ package com.win.module.wms.controller.location; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.win.framework.common.exception.ErrorCode; import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.PageResult; import com.win.framework.dict.core.util.DictFrameworkUtils; @@ -9,11 +10,17 @@ import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.wms.controller.location.vo.*; +import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.convert.location.LocationConvert; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; +import com.win.module.wms.dal.dataobject.expectout.ExpectoutDO; import com.win.module.wms.dal.dataobject.location.LocationDO; +import com.win.module.wms.dal.mysql.balance.BalanceMapper; +import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper; import com.win.module.wms.dal.mysql.location.LocationMapper; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.rule.RuleService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; @@ -27,6 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.*; @@ -49,6 +57,14 @@ public class LocationController { @Resource private AdminUserApi userApi; + @Resource + private BalanceMapper balanceMapper; + + @Resource + private ExpectoutMapper expectoutMapper ; + @Resource + private RuleService ruleService; + @PostMapping("/create") @Operation(summary = "创建库位") @PreAuthorize("@ss.hasPermission('wms:location:create')") @@ -120,6 +136,12 @@ public class LocationController { // 手动创建导出 demo List list = Arrays.asList(); Map mapDropDown = new HashMap<>(); + String[] warehouseCode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.WAREHOUSE_TYPE); + mapDropDown.put(3, warehouseCode); + String[] areaCode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.AREA_TYPE); + mapDropDown.put(4, areaCode); + String[] erpLocationCode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.ERP_LOCATION); + mapDropDown.put(6, erpLocationCode); String[] type = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.LOCATION_TYPE); mapDropDown.put(7, type); String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); @@ -160,10 +182,7 @@ public class LocationController { } } - //库位号有效,状态正确 - @GetMapping("/iii") - public LocationDO selectLocationExist(String locationCode) { - LocationDO locationDO = selectLocation(locationCode); - return locationDO; - } + + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationImportExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationImportExcelVO.java index 6ff8a014..e1c2a19e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationImportExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/location/vo/LocationImportExcelVO.java @@ -29,16 +29,19 @@ public class LocationImportExcelVO { @ExcelProperty("描述") private String description; - @ExcelProperty("仓库代码") + @ExcelProperty(value = "仓库代码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.WAREHOUSE_TYPE) private String warehouseCode; - @ExcelProperty("区域代码") + @ExcelProperty(value = "区域代码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.AREA_TYPE) private String areaCode; @ExcelProperty("库位组代码") private String locationGroupCode; - @ExcelProperty("ERP库位代码") + @ExcelProperty(value = "ERP库位代码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.ERP_LOCATION) private String erpLocationCode; @ExcelProperty(value = "类型", converter = DictConvert.class) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/LocationgroupController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/LocationgroupController.java index 8e16c8f7..4d132374 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/LocationgroupController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/LocationgroupController.java @@ -115,6 +115,10 @@ public class LocationgroupController { // 手动创建导出 demo List list = Arrays.asList(); Map mapDropDown = new HashMap<>(); + String[] warehouseCode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.WAREHOUSE_TYPE); + mapDropDown.put(3, warehouseCode); + String[] areaCode = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.AREA_TYPE); + mapDropDown.put(4, areaCode); String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.PACK_UNIT); mapDropDown.put(5, available);; // 输出 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/vo/LocationGroupImportExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/vo/LocationGroupImportExcelVO.java index 5cb88729..e76624e7 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/vo/LocationGroupImportExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/locationgroup/vo/LocationGroupImportExcelVO.java @@ -29,10 +29,12 @@ public class LocationGroupImportExcelVO { @ExcelProperty("描述") private String description; - @ExcelProperty("仓库代码") + @ExcelProperty(value = "仓库代码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.WAREHOUSE_TYPE) private String warehouseCode; - @ExcelProperty("区域代码") + @ExcelProperty(value = "区域代码", converter = DictConvert.class) + @DictFormat(DictTypeConstants.AREA_TYPE) private String areaCode; @ExcelProperty(value = "是否可用", converter = DictConvert.class) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java index ec9fff85..c628c61e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java @@ -93,7 +93,12 @@ public interface ItembasicService { * @return 导入结果 */ List importItembasicList(List importItembasics, Integer mode,boolean updatePart); - + /** + * 获得物品基本信息 + * + * @param code 物品代码 + * @return 物品基本信息 + */ public ItembasicDO selectItembasic(String code); /** * 校验物料有效,状态正确 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java index a2d8cb25..d6a7bf84 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java @@ -3,9 +3,11 @@ package com.win.module.wms.service.location; import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.location.vo.*; import com.win.module.wms.controller.rule.vo.RuleRespVO; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; import com.win.module.wms.dal.dataobject.location.LocationDO; import javax.validation.Valid; +import java.math.BigDecimal; import java.util.Collection; import java.util.List; @@ -97,5 +99,8 @@ public interface LocationService { * @param pitemCode 物品代码 * @return 上架策略信息 */ + public RuleRespVO selectLocationAndModRelation(String pitemCode); + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java index 9be11678..491f0564 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java @@ -4,21 +4,28 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.annotations.VisibleForTesting; +import com.win.framework.common.exception.ErrorCode; import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.PageResult; import com.win.framework.datapermission.core.util.DataPermissionUtils; import com.win.module.wms.controller.location.vo.*; import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.convert.location.LocationConvert; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.location.LocationDO; +import com.win.module.wms.dal.dataobject.expectout.ExpectoutDO; +import com.win.module.wms.dal.mysql.balance.BalanceMapper; +import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper; import com.win.module.wms.dal.mysql.location.LocationMapper; import com.win.module.wms.service.rule.RuleService; import org.springframework.stereotype.Service; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -37,9 +44,16 @@ public class LocationServiceImpl implements LocationService { @Resource private LocationMapper locationMapper; + + @Resource + private BalanceMapper balanceMapper; + + @Resource + private ExpectoutMapper expectoutMapper ; @Resource private RuleService ruleService; + @Override public Long createLocation(LocationCreateReqVO createReqVO) { validateLocationForCreateOrUpdate(createReqVO.getId(),createReqVO.getCode(),createReqVO.getAreaCode(),createReqVO.getWarehouseCode() @@ -247,4 +261,6 @@ public class LocationServiceImpl implements LocationService { throw exception(LOCATION_ITEMCODE_AND_LOCATIONCODE_NOT_EXISTS); } } + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java index 9da997ad..4fec9ce4 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/production/ProductionMainServiceImpl.java @@ -96,7 +96,7 @@ public class ProductionMainServiceImpl implements ProductionMainService { public List getProductionMainList(ProductionMainExportReqVO exportReqVO) { return productionMainMapper.selectList(exportReqVO); } - //公共方法 校验生产计划 + //公共方法 校验生产计划 Plan---VPod @Override public ProductionDetailDO planProductionDetailDoExist(String pnumber, String pitemCode) { QueryWrapper queryWrapper = new QueryWrapper(); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainServiceImpl.java index 18a3eeee..cab65d6a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreceiptJob/ProductionreceiptJobMainServiceImpl.java @@ -6,6 +6,8 @@ import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJo import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainPageReqVO; import com.win.module.wms.controller.productionreceiptJob.vo.ProductionreceiptJobMainUpdateReqVO; import com.win.module.wms.dal.dataobject.customerreturnJob.CustomerreturnJobMainDO; +import com.win.module.wms.dal.dataobject.production.ProductionDetailDO; +import com.win.module.wms.service.production.ProductionMainService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -33,6 +35,9 @@ public class ProductionreceiptJobMainServiceImpl implements ProductionreceiptJob @Resource private ProductionreceiptJobMainMapper productionreceiptJobMainMapper; + @Resource + private ProductionMainService productionMainService; + @Override public Long createProductionreceiptJobMain(ProductionreceiptJobMainCreateReqVO createReqVO) { // 插入 @@ -97,4 +102,13 @@ public class ProductionreceiptJobMainServiceImpl implements ProductionreceiptJob throw exception(CUSTOMERRETURN_JOB_MAIN_STATUS_ERROR); } } + + public ProductionDetailDO productionreceiptJobMainDoStatusRi13ght(String pnumber, String pitemCode) { + ProductionDetailDO productionDetailDO = productionMainService.planProductionDetailDoExist(pnumber, pitemCode); + if(productionDetailDO != null){ + return productionDetailDO; + }else { + throw exception(PRODUCTION_DETAIL_VOID_STATUS_ERROR); + } + } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/until/job/JobUtils.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/until/job/JobUtils.java index a94e6577..5daf4dd7 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/until/job/JobUtils.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/until/job/JobUtils.java @@ -3,18 +3,52 @@ package com.win.module.wms.until.job; import cn.hutool.core.exceptions.UtilException; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.win.framework.common.exception.ErrorCode; +import com.win.module.wms.controller.rule.vo.RuleRespVO; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; +import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; +import com.win.module.wms.dal.dataobject.expectout.ExpectoutDO; +import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; +import com.win.module.wms.dal.dataobject.location.LocationDO; +import com.win.module.wms.dal.mysql.balance.BalanceMapper; +import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper; +import com.win.module.wms.dal.mysql.location.LocationMapper; +import com.win.module.wms.service.itembasic.ItembasicService; +import com.win.module.wms.service.location.LocationService; +import com.win.module.wms.service.rule.RuleService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.wms.enums.ErrorCodeConstants.*; @Slf4j @Component public class JobUtils { + + @Resource + private ItembasicService itembasicService; + + @Resource + private LocationService locationService; + + @Resource + private LocationMapper locationMapper; + + @Resource + private BalanceMapper balanceMapper; + + @Resource + private ExpectoutMapper expectoutMapper ; + @Resource + private RuleService ruleService; /** * 解析JSON串,返回两个对象的集合 * @@ -87,5 +121,468 @@ public class JobUtils { } return result; } + //到库位与任务库位是否一致(可配置) + public boolean jobToLocationCodeAndRecordToLocationCodeAccord(String jobToLocationCode, String recordToLocationCode, String allowModifyLocation){ + if(jobToLocationCode != null || !"".equals(jobToLocationCode)){ + if(!jobToLocationCode.equals(recordToLocationCode)){ + if("TRUE".equals(allowModifyLocation)){ + return true; + }else { + throw exception(LOCATION_HANDLE_TOLOCATIONCODE_AND_RECOMMEND_TOLOCATIONCODECODE_INCONFORMITY); + } + }else { + return true; + } + }else { + return true; + } + } + //DBT---DBT2---IT 物料类型检验是否一致 + public boolean ifInType(String pitemCode, BusinesstypeDO businesstypeDO){ + ItembasicDO itembasicDO = itembasicService.selectItembasic(pitemCode); + boolean ifInType = false; + if(itembasicDO != null){ + String[] itemType = businesstypeDO.getItemTypes().split(","); + for (int i = 0; i < itemType.length; i++) { + if(itembasicDO.getType().equals(itemType[i])){ + ifInType = true; + } + } + } + if(ifInType == true){ + return true; + }else{ + throw exception(ITEMBASIC_TYPE_AND_BUSINESSTYPE_NOT_EQUALS); + } + } + //DBT---DBT2---IS 物料状态检验是否一致 + public boolean ifInStatus(String pitemCode, BusinesstypeDO businesstypeDO){ + ItembasicDO itembasicDO = itembasicService.selectItembasic(pitemCode); + boolean ifInStatus = false; + if(itembasicDO != null){ + String[] itemStatus = businesstypeDO.getItemStatuses().split(","); + for (int i = 0; i < itemStatus.length; i++) { + if(itembasicDO.getStatus().equals(itemStatus[i])){ + ifInStatus = true; + } + } + } + if(ifInStatus == true){ + return true; + }else { + throw exception(ITEMBASIC_STATUS_AND_BUSINESSSTATUS_NOT_EQUALS); + } + } + //DBT---DBT2---LI 校验入库库位类型是否一致 + public boolean ifInFromLocationType(String plocationCode, BusinesstypeDO businesstypeDO){ + LocationDO locationDO = locationService.selectLocationExist(plocationCode); + boolean ifInLocationType = false; + if(locationDO != null){ + String[] itemInLocationTypes = businesstypeDO.getInLocationTypes().split(","); + for (int i = 0; i < itemInLocationTypes.length; i++) { + if(locationDO.getType().equals(itemInLocationTypes[i])){ + ifInLocationType = true; + } + } + } + if(ifInLocationType == true){ + return true; + }else { + throw exception(FROM_LOCATION_TYPE_AND_BUSINESSTYPE_INLOCATION_TYPE_NOT_EQUALS); + } + } + //DBT---DBT2---LO 校验出库库位类型是否一致 + public boolean ifInToLocationType(String plocationCode, BusinesstypeDO businesstypeDO){ + LocationDO locationDO = locationService.selectLocationExist(plocationCode); + boolean ifOutLocationType = false; + if(locationDO != null){ + String[] itemOutLocationTypes = businesstypeDO.getOutLocationTypes().split(","); + for (int i = 0; i < itemOutLocationTypes.length; i++) { + if(locationDO.getType().equals(itemOutLocationTypes[i])){ + ifOutLocationType = true; + } + } + } + if(ifOutLocationType ==true){ + return true; + }else { + throw exception(TO_LOCATION_TYPE_AND_BUSINESSTYPE_OUTLOCATION_TYPE_NOT_EQUALS); + } + } + + //DBT---DBT2---ISI 校验入库状态是否一致 + public boolean ifInInventoryStatuses(String pinventoryStatus, BusinesstypeDO businesstypeDO){ + boolean ifInInventoryStatuses = false; + if(pinventoryStatus != null){ + String[] inventoryStatuses = businesstypeDO.getInInventoryStatuses().split(","); + for (int i = 0; i < inventoryStatuses.length; i++) { + if(pinventoryStatus.equals(inventoryStatuses[i])){ + ifInInventoryStatuses = true; + } + } + }if(ifInInventoryStatuses == true){ + return true; + }else { + throw exception(INVENTORY_STATUS_AND_BUSINESS_IN_INVENTORY_STATUS_NOT_EQUALS_OR_NULL); + } + } + //DBT---DBT2---ISO 校验出库状态是否一致 + public boolean ifOutInventoryStatuses(String pinventoryStatus, BusinesstypeDO businesstypeDO){ + boolean ifOutInventoryStatuses = false; + if(pinventoryStatus != null){ + String[] inventoryStatuses = businesstypeDO.getOutInventoryStatuses().split(","); + for (int i = 0; i < inventoryStatuses.length; i++) { + if(pinventoryStatus.equals(inventoryStatuses[i])){ + ifOutInventoryStatuses = true; + } + } + }if(ifOutInventoryStatuses == true){ + return true; + }else { + throw exception(INVENTORY_STATUS_AND_BUSINESS_OUT_INVENTORY_STATUS_NOT_EQUALS_OR_NULL); + } + } + //调用公共方法查询库位信息 + public LocationDO selectLocation(String pcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("code",pcode); + LocationDO locationDO = locationMapper.selectOne(queryWrapper); + if(locationDO != null && "TRUE".equals(locationDO.getAvailable())){ + return locationDO; + }else { + throw exception(LOCATION_NOT_EXISTS); + } + } + public LocationDO selectLocationExist(String locationCode) { + LocationDO locationDO = selectLocation(locationCode); + return locationDO; + } + public RuleRespVO selectLocationStrategyRule(String warehouseCode, String areaCode, String locationGroupCode, String plocationCode) { + RuleRespVO ruleRespVO = ruleService.warehouseStorage(warehouseCode,areaCode,locationGroupCode,plocationCode); + return ruleRespVO; + } + public RuleRespVO selectLocationAndModRelation(String pitemCode) { + RuleRespVO grounding = ruleService.grounding(null, null, null, null, null, null, pitemCode, null, null, null, null, null, null); + if(grounding != null){ + return grounding; + }else { + throw exception(LOCATION_ITEMCODE_AND_LOCATIONCODE_NOT_EXISTS); + } + } + + + + //跟据管理模式查詢數量 +//按數量查找 TB2-BY_QUANTITY + public List selectnumber(String itemcode, String inventorystatus, String locationcode){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("item_code",itemcode); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + List balanceDO = balanceMapper.selectList(queryWrapper); + if(!balanceDO.isEmpty()){ + + return balanceDO; + } + else{ + throw exception(new ErrorCode(123,"物料号" + itemcode + "庫存狀態" + inventorystatus + "在"+ locationcode +"庫位中未查找到库存记录" )); + } + + } +//按批次查找 TB2-BY_BATCH + + public List selectbatch(String itemcode, String batch ,String inventorystatus,String locationcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("item_code",itemcode); + queryWrapper.eq("batch",batch); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + + List balanceDO = balanceMapper.selectList(queryWrapper); + if(!balanceDO.isEmpty()){ + + return balanceDO; + } + else{ + throw exception(new ErrorCode(124,"物料号" + itemcode +"批次"+ batch + "庫存狀態" + inventorystatus + "在"+ locationcode +"庫位中未查找到库存记录" )); + } + + + } + + //按包裝查找 TB2-BY_PACKGING + public List selectpackaging(String itemcode, String packingnumber, String batch ,String inventorystatus,String locationcode) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("item_code",itemcode); + queryWrapper.eq("packing_number",packingnumber); + queryWrapper.eq("batch",batch); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + + List balanceDO = balanceMapper.selectList(queryWrapper); + if(!balanceDO.isEmpty()){ + + return balanceDO; + } + else{ + throw exception(new ErrorCode(128,"物料号" + itemcode + "箱码" +packingnumber + "批次"+ batch + "庫存狀態" + inventorystatus + "在"+ locationcode +"庫位中未查找到库存记录" )); + } + + + } + //按唯一码查找 TB2-BY_UNIQUE_ID + public List selectuniqueid(String packingnumber,String locationcode , String inventorystatus){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("packing_number",packingnumber); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + List balanceDO = balanceMapper.selectList(queryWrapper); + if(!balanceDO.isEmpty()){ + + return balanceDO; + } + else{ + throw exception(new ErrorCode(129,"唯一码" + packingnumber + "庫存狀態" + inventorystatus + "在"+ locationcode +"庫位中未查找到库存记录" )); + } + + } + + + + + + + + // TB1 查询库存 + public List selectlocation (String itemcode, String packingnumber, String batch, String locationcode, String status ){ + RuleRespVO managementtRule = ruleService.management( null, null,null,null,null, null,itemcode,null,null, + null, locationcode,null,null); + List balanceDO = null; + if( "{\"ManagementPrecision\":\"BY_QUANTITY\"}".equals( managementtRule.getConfiguration())){ + balanceDO = selectnumber(itemcode, status, locationcode ); + + } + else if("{\"ManagementPrecision\":\"BY_BATCH\"}".equals(managementtRule.getConfiguration())){ + balanceDO = selectbatch(itemcode,batch,status,locationcode); + + } + + else if("{\"ManagementPrecision\":\"BY_PACKAGING\"}".equals(managementtRule.getConfiguration())) { + balanceDO = selectpackaging(itemcode,packingnumber, batch, status, locationcode); + } + + else if("{\"ManagementPrecision\":\"BY_UNIQUE_ID\"}".equals(managementtRule.getConfiguration())) { + balanceDO = selectuniqueid(packingnumber, locationcode,status); + } + + return balanceDO; + + } + + //按數量查找 BY_BATCH + public List selectnumbernew(String itemcode, String inventorystatus, String locationcode ){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("item_code",itemcode); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + List expectoutDO = expectoutMapper.selectList(queryWrapper); + + + if(!expectoutDO.isEmpty()){ + + return expectoutDO; + } + else{ + return null; + } + + + } + //按批次查詢 BY_BATCH + public List selectbatchnew(String itemcode,String batch ,String inventorystatus,String locationcode ){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("item_code",itemcode); + queryWrapper.eq("batch",batch); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + List expectoutDO = expectoutMapper.selectList(queryWrapper); + + + if(!expectoutDO.isEmpty()){ + + return expectoutDO; + } + else{ + return null; + } + + } + //按包裝 BY_PACKAGING + public List selectpackingnew(String itemcode, String packingnumber ,String batch ,String inventorystatus,String locationcode ){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("item_code",itemcode); + queryWrapper.eq("batch",batch); + queryWrapper.eq("packing_number",packingnumber); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + List expectoutDO = expectoutMapper.selectList(queryWrapper); + + + if(!expectoutDO.isEmpty()){ + + return expectoutDO; + } + else{ + return null; + } + + } + //按唯一码查詢 BY_UNIQUE_ID + public List selectuniqeidnew( String packingnumber ,String locationcode ,String inventorystatus ){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("packing_number",packingnumber); + queryWrapper.eq("inventory_status",inventorystatus); + queryWrapper.eq("location_code",locationcode); + List expectoutDO = expectoutMapper.selectList(queryWrapper); + + + if(!expectoutDO.isEmpty()){ + + return expectoutDO; + } + else{ + return null; + } + + } + //跟据管理模式查询预计库存 TEO1 + public List selectlocationnew (String itemcode, String packingnumber, String batch, String locationcode, String status ){ + RuleRespVO managementtRule = ruleService.management( null, null,null,null,null, null,itemcode,null,null, + null, locationcode,null,null); + List expectoutDO = null; + if( "{\"ManagementPrecision\":\"BY_QUANTITY\"}".equals( managementtRule.getConfiguration())){ + expectoutDO = selectnumbernew(itemcode, status, locationcode ); + + } + else if("{\"ManagementPrecision\":\"BY_BATCH\"}".equals(managementtRule.getConfiguration())){ + expectoutDO = selectbatchnew(itemcode,batch,status,locationcode); + + } + + else if("{\"ManagementPrecision\":\"BY_PACKAGING\"}".equals(managementtRule.getConfiguration())) { + expectoutDO = selectpackingnew(itemcode,packingnumber, batch, status, locationcode); + } + + else if("{\"ManagementPrecision\":\"BY_UNIQUE_ID\"}".equals(managementtRule.getConfiguration())) { + expectoutDO = selectuniqeidnew(packingnumber, locationcode,status); + } + + return expectoutDO; + + } + + + //查询可用库存 TB3 + + public BigDecimal CountLocaltion(String itemcode,String packingnumber,String batch,String locationcode,String status ){ + List expectoutDO = selectlocationnew(itemcode,packingnumber,batch,locationcode,status); + List balanceDO = selectlocation(itemcode,packingnumber,batch,locationcode,status); + + //double sum = expectoutDO.stream().mapToDouble(ExpectoutDO::getQty).sum(); + BigDecimal esum = BigDecimal.valueOf(expectoutDO.stream().mapToDouble(expectoutDO1 -> expectoutDO1.getQty().doubleValue()).sum()); + BigDecimal bsum =BigDecimal.valueOf(balanceDO.stream().mapToDouble(balanceDO1 -> balanceDO1.getQty().doubleValue()).sum()); + BigDecimal sum = bsum.subtract(esum); + return sum; + } + //有无库存效验 + + public String LocaltionExist(String itemcode, String packingnumber,String batch,String locationcode,String status,BigDecimal requstqty){ + BigDecimal enableqty = CountLocaltion(itemcode,packingnumber,batch,locationcode,status); + if(requstqty.compareTo(enableqty) > 0){ + throw exception(new ErrorCode(1256,"请求数量" + requstqty + "大于库存数量" + enableqty)); + } + else{ + return "成功"; + } + + } + + + + + + //查询储存容量 + + public String selectlocationstrategy(String itemcode, String locationcode){ + RuleRespVO storagecapacityrule = ruleService.storageCapacity(null,null,itemcode,null,null,null,locationcode); + String[] StorageQty = storagecapacityrule.getConfiguration().split(","); + String[] StorageQty1 = StorageQty[1].split(":"); + String StorageQty2 = StorageQty1[1]; + if("-1".equals(StorageQty2)){ + return "不可以存放"; + } + return "可以存放"; + + } + + + //库存不应该存在 + public List locationNoExist(String itemcode,String packingnumber,String locationcode,String inventorystatus){ + RuleRespVO managementtRule = ruleService.management( null, null,null,null,null, null,itemcode,null,null, + null, locationcode,null,null); + List balanceDO = null; + if("{\"ManagementPrecision\":\"BY_UNIQUE_ID\"}".equals(managementtRule.getConfiguration())){ + balanceDO = selectuniqueid(packingnumber, locationcode,inventorystatus); + return balanceDO; + + } + else{ + throw exception(new ErrorCode(1256,"校验通过" )); + } + + + } + //查询库位BQ-QL + public String selectlocation(String code){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("code",code); + LocationDO locationDO = locationMapper.selectOne(queryWrapper); + if(locationDO==null&&"TRUE".equals(locationDO.getAvailable())){ + return "TURE"; + } + else{ + return "FALSE"; + } + } + + + + + + + + + + + //从库位未被其他任务占用,有可用库存 + public String locationExistnew(String itemcode, String packingnumber,String batch,String fromlocationcode,String status,BigDecimal requstqty ){ + if(fromlocationcode.isEmpty()){ + return "不需要其他校验"; + } + String Yesorno = selectlocation(fromlocationcode); + if("TURE".equals(Yesorno)){ + + String END = LocaltionExist(itemcode,packingnumber,batch,fromlocationcode,status,requstqty); + return END; + } + else{ + return "效验通过"; + } + + } + + + + }