diff --git a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesBaseBarcodeInfo.java b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesBaseBarcodeInfo.java index e936f52c..b70e6eee 100644 --- a/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesBaseBarcodeInfo.java +++ b/hw-api/hw-api-mes/src/main/java/com/hw/mes/api/domain/MesBaseBarcodeInfo.java @@ -11,8 +11,8 @@ import com.hw.common.core.web.domain.BaseEntity; /** * 条码信息对象 mes_base_barcode_info * - * @author xs - * @date 2023-12-21 + * @author xins + * @date 2024-01-15 */ public class MesBaseBarcodeInfo extends BaseEntity { @@ -30,10 +30,14 @@ public class MesBaseBarcodeInfo extends BaseEntity @Excel(name = "打印人") private String printPerson; - /** 批次标识(0否,1是) */ - @Excel(name = "批次标识(0否,1是)") + /** 批次标识(0否,1是);在打印时,如果物料已设置,则根据物料的批次信息,如果没有设置则在此需要选择,选择物料等信息保存后同步设置物料信息。 */ + @Excel(name = "批次标识(0否,1是);在打印时,如果物料已设置,则根据物料的批次信息,如果没有设置则在此需要选择,选择物料等信息保存后同步设置物料信息。") private String batchFlag; + /** 条码类型(1原材料,2半成品,3成品,4背板) */ + @Excel(name = "条码类型", readConverterExp = "1=原材料,2半成品,3成品,4背板") + private String barcodeType; + /** 条码内容;如果是按单个物料贴,则一个物料一个条码,如果是按批次贴,则条码跟批次代码相同 */ @Excel(name = "条码内容;如果是按单个物料贴,则一个物料一个条码,如果是按批次贴,则条码跟批次代码相同") private String barcodeInfo; @@ -42,9 +46,9 @@ public class MesBaseBarcodeInfo extends BaseEntity @Excel(name = "批次代码") private String batchCode; - /** RFID代码 */ - @Excel(name = "RFID代码") - private String rfidCode; + /** 托盘RFID代码 */ + @Excel(name = "托盘RFID代码") + private String palletInfoCode; /** 物料ID,关联mes_base_material_info的material_id */ @Excel(name = "物料ID,关联mes_base_material_info的material_id") @@ -54,10 +58,6 @@ public class MesBaseBarcodeInfo extends BaseEntity @Excel(name = "供应商ID") private Long manufacturerId; - /** 重量 */ - @Excel(name = "重量") - private BigDecimal weight; - /** 数量 */ @Excel(name = "数量") private BigDecimal amount; @@ -66,8 +66,8 @@ public class MesBaseBarcodeInfo extends BaseEntity @Excel(name = "打印机台名称,打印时获取") private String machineName; - /** 采购订单号 */ - @Excel(name = "采购订单号") + /** 采购订单号;适合原材料入库时 */ + @Excel(name = "采购订单号;适合原材料入库时") private String poNo; /** 生产日期;打印时根据领料单选择输入 */ @@ -80,22 +80,43 @@ public class MesBaseBarcodeInfo extends BaseEntity @Excel(name = "接受日期;打印时的系统日期", width = 30, dateFormat = "yyyy-MM-dd") private Date acceptedDate; - /** 日限;根据日限计算出过期日期(最晚出库日期) */ - @Excel(name = "日限;根据日限计算出过期日期", readConverterExp = "最=晚出库日期") - private Long limitingDate; - /** 最晚出库日期;可以直接输入,也可以根据日限计算 */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "最晚出库日期;可以直接输入,也可以根据日限计算", width = 30, dateFormat = "yyyy-MM-dd") private Date lastOutstockDate; + /** 生产计划编号,关联mes_pd_product_plan的plan_code;适合生产出入库等 */ + @Excel(name = "生产计划编号,关联mes_pd_product_plan的plan_code;适合生产出入库等") + private String planCode; + + /** 生产计划明细编号,关联mes_product_plan_detail的plan_detail_code;适合生产出入库等 */ + @Excel(name = "生产计划明细编号,关联mes_product_plan_detail的plan_detail_code;适合生产出入库等") + private String planDetailCode; + + /** 销售订单编号;适合生产出入库等 */ + @Excel(name = "销售订单编号;适合生产出入库等") + private String saleorderCode; + + /** 项目号 */ + @Excel(name = "项目号") + private String projectNo; + /** 流水号 */ @Excel(name = "流水号") private String serialNumber; - /** 是否启用 */ - @Excel(name = "是否启用") - private Long activeFlag; + /** 绑定状态(1绑定,0解绑) */ + @Excel(name = "绑定状态(1绑定,0解绑)") + private String bindStatus; + + /** 绑定托盘的人 */ + @Excel(name = "绑定托盘的人") + private String bindBy; + + /** 绑定托盘时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "绑定托盘时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date bindTime; public void setBarcodeId(Long barcodeId) { @@ -133,6 +154,15 @@ public class MesBaseBarcodeInfo extends BaseEntity { return batchFlag; } + public void setBarcodeType(String barcodeType) + { + this.barcodeType = barcodeType; + } + + public String getBarcodeType() + { + return barcodeType; + } public void setBarcodeInfo(String barcodeInfo) { this.barcodeInfo = barcodeInfo; @@ -151,14 +181,14 @@ public class MesBaseBarcodeInfo extends BaseEntity { return batchCode; } - public void setRfidCode(String rfidCode) + public void setPalletInfoCode(String palletInfoCode) { - this.rfidCode = rfidCode; + this.palletInfoCode = palletInfoCode; } - public String getRfidCode() + public String getPalletInfoCode() { - return rfidCode; + return palletInfoCode; } public void setMaterialId(Long materialId) { @@ -178,15 +208,6 @@ public class MesBaseBarcodeInfo extends BaseEntity { return manufacturerId; } - public void setWeight(BigDecimal weight) - { - this.weight = weight; - } - - public BigDecimal getWeight() - { - return weight; - } public void setAmount(BigDecimal amount) { this.amount = amount; @@ -232,15 +253,6 @@ public class MesBaseBarcodeInfo extends BaseEntity { return acceptedDate; } - public void setLimitingDate(Long limitingDate) - { - this.limitingDate = limitingDate; - } - - public Long getLimitingDate() - { - return limitingDate; - } public void setLastOutstockDate(Date lastOutstockDate) { this.lastOutstockDate = lastOutstockDate; @@ -250,6 +262,42 @@ public class MesBaseBarcodeInfo extends BaseEntity { return lastOutstockDate; } + public void setPlanCode(String planCode) + { + this.planCode = planCode; + } + + public String getPlanCode() + { + return planCode; + } + public void setPlanDetailCode(String planDetailCode) + { + this.planDetailCode = planDetailCode; + } + + public String getPlanDetailCode() + { + return planDetailCode; + } + public void setSaleorderCode(String saleorderCode) + { + this.saleorderCode = saleorderCode; + } + + public String getSaleorderCode() + { + return saleorderCode; + } + public void setProjectNo(String projectNo) + { + this.projectNo = projectNo; + } + + public String getProjectNo() + { + return projectNo; + } public void setSerialNumber(String serialNumber) { this.serialNumber = serialNumber; @@ -259,14 +307,32 @@ public class MesBaseBarcodeInfo extends BaseEntity { return serialNumber; } - public void setActiveFlag(Long activeFlag) + public void setBindStatus(String bindStatus) { - this.activeFlag = activeFlag; + this.bindStatus = bindStatus; } - public Long getActiveFlag() + public String getBindStatus() { - return activeFlag; + return bindStatus; + } + public void setBindBy(String bindBy) + { + this.bindBy = bindBy; + } + + public String getBindBy() + { + return bindBy; + } + public void setBindTime(Date bindTime) + { + this.bindTime = bindTime; + } + + public Date getBindTime() + { + return bindTime; } @Override @@ -276,24 +342,27 @@ public class MesBaseBarcodeInfo extends BaseEntity .append("printTime", getPrintTime()) .append("printPerson", getPrintPerson()) .append("batchFlag", getBatchFlag()) + .append("barcodeType", getBarcodeType()) .append("barcodeInfo", getBarcodeInfo()) .append("batchCode", getBatchCode()) - .append("rfidCode", getRfidCode()) + .append("palletInfoCode", getPalletInfoCode()) .append("materialId", getMaterialId()) .append("manufacturerId", getManufacturerId()) - .append("weight", getWeight()) .append("amount", getAmount()) .append("machineName", getMachineName()) .append("poNo", getPoNo()) .append("productionDate", getProductionDate()) .append("acceptedDate", getAcceptedDate()) - .append("limitingDate", getLimitingDate()) .append("lastOutstockDate", getLastOutstockDate()) + .append("planCode", getPlanCode()) + .append("planDetailCode", getPlanDetailCode()) + .append("saleorderCode", getSaleorderCode()) + .append("projectNo", getProjectNo()) .append("serialNumber", getSerialNumber()) .append("remark", getRemark()) - .append("activeFlag", getActiveFlag()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) + .append("bindStatus", getBindStatus()) + .append("bindBy", getBindBy()) + .append("bindTime", getBindTime()) .append("updateBy", getUpdateBy()) .append("updateTime", getUpdateTime()) .toString(); diff --git a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java index 3b54f557..107453b6 100644 --- a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java +++ b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/WmsConstants.java @@ -17,7 +17,7 @@ public class WmsConstants { - /*操作类型,适合原材料和成品的出入库以及原材料的退库*/ + /*操作类型,适合原材料和成品的出入库、原材料的退库以及转库*/ public static final String WMS_OPERATION_TYPE_AUTO = "0";//agv自动 public static final String WMS_OPERATION_TYPE_MANUAL = "1";//人工 public static final String WMS_OPERATION_TYPE_FORCED = "2";//强制 @@ -79,7 +79,9 @@ public class WmsConstants { /*出入库退库记录(明细)执行状态*/ public static final String WMS_EXECUTE_STATUS_TOEXECUTE = "0";//待执行 public static final String WMS_EXECUTE_STATUS_EXECUTING = "1";//执行中 - public static final String WMS_EXECUTE_STATUS_FINISH = "2";//执完成行 + public static final String WMS_EXECUTE_STATUS_FINISH = "2";//完成执行 + + public static final String WMS_EXECUTE_STATUS_NOT_FINISH = "notFinish";//未完成执行 @@ -113,9 +115,9 @@ public class WmsConstants { /*仓库存放类型*/ - public static final String WAREHOUSE_INSTOCK_TYPE_RAW = "1";//原材料 - public static final String WAREHOUSE_INSTOCK_TYPE_SEMI = "2";//半成品 - public static final String WAREHOUSE_INSTOCK_TYPE_PRODUCT = "3";//成品 + public static final String WMS_WAREHOUSE_INSTOCK_TYPE_RAW = "1";//原材料 + public static final String WMS_WAREHOUSE_INSTOCK_TYPE_SEMI = "2";//半成品 + public static final String WMS_WAREHOUSE_INSTOCK_TYPE_PRODUCT = "3";//成品 public static final String WMS_MOVEMERGE_TYPE_MOVE = "1"; //移库 @@ -175,4 +177,17 @@ public class WmsConstants { public static final String WMS_RAW_STOCK_COMPLETE_FLAG_NO = "0";//否 public static final String WMS_WAREHOUSE_MATERIAL_STORAGE_TYPE_MATERIAL = "1"; + + + + + /*转库类型*/ + public static final String WMS_TRANSFER_TYPE_OUT_TO_PRODUCT_STOCK = "1";//出半成品库入成品库 + + + /*转库明细类型*/ + public static final String WMS_TRANSFER_DETAIL_TYPE_OUTSTOCK = "1";//出库 + public static final String WMS_TRANSFER_DETAIL_TYPE_INSTOCK = "2";//入库 + + } diff --git a/hw-common/hw-common-log/src/main/java/com/hw/common/log/enums/BusinessType.java b/hw-common/hw-common-log/src/main/java/com/hw/common/log/enums/BusinessType.java index ee6a086a..58d70156 100644 --- a/hw-common/hw-common-log/src/main/java/com/hw/common/log/enums/BusinessType.java +++ b/hw-common/hw-common-log/src/main/java/com/hw/common/log/enums/BusinessType.java @@ -92,4 +92,9 @@ public enum BusinessType */ UNALLOCATE, + /** + * 转库 + */ + TRANSFER, + } diff --git a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml index cadf4b33..0c325116 100644 --- a/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml +++ b/hw-modules/hw-mes/src/main/resources/mapper/mes/MesBaseBarcodeInfoMapper.xml @@ -9,58 +9,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - + - - + + + + - - - + + + - select barcode_id, print_time, print_person, batch_flag, barcode_info, batch_code, rfid_code, material_id, manufacturer_id, weight, amount, machine_name, po_no, production_date, accepted_date, limiting_date, last_outstock_date, serial_number, remark, active_flag, create_by, create_time, update_by, update_time from mes_base_barcode_info + select barcode_id, print_time, print_person, batch_flag, barcode_type, barcode_info, batch_code, pallet_info_code, material_id, manufacturer_id, amount, machine_name, po_no, production_date, accepted_date, last_outstock_date, plan_code, plan_detail_code, saleorder_code, project_no, serial_number, remark, bind_status, bind_by, bind_time, update_by, update_time from mes_base_barcode_info - - - @@ -75,24 +78,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" print_time, print_person, batch_flag, + barcode_type, barcode_info, batch_code, - rfid_code, + pallet_info_code, material_id, manufacturer_id, - weight, amount, machine_name, po_no, production_date, accepted_date, - limiting_date, last_outstock_date, + plan_code, + plan_detail_code, + saleorder_code, + project_no, serial_number, remark, - active_flag, - create_by, - create_time, + bind_status, + bind_by, + bind_time, update_by, update_time, @@ -100,24 +106,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{printTime}, #{printPerson}, #{batchFlag}, + #{barcodeType}, #{barcodeInfo}, #{batchCode}, - #{rfidCode}, + #{palletInfoCode}, #{materialId}, #{manufacturerId}, - #{weight}, #{amount}, #{machineName}, #{poNo}, #{productionDate}, #{acceptedDate}, - #{limitingDate}, #{lastOutstockDate}, + #{planCode}, + #{planDetailCode}, + #{saleorderCode}, + #{projectNo}, #{serialNumber}, #{remark}, - #{activeFlag}, - #{createBy}, - #{createTime}, + #{bindStatus}, + #{bindBy}, + #{bindTime}, #{updateBy}, #{updateTime}, @@ -129,24 +138,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" print_time = #{printTime}, print_person = #{printPerson}, batch_flag = #{batchFlag}, + barcode_type = #{barcodeType}, barcode_info = #{barcodeInfo}, batch_code = #{batchCode}, - rfid_code = #{rfidCode}, + pallet_info_code = #{palletInfoCode}, material_id = #{materialId}, manufacturer_id = #{manufacturerId}, - weight = #{weight}, amount = #{amount}, machine_name = #{machineName}, po_no = #{poNo}, production_date = #{productionDate}, accepted_date = #{acceptedDate}, - limiting_date = #{limitingDate}, last_outstock_date = #{lastOutstockDate}, + plan_code = #{planCode}, + plan_detail_code = #{planDetailCode}, + saleorder_code = #{saleorderCode}, + project_no = #{projectNo}, serial_number = #{serialNumber}, remark = #{remark}, - active_flag = #{activeFlag}, - create_by = #{createBy}, - create_time = #{createTime}, + bind_status = #{bindStatus}, + bind_by = #{bindBy}, + bind_time = #{bindTime}, update_by = #{updateBy}, update_time = #{updateTime}, @@ -163,4 +175,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{barcodeId} + + + + + + diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java index 6b6a82d1..7e63db55 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java @@ -43,6 +43,15 @@ public class WmsMobileController extends BaseController { @Autowired private IWmsMoveMergeService wmsMoveMergeService; + @Autowired + private IWmsTransferService wmsTransferService; + + @Autowired + private IWmsBaseWarehouseService wmsBaseWarehouseService; + + @Autowired + private IWmsProductStockService wmsProductStockService; + /** * 新增原材料入库记录 */ @@ -108,12 +117,6 @@ public class WmsMobileController extends BaseController { } - - - - - - /** * 查询原材料待审核状态的退库记录列表 */ @@ -177,7 +180,6 @@ public class WmsMobileController extends BaseController { } - /** * 人工成品入库 */ @@ -187,10 +189,88 @@ public class WmsMobileController extends BaseController { return toAjax(wmsProductInstockService.insertWmsProductInstock(wmsProductInstockVo)); } + + /** + * 获取半成品仓库列表 + */ +// @RequiresPermissions("wms:rawoutstock:query") + @GetMapping(value = "/getSemiWarehouseList") + public AjaxResult getSemiWarehouseList() { + WmsBaseWarehouse queryBaseWarehouse = new WmsBaseWarehouse(); + queryBaseWarehouse.setWarehouseInstockType(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_SEMI); + return success(wmsBaseWarehouseService.selectWmsBaseWarehouseList(queryBaseWarehouse)); + } + + /** + * 获取成品仓库列表 + */ +// @RequiresPermissions("wms:rawoutstock:query") + @GetMapping(value = "/getProductWarehouseList") + public AjaxResult getProductWarehouseList() { + WmsBaseWarehouse queryBaseWarehouse = new WmsBaseWarehouse(); + queryBaseWarehouse.setWarehouseInstockType(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_PRODUCT); + return success(wmsBaseWarehouseService.selectWmsBaseWarehouseList(queryBaseWarehouse)); + } + + + /** + * 根据仓库ID获取成品库存信息 + */ +// @RequiresPermissions("wms:rawoutstock:query") + @GetMapping(value = "/getProductStock") + public AjaxResult getProductStock(Long warehouseId) { + WmsProductStock queryProductStock = new WmsProductStock(); + queryProductStock.setWarehouseId(warehouseId); + return success(wmsProductStockService.selectWmsProductStockJoinList(queryProductStock)); + } + + + /** + * 人工申请半成品出半成品库入成品库 + */ + @Log(title = "转库", businessType = BusinessType.TRANSFER) + @PostMapping(("/applyProductTransfer")) + public AjaxResult applyProductTransfer(@Validated @RequestBody List wmsTransfers) { + return toAjax(wmsTransferService.applyTransfers(wmsTransfers)); + } + + + /** + * 获取待转库列表 + */ +// @RequiresPermissions("wms:rawoutstock:query") + @GetMapping(value = "/getTransfers") + public AjaxResult getTransfers() { + WmsTransfer queryTransfer = new WmsTransfer(); + queryTransfer.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_NOT_FINISH); + return success(wmsTransferService.selectWmsTransferJoinList(queryTransfer)); + } + + + /** + * 转库出库,五楼半成品出半成品库 + */ + @Log(title = "转库", businessType = BusinessType.INSERT) + @PostMapping(("/transferOutstock")) + public AjaxResult transferOutstock(@RequestBody WmsTransferDetail wmsTransferDetail) { + return toAjax(wmsTransferService.transferOutstock(wmsTransferDetail)); + } + + + /** + * 转库入库,五楼半成品入成品库 + */ + @Log(title = "转库", businessType = BusinessType.INSERT) + @PostMapping(("/transferInstock")) + public AjaxResult transferInstock(@RequestBody WmsTransferDetail wmsTransferDetail) { + return toAjax(wmsTransferService.transferInstock(wmsTransferDetail)); + } + + /** * 人工移库 */ - @Log(title = "原材料移库", businessType = BusinessType.INSERT) + @Log(title = "人工移库", businessType = BusinessType.INSERT) @PostMapping(("/moveRaw")) public AjaxResult moveRaw(@Validated @RequestBody WmsMoveMergeVo wmsMoveMergeVo) { return toAjax(wmsMoveMergeService.manualMove(wmsMoveMergeVo, WmsConstants.WMS_MOVEMERGE_TYPE_MOVE)); diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsProductStock.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsProductStock.java index 6e11693e..2060d5fe 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsProductStock.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/WmsProductStock.java @@ -87,6 +87,10 @@ public class WmsProductStock extends BaseEntity @Excel(name = "入库时间", readConverterExp = "预=留") private Date instockDate; + private String materialCode; + + private String materialName; + public void setProductStockId(Long productStockId) { this.productStockId = productStockId; @@ -231,6 +235,22 @@ public class WmsProductStock extends BaseEntity return instockDate; } + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsProductTransferVo.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsProductTransferVo.java new file mode 100644 index 00000000..9fa8ea32 --- /dev/null +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/domain/vo/WmsProductTransferVo.java @@ -0,0 +1,46 @@ +package com.hw.wms.domain.vo; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * @Description: 转库记录对象VO + * @ClassName: WmsProductTransferVo + * @Author : xins + * @Date :2024-01-15 8:51 + * @Version :1.0 + */ +@Data +public class WmsProductTransferVo { + + //原仓库ID + @NotNull(message="原仓库必须输入") + private Long oriWarehouseId; + + //目标仓库ID + @NotNull(message="目标仓库ID必须输入") + private Long targetWarehouseId; + + //原库位编号 + @NotBlank(message="原库位编号必须输入") + private String oriLocationCode; + + //产品ID + @NotNull(message="成品ID必须输入") + private Long productId; + + //产品批次 + @NotBlank(message="产品批次必须输入") + private String productBatch; + + //生产计划Code + @NotBlank(message="生产计划编号必须输入") + private String planCode; + + private BigDecimal applyCount; + + +} diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsProductStockMapper.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsProductStockMapper.java index 6ebef965..4080b468 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsProductStockMapper.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsProductStockMapper.java @@ -87,4 +87,13 @@ public interface WmsProductStockMapper */ public List selectWmsProductStockInList(WmsProductStock wmsProductStock); + + /** + * 查询成品库存列表Join material,totalAmount>0 + * + * @param wmsProductStock 成品库存 + * @return 成品库存集合 + */ + public List selectWmsProductStockJoinList(WmsProductStock wmsProductStock); + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsTransferDetailMapper.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsTransferDetailMapper.java new file mode 100644 index 00000000..94647144 --- /dev/null +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsTransferDetailMapper.java @@ -0,0 +1,61 @@ +package com.hw.wms.mapper; + +import java.util.List; +import com.hw.wms.domain.WmsTransferDetail; + +/** + * 转库记录明细Mapper接口 + * + * @author xins + * @date 2024-01-15 + */ +public interface WmsTransferDetailMapper +{ + /** + * 查询转库记录明细 + * + * @param transferDetailId 转库记录明细主键 + * @return 转库记录明细 + */ + public WmsTransferDetail selectWmsTransferDetailByTransferDetailId(Long transferDetailId); + + /** + * 查询转库记录明细列表 + * + * @param wmsTransferDetail 转库记录明细 + * @return 转库记录明细集合 + */ + public List selectWmsTransferDetailList(WmsTransferDetail wmsTransferDetail); + + /** + * 新增转库记录明细 + * + * @param wmsTransferDetail 转库记录明细 + * @return 结果 + */ + public int insertWmsTransferDetail(WmsTransferDetail wmsTransferDetail); + + /** + * 修改转库记录明细 + * + * @param wmsTransferDetail 转库记录明细 + * @return 结果 + */ + public int updateWmsTransferDetail(WmsTransferDetail wmsTransferDetail); + + /** + * 删除转库记录明细 + * + * @param transferDetailId 转库记录明细主键 + * @return 结果 + */ + public int deleteWmsTransferDetailByTransferDetailId(Long transferDetailId); + + /** + * 批量删除转库记录明细 + * + * @param transferDetailIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteWmsTransferDetailByTransferDetailIds(Long[] transferDetailIds); +} diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsProductStockService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsProductStockService.java index ea736648..3c4fb888 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsProductStockService.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsProductStockService.java @@ -5,15 +5,15 @@ import com.hw.wms.domain.WmsProductStock; /** * 成品库存Service接口 - * + * * @author xs * @date 2023-12-20 */ -public interface IWmsProductStockService +public interface IWmsProductStockService { /** * 查询成品库存 - * + * * @param productStockId 成品库存主键 * @return 成品库存 */ @@ -21,7 +21,7 @@ public interface IWmsProductStockService /** * 查询成品库存列表 - * + * * @param wmsProductStock 成品库存 * @return 成品库存集合 */ @@ -29,7 +29,7 @@ public interface IWmsProductStockService /** * 新增成品库存 - * + * * @param wmsProductStock 成品库存 * @return 结果 */ @@ -37,7 +37,7 @@ public interface IWmsProductStockService /** * 修改成品库存 - * + * * @param wmsProductStock 成品库存 * @return 结果 */ @@ -45,7 +45,7 @@ public interface IWmsProductStockService /** * 批量删除成品库存 - * + * * @param productStockIds 需要删除的成品库存主键集合 * @return 结果 */ @@ -53,9 +53,17 @@ public interface IWmsProductStockService /** * 删除成品库存信息 - * + * * @param productStockId 成品库存主键 * @return 结果 */ public int deleteWmsProductStockByProductStockId(Long productStockId); + + /** + * 查询成品库存列表,Join material,totalAmount>0 + * + * @param wmsProductStock 成品库存 + * @return 成品库存 + */ + public List selectWmsProductStockJoinList(WmsProductStock wmsProductStock); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsTransactionalService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsTransactionalService.java new file mode 100644 index 00000000..ed5a8d7b --- /dev/null +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsTransactionalService.java @@ -0,0 +1,25 @@ +package com.hw.wms.service; + +import com.hw.wms.domain.WmsTransfer; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; + +/** + * @Description: 用来循环内执行事务的服务接口 + * @ClassName: IWmsTransactionalService + * @Author : xins + * @Date :2024-01-15 10:29 + * @Version :1.0 + */ +public interface IWmsTransactionalService { + + /** + * @Description: 申请转库(适合五楼半成品出半成品库入成品库) + * @ClassName: WmsTransactionalServiceImpl + * @Author : xins + * @Date :2024-01-15 10:37 + * @Version :1.0 + */ + public void applyTransfer(WmsTransfer wmsTransfer, String userName, Date currentDate); +} diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductStockServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductStockServiceImpl.java index f9b92bdb..c8c5eec1 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductStockServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsProductStockServiceImpl.java @@ -9,19 +9,19 @@ import com.hw.wms.service.IWmsProductStockService; /** * 成品库存Service业务层处理 - * + * * @author xs * @date 2023-12-20 */ @Service -public class WmsProductStockServiceImpl implements IWmsProductStockService +public class WmsProductStockServiceImpl implements IWmsProductStockService { @Autowired private WmsProductStockMapper wmsProductStockMapper; /** * 查询成品库存 - * + * * @param productStockId 成品库存主键 * @return 成品库存 */ @@ -33,7 +33,7 @@ public class WmsProductStockServiceImpl implements IWmsProductStockService /** * 查询成品库存列表 - * + * * @param wmsProductStock 成品库存 * @return 成品库存 */ @@ -45,7 +45,7 @@ public class WmsProductStockServiceImpl implements IWmsProductStockService /** * 新增成品库存 - * + * * @param wmsProductStock 成品库存 * @return 结果 */ @@ -57,7 +57,7 @@ public class WmsProductStockServiceImpl implements IWmsProductStockService /** * 修改成品库存 - * + * * @param wmsProductStock 成品库存 * @return 结果 */ @@ -69,7 +69,7 @@ public class WmsProductStockServiceImpl implements IWmsProductStockService /** * 批量删除成品库存 - * + * * @param productStockIds 需要删除的成品库存主键 * @return 结果 */ @@ -81,7 +81,7 @@ public class WmsProductStockServiceImpl implements IWmsProductStockService /** * 删除成品库存信息 - * + * * @param productStockId 成品库存主键 * @return 结果 */ @@ -90,4 +90,19 @@ public class WmsProductStockServiceImpl implements IWmsProductStockService { return wmsProductStockMapper.deleteWmsProductStockByProductStockId(productStockId); } + + + /** + * 查询成品库存列表,Join material,totalAmount>0 + * + * @param wmsProductStock 成品库存 + * @return 成品库存 + */ + @Override + public List selectWmsProductStockJoinList(WmsProductStock wmsProductStock) + { + return wmsProductStockMapper.selectWmsProductStockJoinList(wmsProductStock); + } + + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsTransactionalServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsTransactionalServiceImpl.java new file mode 100644 index 00000000..b7a85a38 --- /dev/null +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsTransactionalServiceImpl.java @@ -0,0 +1,70 @@ +package com.hw.wms.service.impl; + +import com.hw.common.core.constant.WmsConstants; +import com.hw.common.core.exception.ServiceException; +import com.hw.wms.domain.WmsProductStock; +import com.hw.wms.domain.WmsTransfer; +import com.hw.wms.mapper.WmsProductStockMapper; +import com.hw.wms.mapper.WmsTransferMapper; +import com.hw.wms.service.IWmsTransactionalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Description:用来在循环内执行事务时调用 + * @ProjectName:HwMes + * @Author:xins + * @Date:2024-01-15 10:29 + * @Version:1.0 + */ +@Service +public class WmsTransactionalServiceImpl implements IWmsTransactionalService { + @Autowired + private WmsProductStockMapper wmsProductStockMapper; + + @Autowired + private WmsTransferMapper wmsTransferMapper; + + + /** + * @Description: 申请转库(适合五楼半成品出半成品库入成品库) + * @ClassName: WmsTransactionalServiceImpl + * @Author : xins + * @Date :2024-01-15 10:37 + * @Version :1.0 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void applyTransfer(WmsTransfer wmsTransfer, String userName, Date currentDate) { + BigDecimal applyQty = wmsTransfer.getApplyQty(); + String productBatch = wmsTransfer.getProductBatch(); + String oriLocationCode = wmsTransfer.getOriLocationCode(); + WmsProductStock wmsProductStock = wmsProductStockMapper.selectProductStockByLocationAndBatch(oriLocationCode, productBatch); + if (wmsProductStock == null) { + throw new ServiceException("库位["+oriLocationCode+"]没有此批次["+productBatch+"]的库存"); + } + BigDecimal totalAmount = wmsProductStock.getTotalAmount() == null ? BigDecimal.ZERO : wmsProductStock.getTotalAmount(); + BigDecimal frozenAmount = wmsProductStock.getFrozenAmount() == null ? BigDecimal.ZERO : wmsProductStock.getFrozenAmount(); + BigDecimal occupyAmount = wmsProductStock.getOccupyAmount() == null ? BigDecimal.ZERO : wmsProductStock.getOccupyAmount(); + BigDecimal avaialableAmount = totalAmount.subtract(frozenAmount).subtract(occupyAmount); + if (avaialableAmount.compareTo(applyQty) < 0) { + throw new ServiceException("库位["+oriLocationCode+"],批次["+productBatch+"]的申请数量不能大于" + avaialableAmount); + } + + wmsProductStock.setOccupyAmount(occupyAmount.add(applyQty)); + + wmsProductStockMapper.updateWmsProductStock(wmsProductStock); + + wmsTransfer.setApplyBy(userName); + wmsTransfer.setApplyDate(currentDate); + wmsTransfer.setOperationType(WmsConstants.WMS_OPERATION_TYPE_MANUAL); + wmsTransfer.setTransferType(WmsConstants.WMS_TRANSFER_TYPE_OUT_TO_PRODUCT_STOCK); + wmsTransfer.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); + wmsTransfer.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE); + wmsTransferMapper.insertWmsTransfer(wmsTransfer); + } +} diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml index db60c21c..98cf8b98 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsProductStockMapper.xml @@ -23,6 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -166,10 +168,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and update_date = #{updateDate} and active_flag = #{activeFlag} and instock_date = #{instockDate} - and totalAmoun>0 + and totalAmount>0 + + + + + diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsTransferDetailMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsTransferDetailMapper.xml new file mode 100644 index 00000000..f9e2ee99 --- /dev/null +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsTransferDetailMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select transfer_detail_id, transfer_id, location_code, material_barcode, instock_batch, material_id, plan_amount, real_amount, execute_status, execute_person, execute_time, transfer_detail_type, machine_name, create_by, create_date, update_by, update_date, active_flag from wms_transfer_detail + + + + + + + + insert into wms_transfer_detail + + transfer_id, + location_code, + material_barcode, + instock_batch, + material_id, + plan_amount, + real_amount, + execute_status, + execute_person, + execute_time, + transfer_detail_type, + machine_name, + create_by, + create_date, + update_by, + update_date, + active_flag, + + + #{transferId}, + #{locationCode}, + #{materialBarcode}, + #{instockBatch}, + #{materialId}, + #{planAmount}, + #{realAmount}, + #{executeStatus}, + #{executePerson}, + #{executeTime}, + #{transferDetailType}, + #{machineName}, + #{createBy}, + #{createDate}, + #{updateBy}, + #{updateDate}, + #{activeFlag}, + + + + + update wms_transfer_detail + + transfer_id = #{transferId}, + location_code = #{locationCode}, + material_barcode = #{materialBarcode}, + instock_batch = #{instockBatch}, + material_id = #{materialId}, + plan_amount = #{planAmount}, + real_amount = #{realAmount}, + execute_status = #{executeStatus}, + execute_person = #{executePerson}, + execute_time = #{executeTime}, + transfer_detail_type = #{transferDetailType}, + machine_name = #{machineName}, + create_by = #{createBy}, + create_date = #{createDate}, + update_by = #{updateBy}, + update_date = #{updateDate}, + active_flag = #{activeFlag}, + + where transfer_detail_id = #{transferDetailId} + + + + delete from wms_transfer_detail where transfer_detail_id = #{transferDetailId} + + + + delete from wms_transfer_detail where transfer_detail_id in + + #{transferDetailId} + + + \ No newline at end of file