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