WMS:PDA接口申请移库、PDA接口获取移库任务列表、PDA获取移库任务明细、PDA接口移库出库
master
xins 1 year ago
parent c98db88e02
commit 04ca4eb29c

@ -55,6 +55,9 @@ public class MesBaseBarcodeInfo extends BaseEntity
@Excel(name = "托盘RFID代码") @Excel(name = "托盘RFID代码")
private String palletInfoCode; private String palletInfoCode;
/**绑定的物料条码(用来拆分绑定使用)*/
private String bindBarcode;
/** 物料ID关联mes_base_material_info的material_id */ /** 物料ID关联mes_base_material_info的material_id */
@Excel(name = "物料ID") @Excel(name = "物料ID")
private Long materialId; private Long materialId;
@ -231,6 +234,15 @@ public class MesBaseBarcodeInfo extends BaseEntity
{ {
return palletInfoCode; return palletInfoCode;
} }
public String getBindBarcode() {
return bindBarcode;
}
public void setBindBarcode(String bindBarcode) {
this.bindBarcode = bindBarcode;
}
public void setMaterialId(Long materialId) public void setMaterialId(Long materialId)
{ {
this.materialId = materialId; this.materialId = materialId;

@ -76,6 +76,7 @@ public class WmsConstants {
public static final String WMS_EXECUTE_STATUS_EXECUTING = "1";//执行中 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";//未完成执行 public static final String WMS_EXECUTE_STATUS_NOT_FINISH = "notFinish";//未完成执行
@ -111,10 +112,18 @@ public class WmsConstants {
public static final String WMS_WAREHOUSE_INSTOCK_TYPE_PRODUCT = "3";//成品 public static final String WMS_WAREHOUSE_INSTOCK_TYPE_PRODUCT = "3";//成品
/**移库类型*/
public static final String WMS_MOVEMERGE_TYPE_MOVE = "1"; //移库 public static final String WMS_MOVEMERGE_TYPE_MOVE = "1"; //移库
public static final String WMS_MOVEMERGE_TYPE_MERGE = "2";//合库 public static final String WMS_MOVEMERGE_TYPE_MERGE = "2";//合库
/**移库方式*/
public static final String WMS_MOVEMERGE_WAY_MANUAL = "1"; //人工移库
public static final String WMS_MOVEMERGE_WAY_AGV = "2";//agv移库
public static final String WMS_MOVE_DETAIL_TYPE_OUT = "1";//出库
public static final String WMS_MOVE_DETAIL_TYPE_IN = "2";//入库
public static final String WMS_WAREHOUSE_TYPE_NORMAL = "1";//普通仓库 public static final String WMS_WAREHOUSE_TYPE_NORMAL = "1";//普通仓库
public static final String WMS_WAREHOUSE_TYPE_AGV = "2";//AGV仓库 public static final String WMS_WAREHOUSE_TYPE_AGV = "2";//AGV仓库
public static final String WMS_WAREHOUSE_TYPE_WORKBIN_AGV = "3";//料箱AGV仓库 public static final String WMS_WAREHOUSE_TYPE_WORKBIN_AGV = "3";//料箱AGV仓库
@ -206,4 +215,15 @@ public class WmsConstants {
public static final String WMS_RAW_STOCK_COMPLETE_FLAY_YES = "1";//完整 public static final String WMS_RAW_STOCK_COMPLETE_FLAY_YES = "1";//完整
public static final String WMS_RAW_STOCK_COMPLETE_FLAY_NO = "0";//拆分后的 public static final String WMS_RAW_STOCK_COMPLETE_FLAY_NO = "0";//拆分后的
/*移库记录(明细)执行状态*/
public static final String WMS_MOVE_EXECUTE_STATUS_TOEXECUTE = "0";//待执行
public static final String WMS_MOVE_EXECUTE_STATUS_EXECUTING = "1";//执行中
public static final String WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH = "2";//入库完成
public static final String WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH = "3";//出库完成
} }

@ -0,0 +1,56 @@
package com.hw.common.core.utils;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Locale;
/**
* @Description:Mac
* @ProjectName:HwMes
* @Author:xins
* @Date:2024-03-25 13:18
* @Version:1.0
*/
public class MacUtils {
/**
* MAC
* @return
*/
public static String getLocalMac(){
StringBuilder mac = new StringBuilder("");
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()){
NetworkInterface networkInterface = networkInterfaces.nextElement();
//过滤其他网卡
if (networkInterface.isVirtual()||networkInterface.isLoopback()||networkInterface.isPointToPoint() || !networkInterface.isUp()){
continue;
}
String displayName = networkInterface.getDisplayName();
if (displayName.contains("VMware Virtual")){
continue;
}
//获取解析网关
byte[] hardwareAddress = networkInterface.getHardwareAddress();
for(int i=0; i<hardwareAddress.length; i++) {
if(i!=0) {
mac.append("-");
}
//字节转换为整数
int temp = hardwareAddress[i]&0xff;
String str = Integer.toHexString(temp);
if(str.length()==1) {
mac.append("0").append(str);
}else {
mac.append(str);
}
}
break;
}
} catch (SocketException e) {
e.printStackTrace();
}
return String.valueOf(mac).toUpperCase(Locale.ROOT);
}
}

@ -32,6 +32,15 @@ public class Seq {
private static AtomicInteger productOutstockSeq = new AtomicInteger(1); private static AtomicInteger productOutstockSeq = new AtomicInteger(1);
// 成品出库记录标识 // 成品出库记录标识
public static final String productInstockCode = "PI";
// 成品入库记录序列类型
public static final String productInstockSeqType = "PRODUCTINSTOCK";
// 成品入库记录接口序列数
private static AtomicInteger productInstockSeq = new AtomicInteger(1);
// 成品入库记录标识
public static final String productOutstockCode = "PO"; public static final String productOutstockCode = "PO";
@ -99,13 +108,13 @@ public class Seq {
// 生产批次代码标识 // 生产批次代码标识
public static final String mesBatchCodeCode = "PC"; public static final String mesBatchCodeCode = "PC";
// 原材料条码内容记录标识 // 条码内容记录标识
public static final String mesBarcodeSeqType = "BAR_CODE"; public static final String mesBarcodeSeqType = "BAR_CODE";
// 原材料条码内容序列数 // 条码内容序列数
private static AtomicInteger mesBarcodeSeq = new AtomicInteger(1); private static AtomicInteger mesBarcodeSeq = new AtomicInteger(1);
// 原材料条码内容标识 // 条码内容标识
public static final String mesBarcodeCode = "TM"; public static final String mesBarcodeCode = "TM";
// 成品条码内容记录标识 // 成品条码内容记录标识
@ -183,6 +192,26 @@ public class Seq {
public static final String lubeInstanceCode = "LI"; public static final String lubeInstanceCode = "LI";
// 物料移库记录序列类型
public static final String wmsMoveSeqType = "WMSMOVE";
// 物料移库记录接口序列数
private static AtomicInteger wmsMoveSeq = new AtomicInteger(1);
// 物料移库记录标识
public static final String wmsMoveSeqCode = "MO";
// 物料合库记录序列类型
public static final String wmsMergeSeqType = "WMSMERGE";
// 物料合库记录接口序列数
private static AtomicInteger wmsMergeSeq = new AtomicInteger(1);
// 物料合库记录标识
public static final String wmsMergeSeqCode = "ME";
/** /**
* *
* *
@ -277,6 +306,12 @@ public class Seq {
atomicInt = lubeInstanceSeq; atomicInt = lubeInstanceSeq;
}else if(mesCompBarcodeSeqType.equals(type)) { }else if(mesCompBarcodeSeqType.equals(type)) {
atomicInt = mesCompBarcodeSeq; atomicInt = mesCompBarcodeSeq;
}else if(productInstockSeqType.equals(type)) {
atomicInt = productInstockSeq;
}else if(wmsMoveSeqType.equals(type)) {
atomicInt = wmsMoveSeq;
}else if(wmsMergeSeqType.equals(type)) {
atomicInt = wmsMergeSeq;
} }
return getId(atomicInt, 3, code); return getId(atomicInt, 3, code);
} }

@ -108,4 +108,15 @@ public enum BusinessType
*/ */
COMPLETE, COMPLETE,
/**
*
*/
OUTSTOCK,
/**
*
*/
INSTOCK,
} }

@ -0,0 +1,42 @@
package com.hw.wms.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @Description:
* @ClassName: StationConfig
* @Author : xins
* @Date :2024-03-25 8:53
* @Version :1.0
*/
@Configuration
@ConfigurationProperties(prefix = "wms")
public class WmsConfig
{
/**
*
*/
private String fifthAssembleStationCode;
/**
* ID
*/
private Long fifthSemiWarehouseId;
public String getFifthAssembleStationCode() {
return fifthAssembleStationCode;
}
public void setFifthAssembleStationCode(String fifthAssembleStationCode) {
this.fifthAssembleStationCode = fifthAssembleStationCode;
}
public Long getFifthSemiWarehouseId() {
return fifthSemiWarehouseId;
}
public void setFifthSemiWarehouseId(Long fifthSemiWarehouseId) {
this.fifthSemiWarehouseId = fifthSemiWarehouseId;
}
}

@ -49,7 +49,7 @@ public class WmsMobileController extends BaseController {
private IWmsProductOutstockDetailService wmsProductOutstockDetailService; private IWmsProductOutstockDetailService wmsProductOutstockDetailService;
@Autowired @Autowired
private IWmsMoveMergeService wmsMoveMergeService; private IWmsMoveService wmsMoveService;
@Autowired @Autowired
private IWmsTransferService wmsTransferService; private IWmsTransferService wmsTransferService;
@ -378,7 +378,8 @@ public class WmsMobileController extends BaseController {
*/ */
@Log(title = "成品出库确认", businessType = BusinessType.UPDATE) @Log(title = "成品出库确认", businessType = BusinessType.UPDATE)
@PostMapping(("/finalConfirmProductOutstock")) @PostMapping(("/finalConfirmProductOutstock"))
public AjaxResult finalConfirmProductOutstock(@RequestBody WmsProductOutstockConfirmVo wmsProductOutstockConfirmVo) { public AjaxResult finalConfirmProductOutstock(@RequestBody @Validated WmsProductOutstockConfirmVo wmsProductOutstockConfirmVo) {
wmsProductOutstockService.finalConfirmProductOutstock(wmsProductOutstockConfirmVo);
return toAjax(1); return toAjax(1);
} }
@ -403,13 +404,69 @@ public class WmsMobileController extends BaseController {
} }
//todo入库时校验warehousematerial,入库出库需要校验库位状态,是否是移库合库锁定等
/** /**
* *
*/ */
@Log(title = "人工移库", businessType = BusinessType.INSERT) @Log(title = "人工移库", businessType = BusinessType.APPLY)
@PostMapping(("/moveRaw")) @PostMapping(("/applyMove"))
public AjaxResult moveRaw(@Validated @RequestBody WmsMoveMergeVo wmsMoveMergeVo) { public AjaxResult applyMove(@Validated @RequestBody WmsMove wmsMove) {
return toAjax(wmsMoveMergeService.manualMove(wmsMoveMergeVo, WmsConstants.WMS_MOVEMERGE_TYPE_MOVE)); return toAjax(wmsMoveService.applyMove(wmsMove));
} }
/**
*
*/
// @RequiresPermissions("wms:rawoutstock:query")
@GetMapping(value = "/getMoveList")
public TableDataInfo getMoveList(WmsMove wmsMove) {
startPage();
wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL);
List<WmsMove> wmsMoves = wmsMoveService.selectWmsMoveJoinList(wmsMove);
return getDataTable(wmsMoves);
}
/**
*
*/
// @RequiresPermissions("wms:rawoutstock:query")
@GetMapping(value = "/getMoveDetail/{moveId}")
public AjaxResult getMoveDetail(@PathVariable("moveId") Long moveId) {
WmsMoveDetail queryMoveDetail = new WmsMoveDetail();
queryMoveDetail.setMoveId(moveId);
List<WmsMoveDetail> wmsMoveDetailList = wmsMoveService.selectWmsMoveDetailJoinList(queryMoveDetail);
return success(wmsMoveDetailList);
}
/**
*
*/
@Log(title = "人工移库", businessType = BusinessType.OUTSTOCK)
@PostMapping(("/moveOutstock"))
public AjaxResult moveOutstock(@Validated @RequestBody WmsMoveVo wmsMoveVo) {
return toAjax(wmsMoveService.moveOutstock(wmsMoveVo));
}
/**
*
*/
@Log(title = "人工移库", businessType = BusinessType.INSTOCK)
@PostMapping(("/moveInstock"))
public AjaxResult moveInstock(@Validated @RequestBody WmsMoveVo wmsMoveVo) {
return toAjax(wmsMoveService.moveInstock(wmsMoveVo));
}
} }

@ -98,6 +98,9 @@ public class WmsMove extends BaseEntity
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime; private Date endTime;
private String warehouseName;
/** 移库合库记录明细;原材料入库记录对应的明细信息信息 */ /** 移库合库记录明细;原材料入库记录对应的明细信息信息 */
private List<WmsMoveDetail> wmsMoveDetailList; private List<WmsMoveDetail> wmsMoveDetailList;
@ -283,6 +286,15 @@ public class WmsMove extends BaseEntity
this.wmsMoveDetailList = wmsMoveDetailList; this.wmsMoveDetailList = wmsMoveDetailList;
} }
public String getWarehouseName() {
return warehouseName;
}
public void setWarehouseName(String warehouseName) {
this.warehouseName = warehouseName;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

@ -25,10 +25,6 @@ public class WmsMoveDetail extends BaseEntity
@Excel(name = "移库ID关联移库合库记录主键") @Excel(name = "移库ID关联移库合库记录主键")
private Long moveId; private Long moveId;
/** 库位编码 */
@Excel(name = "库位编码")
private String locationCode;
/** 存放物料条码,入库扫描条码时从打印条码记录表中获取关联条码信息的barcode_info */ /** 存放物料条码,入库扫描条码时从打印条码记录表中获取关联条码信息的barcode_info */
@Excel(name = "存放物料条码,入库扫描条码时从打印条码记录表中获取关联条码信息的barcode_info") @Excel(name = "存放物料条码,入库扫描条码时从打印条码记录表中获取关联条码信息的barcode_info")
private String materialBarcode; private String materialBarcode;
@ -41,14 +37,21 @@ public class WmsMoveDetail extends BaseEntity
@Excel(name = "物料ID") @Excel(name = "物料ID")
private Long materialId; private Long materialId;
private String locationCode;
/** 计划数量 */ /** 计划数量 */
@Excel(name = "计划数量") @Excel(name = "计划数量")
private BigDecimal planAmount; private BigDecimal planAmount;
/** 实际数量 */ /** 实际出库数量 */
@Excel(name = "实际数量") @Excel(name = "实际出库数量")
private BigDecimal realAmount; private BigDecimal realAmount;
/** 实际入库数量 */
@Excel(name = "实际入库数量")
private BigDecimal realInstockAmount;
/** 执行状态(0待执行,1执行中,2执行完成) */ /** 执行状态(0待执行,1执行中,2执行完成) */
@Excel(name = "执行状态(0待执行,1执行中,2执行完成)") @Excel(name = "执行状态(0待执行,1执行中,2执行完成)")
private String executeStatus; private String executeStatus;
@ -62,9 +65,11 @@ public class WmsMoveDetail extends BaseEntity
@Excel(name = "执行时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "执行时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date executeTime; private Date executeTime;
/** 移库明细类型(1出库2入库) */ /** 执行时间 */
@Excel(name = "移库明细类型(1出库2入库)") @JsonFormat(pattern = "yyyy-MM-dd")
private String moveDetailType; @Excel(name = "执行结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date executeEndTime;
/** 使用机台名称;入库扫描条码时,从打印条码记录表中获取 */ /** 使用机台名称;入库扫描条码时,从打印条码记录表中获取 */
@Excel(name = "使用机台名称;入库扫描条码时,从打印条码记录表中获取") @Excel(name = "使用机台名称;入库扫描条码时,从打印条码记录表中获取")
@ -84,6 +89,16 @@ public class WmsMoveDetail extends BaseEntity
@Excel(name = "有效标记") @Excel(name = "有效标记")
private String activeFlag; private String activeFlag;
private String materialName;
/**移库合库记录执行状态*/
private String moveExecuteStatus;
/**移库合库记录执行状态,多个值使用*/
private String moveExecuteStatusStr;
public void setMoveDetailId(Long moveDetailId) public void setMoveDetailId(Long moveDetailId)
{ {
this.moveDetailId = moveDetailId; this.moveDetailId = moveDetailId;
@ -102,15 +117,6 @@ public class WmsMoveDetail extends BaseEntity
{ {
return moveId; return moveId;
} }
public void setLocationCode(String locationCode)
{
this.locationCode = locationCode;
}
public String getLocationCode()
{
return locationCode;
}
public void setMaterialBarcode(String materialBarcode) public void setMaterialBarcode(String materialBarcode)
{ {
this.materialBarcode = materialBarcode; this.materialBarcode = materialBarcode;
@ -129,6 +135,15 @@ public class WmsMoveDetail extends BaseEntity
{ {
return instockBatch; return instockBatch;
} }
public String getLocationCode() {
return locationCode;
}
public void setLocationCode(String locationCode) {
this.locationCode = locationCode;
}
public void setMaterialId(Long materialId) public void setMaterialId(Long materialId)
{ {
this.materialId = materialId; this.materialId = materialId;
@ -156,6 +171,15 @@ public class WmsMoveDetail extends BaseEntity
{ {
return realAmount; return realAmount;
} }
public BigDecimal getRealInstockAmount() {
return realInstockAmount;
}
public void setRealInstockAmount(BigDecimal realInstockAmount) {
this.realInstockAmount = realInstockAmount;
}
public void setExecuteStatus(String executeStatus) public void setExecuteStatus(String executeStatus)
{ {
this.executeStatus = executeStatus; this.executeStatus = executeStatus;
@ -183,15 +207,15 @@ public class WmsMoveDetail extends BaseEntity
{ {
return executeTime; return executeTime;
} }
public void setMoveDetailType(String moveDetailType)
{ public Date getExecuteEndTime() {
this.moveDetailType = moveDetailType; return executeEndTime;
} }
public String getMoveDetailType() public void setExecuteEndTime(Date executeEndTime) {
{ this.executeEndTime = executeEndTime;
return moveDetailType;
} }
public void setMachineName(String machineName) public void setMachineName(String machineName)
{ {
this.machineName = machineName; this.machineName = machineName;
@ -229,12 +253,35 @@ public class WmsMoveDetail extends BaseEntity
return activeFlag; return activeFlag;
} }
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getMoveExecuteStatus() {
return moveExecuteStatus;
}
public void setMoveExecuteStatus(String moveExecuteStatus) {
this.moveExecuteStatus = moveExecuteStatus;
}
public String getMoveExecuteStatusStr() {
return moveExecuteStatusStr;
}
public void setMoveExecuteStatusStr(String moveExecuteStatusStr) {
this.moveExecuteStatusStr = moveExecuteStatusStr;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("moveDetailId", getMoveDetailId()) .append("moveDetailId", getMoveDetailId())
.append("moveId", getMoveId()) .append("moveId", getMoveId())
.append("locationCode", getLocationCode())
.append("materialBarcode", getMaterialBarcode()) .append("materialBarcode", getMaterialBarcode())
.append("instockBatch", getInstockBatch()) .append("instockBatch", getInstockBatch())
.append("materialId", getMaterialId()) .append("materialId", getMaterialId())
@ -243,7 +290,6 @@ public class WmsMoveDetail extends BaseEntity
.append("executeStatus", getExecuteStatus()) .append("executeStatus", getExecuteStatus())
.append("executePerson", getExecutePerson()) .append("executePerson", getExecutePerson())
.append("executeTime", getExecuteTime()) .append("executeTime", getExecuteTime())
.append("moveDetailType", getMoveDetailType())
.append("machineName", getMachineName()) .append("machineName", getMachineName())
.append("createBy", getCreateBy()) .append("createBy", getCreateBy())
.append("createDate", getCreateDate()) .append("createDate", getCreateDate())

@ -1,5 +1,6 @@
package com.hw.wms.domain; package com.hw.wms.domain;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Date; import java.util.Date;
@ -71,6 +72,22 @@ public class WmsProductInstock extends BaseEntity {
@Excel(name = "入库类型(1生产入库,2移库入库,3合库入库,4出半成品库,9其他入库)") @Excel(name = "入库类型(1生产入库,2移库入库,3合库入库,4出半成品库,9其他入库)")
private String instockType; private String instockType;
/** 成品ID */
@Excel(name = "成品ID")
private Long productId;
/** 成品批次,等于成品条码 */
@Excel(name = "成品批次,等于成品条码")
private String productBatch;
/** 入库数量 */
@Excel(name = "入库数量")
private BigDecimal instockAmount;
/** 托盘RFID代码 */
@Excel(name = "托盘RFID代码")
private String palletInfoCode;
/** /**
* *
*/ */
@ -219,6 +236,38 @@ public class WmsProductInstock extends BaseEntity {
return instockType; return instockType;
} }
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
public String getProductBatch() {
return productBatch;
}
public void setProductBatch(String productBatch) {
this.productBatch = productBatch;
}
public BigDecimal getInstockAmount() {
return instockAmount;
}
public void setInstockAmount(BigDecimal instockAmount) {
this.instockAmount = instockAmount;
}
public String getPalletInfoCode() {
return palletInfoCode;
}
public void setPalletInfoCode(String palletInfoCode) {
this.palletInfoCode = palletInfoCode;
}
public void setApplyReason(String applyReason) { public void setApplyReason(String applyReason) {
this.applyReason = applyReason; this.applyReason = applyReason;
} }

@ -1,5 +1,6 @@
package com.hw.wms.domain; package com.hw.wms.domain;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Date; import java.util.Date;
@ -44,7 +45,7 @@ public class WmsRawOutstock extends BaseEntity {
/** /**
* ID,pd_base_order_infoorder_id * ID,pd_base_order_infoorder_id
*/ */
@Excel(name = "工单ID,关联pd_base_order_info的order_id") @Excel(name = "销售订单ID")
private Long orderId; private Long orderId;
/** /**
@ -71,6 +72,22 @@ public class WmsRawOutstock extends BaseEntity {
@Excel(name = "成品ID,关联物料表物料id") @Excel(name = "成品ID,关联物料表物料id")
private Long productId; private Long productId;
/** 物料批次 */
@Excel(name = "物料条码")
private String materialBatch;
/** 托盘RFID代码 */
@Excel(name = "托盘RFID代码")
private String palletInfoCode;
/** 出库数量 */
@Excel(name = "出库数量")
private BigDecimal outstockAmount;
/** 出库目的地 */
@Excel(name = "出库目的地")
private String endStationCode;
/** /**
* (0,1,2,3) * (0,1,2,3)
*/ */
@ -233,6 +250,38 @@ public class WmsRawOutstock extends BaseEntity {
return productId; return productId;
} }
public String getMaterialBatch() {
return materialBatch;
}
public void setMaterialBatch(String materialBatch) {
this.materialBatch = materialBatch;
}
public String getPalletInfoCode() {
return palletInfoCode;
}
public void setPalletInfoCode(String palletInfoCode) {
this.palletInfoCode = palletInfoCode;
}
public BigDecimal getOutstockAmount() {
return outstockAmount;
}
public void setOutstockAmount(BigDecimal outstockAmount) {
this.outstockAmount = outstockAmount;
}
public String getEndStationCode() {
return endStationCode;
}
public void setEndStationCode(String endStationCode) {
this.endStationCode = endStationCode;
}
public void setOperationType(String operationType) { public void setOperationType(String operationType) {
this.operationType = operationType; this.operationType = operationType;
} }

@ -1,21 +0,0 @@
package com.hw.wms.domain.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class WmsMoveMergeVo {
//仓库ID
@NotNull(message="仓库ID必须输入")
private Long warehouseId;
@NotBlank(message="原库位必须输入")
private String oriLocationCode;
@NotBlank(message="目标库位必须输入")
private String targetLocationCode;
}

@ -0,0 +1,36 @@
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: WmsMoveMergeVo
* @Author : xins
* @Date :2024-03-25 9:58
* @Version :1.0
*/
@Data
public class WmsMoveVo {
@NotBlank(message="库位编码必须输入")
private String locationCode;
@NotBlank(message="物料条码必须输入")
private String materialBarcode;
//数量
@NotNull(message="数量必须输入")
private BigDecimal applyQty;
//数量
@NotNull(message="moveId必须输入")
private Long moveId;
@NotBlank(message="类型必须输入")
private String moveType;
}

@ -0,0 +1,85 @@
package com.hw.wms.mapper;
import java.util.List;
import com.hw.wms.domain.WmsMoveDetail;
import org.apache.ibatis.annotations.Param;
/**
* Mapper
*
* @author xins
* @date 2024-03-25
*/
public interface WmsMoveDetailMapper
{
/**
*
*
* @param moveDetailId
* @return
*/
public WmsMoveDetail selectWmsMoveDetailByMoveDetailId(Long moveDetailId);
/**
*
*
* @param wmsMoveDetail
* @return
*/
public List<WmsMoveDetail> selectWmsMoveDetailList(WmsMoveDetail wmsMoveDetail);
/**
*
*
* @param wmsMoveDetail
* @return
*/
public int insertWmsMoveDetail(WmsMoveDetail wmsMoveDetail);
/**
*
*
* @param wmsMoveDetail
* @return
*/
public int updateWmsMoveDetail(WmsMoveDetail wmsMoveDetail);
/**
*
*
* @param moveDetailId
* @return
*/
public int deleteWmsMoveDetailByMoveDetailId(Long moveDetailId);
/**
*
*
* @param moveDetailIds
* @return
*/
public int deleteWmsMoveDetailByMoveDetailIds(Long[] moveDetailIds);
/**
*
*
* @param moveId
* @param batchCode
* @return
*/
public WmsMoveDetail selectWmsMoveDetailByMoveIdAndBatchCode(@Param("moveId") Long moveId,
@Param("batchCode") String batchCode);
/**
* ,join material
*
* @param wmsMoveDetail
* @return
*/
public List<WmsMoveDetail> selectWmsMoveDetailJoinList(WmsMoveDetail wmsMoveDetail);
}

@ -84,4 +84,17 @@ public interface WmsMoveMapper
* @return * @return
*/ */
public int deleteWmsMoveDetailByMoveId(Long moveId); public int deleteWmsMoveDetailByMoveId(Long moveId);
/**
* Join warehouse
*
* @param wmsMove
* @return
*/
public List<WmsMove> selectWmsMoveJoinList(WmsMove wmsMove);
} }

@ -1,6 +1,6 @@
package com.hw.wms.service; package com.hw.wms.service;
import com.hw.wms.domain.vo.WmsMoveMergeVo; import com.hw.wms.domain.vo.WmsMoveVo;
/** /**
* @Description: Service * @Description: Service
@ -16,5 +16,5 @@ public interface IWmsMoveMergeService {
* @param wmsMoveMergeVo * @param wmsMoveMergeVo
* @return * @return
*/ */
public int manualMove(WmsMoveMergeVo wmsMoveMergeVo, String manualMergeType); public int manualMove(WmsMoveVo wmsMoveMergeVo, String manualMergeType);
} }

@ -2,6 +2,8 @@ package com.hw.wms.service;
import java.util.List; import java.util.List;
import com.hw.wms.domain.WmsMove; import com.hw.wms.domain.WmsMove;
import com.hw.wms.domain.WmsMoveDetail;
import com.hw.wms.domain.vo.WmsMoveVo;
/** /**
* Service * Service
@ -58,4 +60,46 @@ public interface IWmsMoveService
* @return * @return
*/ */
public int deleteWmsMoveByMoveId(Long moveId); public int deleteWmsMoveByMoveId(Long moveId);
/**
* Join warehouse
*
* @param wmsMove
* @return
*/
public List<WmsMove> selectWmsMoveJoinList(WmsMove wmsMove);
/**
*
* @param wmsMove
* @return
*/
public int applyMove(WmsMove wmsMove);
/**
* join material
* @param wmsMoveDetail
* @return
*/
public List<WmsMoveDetail> selectWmsMoveDetailJoinList(WmsMoveDetail wmsMoveDetail);
/**
*
* @param wmsMoveVo
* @return
*/
public int moveOutstock(WmsMoveVo wmsMoveVo);
/**
*
* @param wmsMoveVo
* @return
*/
public int moveInstock(WmsMoveVo wmsMoveVo);
} }

@ -2,6 +2,7 @@ package com.hw.wms.service;
import java.util.List; import java.util.List;
import com.hw.wms.domain.WmsProductOutstock; import com.hw.wms.domain.WmsProductOutstock;
import com.hw.wms.domain.vo.WmsProductOutstockConfirmVo;
/** /**
* Service * Service
@ -74,4 +75,12 @@ public interface IWmsProductOutstockService
* @return * @return
*/ */
public WmsProductOutstock selectWmsProductOutstockJoinByOutstockId(Long productOutstockId); public WmsProductOutstock selectWmsProductOutstockJoinByOutstockId(Long productOutstockId);
/**
*
* @param wmsProductOutstockConfirmVo
* @return
*/
public int finalConfirmProductOutstock(WmsProductOutstockConfirmVo wmsProductOutstockConfirmVo);
} }

@ -1,10 +1,8 @@
package com.hw.wms.service.impl; package com.hw.wms.service.impl;
import com.hw.common.core.constant.WmsConstants;
import com.hw.wms.domain.WmsBaseWarehouse;
import com.hw.wms.domain.WmsProductStock; import com.hw.wms.domain.WmsProductStock;
import com.hw.wms.domain.WmsRawStock; import com.hw.wms.domain.WmsRawStock;
import com.hw.wms.domain.vo.WmsMoveMergeVo; import com.hw.wms.domain.vo.WmsMoveVo;
import com.hw.wms.mapper.*; import com.hw.wms.mapper.*;
import com.hw.wms.service.IWmsMoveMergeService; import com.hw.wms.service.IWmsMoveMergeService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -47,12 +45,12 @@ public class WmsMoveMergeServiceImpl implements IWmsMoveMergeService {
* @return * @return
*/ */
@Override @Override
public int manualMove(WmsMoveMergeVo wmsMoveMergeVo,String manualMergeType){ public int manualMove(WmsMoveVo wmsMoveMergeVo, String manualMergeType){
Long warehouseId = wmsMoveMergeVo.getWarehouseId(); // Long warehouseId = wmsMoveMergeVo.getWarehouseId();
String oriLocationCode = wmsMoveMergeVo.getOriLocationCode(); // String oriLocationCode = wmsMoveMergeVo.getOriLocationCode();
String targetLocationCode = wmsMoveMergeVo.getTargetLocationCode(); // String targetLocationCode = wmsMoveMergeVo.getTargetLocationCode();
WmsBaseWarehouse warehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseWithLocationByWarehouseId(warehouseId); // WmsBaseWarehouse warehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseWithLocationByWarehouseId(warehouseId);
String warehouseInstockType = warehouse.getWarehouseInstockType(); // String warehouseInstockType = warehouse.getWarehouseInstockType();
//仓库类型为人工仓库 //仓库类型为人工仓库
@ -77,12 +75,12 @@ public class WmsMoveMergeServiceImpl implements IWmsMoveMergeService {
* @param wmsMoveMergeVo * @param wmsMoveMergeVo
* @return * @return
*/ */
public int manualMerge(WmsMoveMergeVo wmsMoveMergeVo){ public int manualMerge(WmsMoveVo wmsMoveMergeVo){
Long warehouseId = wmsMoveMergeVo.getWarehouseId(); // Long warehouseId = wmsMoveMergeVo.getWarehouseId();
String oriLocationCode = wmsMoveMergeVo.getOriLocationCode(); // String oriLocationCode = wmsMoveMergeVo.getOriLocationCode();
String targetLocationCode = wmsMoveMergeVo.getTargetLocationCode(); // String targetLocationCode = wmsMoveMergeVo.getTargetLocationCode();
WmsBaseWarehouse warehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseWithLocationByWarehouseId(warehouseId); // WmsBaseWarehouse warehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseWithLocationByWarehouseId(warehouseId);
String warehouseInstockType = warehouse.getWarehouseInstockType(); // String warehouseInstockType = warehouse.getWarehouseInstockType();
return 1; return 1;

@ -1,16 +1,35 @@
package com.hw.wms.service.impl; package com.hw.wms.service.impl;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import com.hw.common.core.constant.MesConstants;
import com.hw.common.core.constant.SecurityConstants;
import com.hw.common.core.constant.WmsConstants;
import com.hw.common.core.domain.R;
import com.hw.common.core.exception.ServiceException;
import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.RemoteMesService;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.wms.domain.*;
import com.hw.wms.domain.vo.WmsMoveVo;
import com.hw.wms.mapper.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import com.hw.common.core.utils.StringUtils; import com.hw.common.core.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.hw.wms.domain.WmsMoveDetail;
import com.hw.wms.mapper.WmsMoveMapper;
import com.hw.wms.domain.WmsMove;
import com.hw.wms.service.IWmsMoveService; import com.hw.wms.service.IWmsMoveService;
import javax.annotation.Resource;
/** /**
* Service * Service
* *
@ -18,11 +37,28 @@ import com.hw.wms.service.IWmsMoveService;
* @date 2024-01-09 * @date 2024-01-09
*/ */
@Service @Service
public class WmsMoveServiceImpl implements IWmsMoveService public class WmsMoveServiceImpl implements IWmsMoveService {
{
@Autowired @Autowired
private WmsMoveMapper wmsMoveMapper; private WmsMoveMapper wmsMoveMapper;
@Autowired
private WmsMoveDetailMapper wmsMoveDetailMapper;
@Autowired
private WmsBaseLocationMapper wmsBaseLocationMapper;
@Autowired
private WmsBaseWarehouseMapper wmsBaseWarehouseMapper;
@Autowired
private WmsRawStockMapper wmsRawStockMapper;
@Autowired
private WmsProductStockMapper wmsProductStockMapper;
@Resource
private RemoteMesService remoteMesService;
/** /**
* *
* *
@ -30,8 +66,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService
* @return * @return
*/ */
@Override @Override
public WmsMove selectWmsMoveByMoveId(Long moveId) public WmsMove selectWmsMoveByMoveId(Long moveId) {
{
return wmsMoveMapper.selectWmsMoveByMoveId(moveId); return wmsMoveMapper.selectWmsMoveByMoveId(moveId);
} }
@ -42,8 +77,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService
* @return * @return
*/ */
@Override @Override
public List<WmsMove> selectWmsMoveList(WmsMove wmsMove) public List<WmsMove> selectWmsMoveList(WmsMove wmsMove) {
{
return wmsMoveMapper.selectWmsMoveList(wmsMove); return wmsMoveMapper.selectWmsMoveList(wmsMove);
} }
@ -55,8 +89,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService
*/ */
@Transactional @Transactional
@Override @Override
public int insertWmsMove(WmsMove wmsMove) public int insertWmsMove(WmsMove wmsMove) {
{
int rows = wmsMoveMapper.insertWmsMove(wmsMove); int rows = wmsMoveMapper.insertWmsMove(wmsMove);
insertWmsMoveDetail(wmsMove); insertWmsMoveDetail(wmsMove);
return rows; return rows;
@ -70,8 +103,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService
*/ */
@Transactional @Transactional
@Override @Override
public int updateWmsMove(WmsMove wmsMove) public int updateWmsMove(WmsMove wmsMove) {
{
wmsMoveMapper.deleteWmsMoveDetailByMoveId(wmsMove.getMoveId()); wmsMoveMapper.deleteWmsMoveDetailByMoveId(wmsMove.getMoveId());
insertWmsMoveDetail(wmsMove); insertWmsMoveDetail(wmsMove);
return wmsMoveMapper.updateWmsMove(wmsMove); return wmsMoveMapper.updateWmsMove(wmsMove);
@ -85,8 +117,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService
*/ */
@Transactional @Transactional
@Override @Override
public int deleteWmsMoveByMoveIds(Long[] moveIds) public int deleteWmsMoveByMoveIds(Long[] moveIds) {
{
wmsMoveMapper.deleteWmsMoveDetailByMoveIds(moveIds); wmsMoveMapper.deleteWmsMoveDetailByMoveIds(moveIds);
return wmsMoveMapper.deleteWmsMoveByMoveIds(moveIds); return wmsMoveMapper.deleteWmsMoveByMoveIds(moveIds);
} }
@ -99,8 +130,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService
*/ */
@Transactional @Transactional
@Override @Override
public int deleteWmsMoveByMoveId(Long moveId) public int deleteWmsMoveByMoveId(Long moveId) {
{
wmsMoveMapper.deleteWmsMoveDetailByMoveId(moveId); wmsMoveMapper.deleteWmsMoveDetailByMoveId(moveId);
return wmsMoveMapper.deleteWmsMoveByMoveId(moveId); return wmsMoveMapper.deleteWmsMoveByMoveId(moveId);
} }
@ -110,22 +140,618 @@ public class WmsMoveServiceImpl implements IWmsMoveService
* *
* @param wmsMove * @param wmsMove
*/ */
public void insertWmsMoveDetail(WmsMove wmsMove) public void insertWmsMoveDetail(WmsMove wmsMove) {
{
List<WmsMoveDetail> wmsMoveDetailList = wmsMove.getWmsMoveDetailList(); List<WmsMoveDetail> wmsMoveDetailList = wmsMove.getWmsMoveDetailList();
Long moveId = wmsMove.getMoveId(); Long moveId = wmsMove.getMoveId();
if (StringUtils.isNotNull(wmsMoveDetailList)) if (StringUtils.isNotNull(wmsMoveDetailList)) {
{
List<WmsMoveDetail> list = new ArrayList<WmsMoveDetail>(); List<WmsMoveDetail> list = new ArrayList<WmsMoveDetail>();
for (WmsMoveDetail wmsMoveDetail : wmsMoveDetailList) for (WmsMoveDetail wmsMoveDetail : wmsMoveDetailList) {
{
wmsMoveDetail.setMoveId(moveId); wmsMoveDetail.setMoveId(moveId);
list.add(wmsMoveDetail); list.add(wmsMoveDetail);
} }
if (list.size() > 0) if (list.size() > 0) {
{
wmsMoveMapper.batchWmsMoveDetail(list); wmsMoveMapper.batchWmsMoveDetail(list);
} }
} }
} }
/**
* Join warehouse
*
* @param wmsMove
* @return
*/
@Override
public List<WmsMove> selectWmsMoveJoinList(WmsMove wmsMove) {
return wmsMoveMapper.selectWmsMoveJoinList(wmsMove);
}
/**
*
*
* @param wmsMove
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int applyMove(WmsMove wmsMove) {
String oriLocationCode = wmsMove.getOriLocationCode();
String targetLocationCode = wmsMove.getTargetLocationCode();
if (oriLocationCode.equals(targetLocationCode)) {
throw new ServiceException("原库位与目标库位不能相同");
}
WmsBaseLocation oriLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(oriLocationCode);
if (oriLocation == null) {
throw new ServiceException("原库位不存在");
}
String oriLocationStatus = oriLocation.getLocationStatus();
if (!oriLocationStatus.equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)) {
throw new ServiceException("原库位已经锁定,不能进行移库");
}
WmsBaseLocation targetLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(targetLocationCode);
if (targetLocation == null) {
throw new ServiceException("目标库位不存在");
}
String targetLocationStatus = targetLocation.getLocationStatus();
if (!targetLocationStatus.equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)) {
throw new ServiceException("目标库位已经锁定,不能进行移库");
}
if (!oriLocation.getWarehouseId().equals(targetLocation.getWarehouseId())) {
throw new ServiceException("原库位和目标库位需为一个仓库");
}
WmsBaseWarehouse baseWareHouse = wmsBaseWarehouseMapper.
selectWmsBaseWarehouseByWarehouseId(wmsMove.getWarehouseId());
String warehouseInstockType = baseWareHouse.getWarehouseInstockType();
List<WmsMoveDetail> toInsertedMoveDetails = new ArrayList<>();
if (warehouseInstockType.equals(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_RAW)) {//如果是原材料
WmsRawStock queryRawStock = new WmsRawStock();
queryRawStock.setLocationCode(oriLocationCode);
List<WmsRawStock> wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock);
if (wmsRawStocks == null || wmsRawStocks.isEmpty()) {
throw new ServiceException("原库位无库存信息,不能进行移库");
}
List<WmsRawStock> occupyRawStocks = wmsRawStocks.stream().filter
(e -> (e.getOccupyAmount().compareTo(BigDecimal.ZERO) > 0 || e.getFrozenAmount().compareTo(BigDecimal.ZERO) > 0))
.collect(Collectors.toList());
if (occupyRawStocks != null && !occupyRawStocks.isEmpty()) {
throw new ServiceException("原库位有占用库存信息,不能进行移库");
}
//目标库位需要是空库位
WmsRawStock queryTargetRawStock = new WmsRawStock();
queryTargetRawStock.setLocationCode(targetLocationCode);
List<WmsRawStock> targetRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryTargetRawStock);
if (targetRawStocks != null && !targetRawStocks.isEmpty()) {
throw new ServiceException("目标库位有库存,不能进行移库");
}
toInsertedMoveDetails = getMoveDetailsByRawStocks(wmsRawStocks);
} else {//如果是成品
WmsProductStock queryProductStock = new WmsProductStock();
queryProductStock.setLocationCode(oriLocationCode);
List<WmsProductStock> productStocks = wmsProductStockMapper.selectWmsProductStockInList(queryProductStock);
if (productStocks == null || productStocks.isEmpty()) {
throw new ServiceException("原库位无库存信息,不能进行移库");
}
List<WmsProductStock> occupyProductStocks = productStocks.stream().filter
(e -> (e.getOccupyAmount().compareTo(BigDecimal.ZERO) > 0 || e.getFrozenAmount().compareTo(BigDecimal.ZERO) > 0))
.collect(Collectors.toList());
if (occupyProductStocks != null && !occupyProductStocks.isEmpty()) {
throw new ServiceException("原库位有占用库存信息,不能进行移库");
}
//目标库位需要是空库位
WmsProductStock queryTargetProductStock = new WmsProductStock();
queryTargetProductStock.setLocationCode(targetLocationCode);
List<WmsProductStock> targetProductStocks = wmsProductStockMapper.selectWmsProductStockInList(queryTargetProductStock);
if (targetProductStocks != null && !targetProductStocks.isEmpty()) {
throw new ServiceException("目标库位有库存,不能进行移库");
}
toInsertedMoveDetails = getMoveDetailsByProductStocks(productStocks);
}
Date currentDate = new Date();
String userName = SecurityUtils.getUsername();
oriLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MOVE_LOCK);
oriLocation.setUpdateTime(currentDate);
oriLocation.setUpdateBy(userName);
wmsBaseLocationMapper.updateWmsBaseLocation(oriLocation);
targetLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_MOVE_LOCK);
targetLocation.setUpdateTime(currentDate);
targetLocation.setUpdateBy(userName);
wmsBaseLocationMapper.updateWmsBaseLocation(targetLocation);
wmsMove.setTaskCode(Seq.getId(Seq.wmsMoveSeqType, Seq.wmsMoveSeqCode));
wmsMove.setOperationType(WmsConstants.WMS_OPERATION_TYPE_MANUAL);
wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL);
wmsMove.setMoveType(WmsConstants.WMS_MOVEMERGE_TYPE_MOVE);
wmsMove.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS);
wmsMove.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE);
wmsMove.setApplyBy(userName);
wmsMove.setApplyDate(currentDate);
int rows = wmsMoveMapper.insertWmsMove(wmsMove);
batchInsertMoveDetails(toInsertedMoveDetails, wmsMove.getMoveId(), userName, currentDate);
return rows;
}
public List<WmsMoveDetail> getMoveDetailsByRawStocks(List<WmsRawStock> wmsRawStocks) {
List<WmsMoveDetail> wmsMoveDetailList = new ArrayList<>();
wmsRawStocks.forEach(wmsRawStock -> {
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.setInstockBatch(wmsRawStock.getInstockBatch());
wmsMoveDetail.setMaterialId(wmsRawStock.getMaterialId());
wmsMoveDetail.setPlanAmount(wmsRawStock.getTotalAmount());
wmsMoveDetail.setExecuteStatus(WmsConstants.WMS_MOVE_EXECUTE_STATUS_TOEXECUTE);
wmsMoveDetailList.add(wmsMoveDetail);
});
return wmsMoveDetailList;
}
public List<WmsMoveDetail> getMoveDetailsByProductStocks(List<WmsProductStock> wmsProductStocks) {
List<WmsMoveDetail> wmsMoveDetailList = new ArrayList<>();
wmsProductStocks.forEach(wmsProductStock -> {
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.setInstockBatch(wmsProductStock.getProductBatch());
wmsMoveDetail.setMaterialId(wmsProductStock.getProductId());
wmsMoveDetail.setPlanAmount(wmsProductStock.getTotalAmount());
wmsMoveDetail.setExecuteStatus(WmsConstants.WMS_MOVE_EXECUTE_STATUS_TOEXECUTE);
wmsMoveDetailList.add(wmsMoveDetail);
});
return wmsMoveDetailList;
}
public void batchInsertMoveDetails(List<WmsMoveDetail> wmsMoveDetailList, Long moveId, String userName, Date currentDate) {
wmsMoveDetailList.forEach(moveDetail -> {
moveDetail.setMoveId(moveId);
moveDetail.setCreateBy(userName);
moveDetail.setCreateDate(currentDate);
});
wmsMoveMapper.batchWmsMoveDetail(wmsMoveDetailList);
}
/**
* join material
*
* @param wmsMoveDetail
* @return
*/
@Override
public List<WmsMoveDetail> selectWmsMoveDetailJoinList(WmsMoveDetail wmsMoveDetail) {
return wmsMoveDetailMapper.selectWmsMoveDetailJoinList(wmsMoveDetail);
}
/**
*
*
* @param wmsMoveVo
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int moveOutstock(WmsMoveVo wmsMoveVo) {
Long moveId = wmsMoveVo.getMoveId();
String materialBarcode = wmsMoveVo.getMaterialBarcode();
String locationCode = wmsMoveVo.getLocationCode();
BigDecimal applyQty = wmsMoveVo.getApplyQty();
if (applyQty.compareTo(BigDecimal.ZERO) <= 0) {
throw new ServiceException("出库数量需大于0");
}
R<MesBaseBarcodeInfo> baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER);
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData();
if (baseBarcodeInfo == null) {
throw new ServiceException("物料编码有误");
}
WmsBaseLocation oriLocation = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode);
if (oriLocation == null) {
throw new ServiceException("库位编码有误");
}
String userName = SecurityUtils.getUsername();
Date currentDate = new Date();
String barcodeType = baseBarcodeInfo.getBarcodeType();
if (barcodeType.equals(MesConstants.MES_BARCODE_TYPE_RAW)) {//如果是原材料
moveOutUpdateRawStock(locationCode, baseBarcodeInfo.getBatchCode(), applyQty, userName, currentDate);
} else {//如果是成品
moveOutUpdateProductStock(locationCode, baseBarcodeInfo.getBatchCode(), applyQty, userName, currentDate);
}
WmsMoveDetail queryMoveDetail = new WmsMoveDetail();
queryMoveDetail.setMoveId(moveId);
List<WmsMoveDetail> wmsMoveDetailList = wmsMoveDetailMapper.selectWmsMoveDetailList(queryMoveDetail);
if (wmsMoveDetailList == null || wmsMoveDetailList.isEmpty()) {
throw new ServiceException("没有此移库信息");
}
Map<String, WmsMoveDetail> moveDetailMap = wmsMoveDetailList.stream().
collect(Collectors.toMap(WmsMoveDetail::getInstockBatch, wmsMoveDetail -> wmsMoveDetail));
WmsMoveDetail moveDetail = moveDetailMap.get(baseBarcodeInfo.getBatchCode());
if (moveDetail == null) {
throw new ServiceException("没有此移库信息");
}
String executeStatus = moveDetail.getExecuteStatus();
BigDecimal planAmount = moveDetail.getPlanAmount();
BigDecimal realAmount = moveDetail.getRealAmount() == null ? BigDecimal.ZERO : moveDetail.getRealAmount();
BigDecimal remainingAmount = planAmount.subtract(realAmount);
if (executeStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH)) {
throw new ServiceException("已经移库出库完成,无需再出库");
}
if (executeStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH)) {
throw new ServiceException("已经移库入库完成,无需再出库");
}
if (applyQty.compareTo(remainingAmount) > 0) {
throw new ServiceException("数量不能大于" + remainingAmount);
}
WmsMove wmsMove = wmsMoveMapper.selectWmsMoveByMoveId(moveId);
if(!locationCode.equals(wmsMove.getOriLocationCode())){
throw new ServiceException("库位错误");
}
String moveExecuteStatus = WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH;
if(moveDetail.getExecuteStatus().equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_TOEXECUTE)){
moveDetail.setExecuteTime(currentDate);
moveDetail.setExecutePerson(userName);
}
if (applyQty.compareTo(remainingAmount) < 0) {
moveDetail.setRealAmount(applyQty.subtract(realAmount));
moveDetail.setExecuteStatus(WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING);
} else {
moveDetail.setRealAmount(applyQty.subtract(realAmount));
moveDetail.setExecuteStatus(WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH);
for (WmsMoveDetail wmsMoveDetail : wmsMoveDetailList) {
if (!wmsMoveDetail.getMoveDetailId().equals(moveDetail.getMoveDetailId())) {
if (wmsMoveDetail.getExecuteStatus().equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_TOEXECUTE)
|| wmsMoveDetail.getExecuteStatus().equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING)) {
moveExecuteStatus = WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING;
}
}
}
//解锁库位
if (moveExecuteStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH)){
oriLocation.setLocationStatus(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL);
oriLocation.setUpdateBy(userName);
oriLocation.setUpdateTime(currentDate);
wmsBaseLocationMapper.updateWmsBaseLocation(oriLocation);
}
}
wmsMoveDetailMapper.updateWmsMoveDetail(moveDetail);
if (!wmsMove.getExecuteStatus().equals(moveExecuteStatus)) {
if (wmsMove.getExecuteStatus().equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_TOEXECUTE)) {
wmsMove.setBeginTime(currentDate);
}
wmsMove.setExecuteStatus(moveExecuteStatus);
wmsMoveMapper.updateWmsMove(wmsMove);
}
return 1;
}
public void moveOutUpdateRawStock(String locationCode, String batchCode, BigDecimal applyQty,
String userName, Date currentDate) {
WmsRawStock wmsRawStock = wmsRawStockMapper.selectRawStockByLocationAndBatch(locationCode, batchCode);
if (wmsRawStock == null) {
throw new ServiceException("原库位无库存信息,不能进行移库");
}
BigDecimal totalAmount = wmsRawStock.getTotalAmount() == null ? BigDecimal.ZERO : wmsRawStock.getTotalAmount();
// BigDecimal occupyAmount = wmsRawStock.getOccupyAmount() == null ? BigDecimal.ZERO : wmsRawStock.getOccupyAmount();//占用的不能移库
// BigDecimal frozenAmount = wmsRawStock.getFrozenAmount() == null ? BigDecimal.ZERO : wmsRawStock.getFrozenAmount();//冻结的不能移库
// BigDecimal availableAmount = totalAmount.subtract(occupyAmount).subtract(frozenAmount);
if (applyQty.compareTo(totalAmount) > 0) {
throw new ServiceException("移库出库数量不能大于" + totalAmount);
}
totalAmount = totalAmount.subtract(applyQty);
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
wmsRawStockMapper.deleteWmsRawStockByRawStockId(wmsRawStock.getRawStockId());
} else {
wmsRawStock.setTotalAmount(totalAmount);
wmsRawStock.setUpdateBy(userName);
wmsRawStock.setUpdateDate(currentDate);
wmsRawStockMapper.updateWmsRawStock(wmsRawStock);
}
}
public void moveOutUpdateProductStock(String locationCode, String batchCode, BigDecimal applyQty,
String userName, Date currentDate) {
WmsProductStock wmsProductStock = wmsProductStockMapper.selectProductStockByBatch(batchCode);
if (wmsProductStock == null) {
throw new ServiceException("原库位无库存信息,不能进行移库");
}
BigDecimal totalAmount = wmsProductStock.getTotalAmount() == null ? BigDecimal.ZERO : wmsProductStock.getTotalAmount();
// BigDecimal occupyAmount = wmsProductStock.getOccupyAmount() == null ? BigDecimal.ZERO : wmsProductStock.getOccupyAmount();//占用的不能移库
// BigDecimal frozenAmount = wmsProductStock.getFrozenAmount() == null ? BigDecimal.ZERO : wmsProductStock.getFrozenAmount();//冻结的不能移库
// BigDecimal availableAmount = totalAmount.subtract(occupyAmount).subtract(frozenAmount);
if (applyQty.compareTo(totalAmount) > 0) {
throw new ServiceException("移库出库数量不能大于" + totalAmount);
}
totalAmount = totalAmount.subtract(applyQty);
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
wmsProductStockMapper.deleteWmsProductStockByProductStockId(wmsProductStock.getProductStockId());
} else {
wmsProductStock.setTotalAmount(totalAmount);
wmsProductStock.setUpdateBy(userName);
wmsProductStock.setUpdateDate(currentDate);
wmsProductStockMapper.updateWmsProductStock(wmsProductStock);
}
}
/**
*
*
* @param wmsMoveVo
* @return
*/
public int moveInstock(WmsMoveVo wmsMoveVo) {
Long moveId = wmsMoveVo.getMoveId();
String materialBarcode = wmsMoveVo.getMaterialBarcode();
String locationCode = wmsMoveVo.getLocationCode();
BigDecimal applyQty = wmsMoveVo.getApplyQty();
if (applyQty.compareTo(BigDecimal.ZERO) <= 0) {
throw new ServiceException("入库数量需大于0");
}
R<MesBaseBarcodeInfo> baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER);
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData();
if (baseBarcodeInfo == null) {
throw new ServiceException("物料编码有误");
}
WmsBaseLocation location = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode);
if (location == null) {
throw new ServiceException("库位编码有误");
}
String userName = SecurityUtils.getUsername();
Date currentDate = new Date();
String barcodeType = baseBarcodeInfo.getBarcodeType();
String moveExecuteStatus = "";
WmsMoveDetail queryMoveDetail = new WmsMoveDetail();
queryMoveDetail.setMoveId(moveId);
List<WmsMoveDetail> moveDetails = wmsMoveDetailMapper.selectWmsMoveDetailList(queryMoveDetail);
if (moveDetails == null || moveDetails.isEmpty()) {
throw new ServiceException("没有移库出库记录");
}
Map<String, WmsMoveDetail> moveDetailMap = moveDetails.stream().
collect(Collectors.toMap(WmsMoveDetail::getMaterialBarcode, wmsMoveDetail -> wmsMoveDetail));
WmsMoveDetail wmsMoveDetail = moveDetailMap.get(materialBarcode);
if (wmsMoveDetail == null) {
throw new ServiceException("没有移库出库记录");
}
moveDetailMap.remove(wmsMoveDetail);
if (wmsMoveDetail.getPlanAmount().compareTo(applyQty) != 0) {
throw new ServiceException("入库数量需等于" + wmsMoveDetail.getPlanAmount());
}
if (barcodeType.equals(MesConstants.MES_BARCODE_TYPE_RAW)) {//如果是原材料
// moveExecuteStatus = moveInUpdateRawStock(Map < String, WmsMoveDetail > moveDetailMap);
} else {//如果是成品
// moveExecuteStatus = updateProductStock(locationCode, baseBarcodeInfo.getBatchCode(), applyQty, userName, currentDate, location);
}
if (moveExecuteStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH)) {
WmsMove wmsMove = wmsMoveMapper.selectWmsMoveByMoveId(moveId);
wmsMove.setEndTime(currentDate);
wmsMove.setExecuteStatus(moveExecuteStatus);
wmsMoveMapper.updateWmsMove(wmsMove);
}
wmsMoveDetail.setExecuteStatus(WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH);
wmsMoveDetail.setExecuteEndTime(currentDate);
wmsMoveDetail.setUpdateBy(userName);
wmsMoveDetail.setUpdateDate(currentDate);
return wmsMoveDetailMapper.updateWmsMoveDetail(wmsMoveDetail);
}
public String moveInUpdateRawStock(Map<String, WmsMoveDetail> moveDetailMap, String locationCode,
MesBaseBarcodeInfo mesBaseBarcodeInfo) {
String moveExecuteStatus = WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH;
//先判断是否已全部出库完成
if (moveDetailMap != null || !moveDetailMap.isEmpty()) {
for (Map.Entry<String, WmsMoveDetail> wmsMoveDetailEntry : moveDetailMap.entrySet()) {
WmsMoveDetail wmsMoveDetail = wmsMoveDetailEntry.getValue();
if (!wmsMoveDetail.getExecuteStatus().equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH)) {
// moveExecuteStatus = WmsConstants.
}
}
}
String batchCode = mesBaseBarcodeInfo.getBatchCode();
WmsRawStock rawStock = wmsRawStockMapper.selectRawStockByLocationAndBatch(locationCode, batchCode);
if (rawStock != null) {
// rawStock.setTotalAmount();
// rawStock.setUpdateDate();
// rawStock.setUpdateBy();
wmsRawStockMapper.updateWmsRawStock(rawStock);
} else {
rawStock = new WmsRawStock();
// rawStock.setTotalAmount();
// rawStock.setLocationCode();
// rawStock.setInstockBatch();
// rawStock.setWarehouseId();
// rawStock.setWarehouseFloor();
// rawStock.setStockType();
// rawStock.setMaterialId();
// rawStock.setInstockDate();//条码中的入库时间
// rawStock.setLastOutstockTime();
// rawStock.setQualityStatus();
// rawStock.setCompleteFlag();
// rawStock.setCreateDate();
// rawStock.setCreateBy();
wmsRawStockMapper.insertWmsRawStock(rawStock);
}
return moveExecuteStatus;
}
/**
*
*
* @param wmsMoveVo
* @return
*/
/* @Override
@Transactional(rollbackFor = Exception.class)
public int moveOutstock(WmsMoveVo wmsMoveVo) {
String materialBarcode = wmsMoveVo.getMaterialBarcode();
String locationCode = wmsMoveVo.getLocationCode();
BigDecimal applyQty = wmsMoveVo.getApplyQty();
if (applyQty.compareTo(BigDecimal.ZERO) <= 0) {
throw new ServiceException("出库数量需大于0");
}
R<MesBaseBarcodeInfo> baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER);
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData();
if (baseBarcodeInfo == null) {
throw new ServiceException("物料编码有误");
}
String batchFlag = baseBarcodeInfo.getBatchFlag();
if (!batchFlag.equals(MesConstants.IS_BATCH)) {
if (applyQty.compareTo(BigDecimal.ONE) > 0) {
throw new ServiceException("出库数量需等于1");
}
}
WmsBaseLocation location = wmsBaseLocationMapper.selectWmsBaseLocationByLocationCode(locationCode);
if (location == null) {
throw new ServiceException("库位编码有误");
}
String userName = SecurityUtils.getUsername();
Date currentDate = new Date();
String barcodeType = baseBarcodeInfo.getBarcodeType();
if (barcodeType.equals(MesConstants.MES_BARCODE_TYPE_RAW)) {//如果是原材料
WmsRawStock wmsRawStock = wmsRawStockMapper.selectRawStockByLocationAndBatch(locationCode, baseBarcodeInfo.getBatchCode());
if (wmsRawStock == null) {
throw new ServiceException("无库存信息");
}
BigDecimal totalAmount = wmsRawStock.getTotalAmount() == null ? BigDecimal.ZERO : wmsRawStock.getTotalAmount();
BigDecimal occupyAmount = wmsRawStock.getOccupyAmount() == null ? BigDecimal.ZERO : wmsRawStock.getOccupyAmount();
BigDecimal frozenAmount = wmsRawStock.getFrozenAmount() == null ? BigDecimal.ZERO : wmsRawStock.getFrozenAmount();
BigDecimal availableAmount = totalAmount.subtract(occupyAmount).subtract(frozenAmount);
if (applyQty.compareTo(availableAmount) > 0) {
throw new ServiceException("移库出库数量不能大于" + availableAmount);
}
totalAmount = totalAmount.subtract(applyQty);
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
wmsRawStockMapper.deleteWmsRawStockByRawStockId(wmsRawStock.getRawStockId());
} else {
wmsRawStock.setTotalAmount(totalAmount);
wmsRawStock.setUpdateBy(userName);
wmsRawStock.setUpdateDate(currentDate);
wmsRawStockMapper.updateWmsRawStock(wmsRawStock);
}
} else {//如果是成品
WmsProductStock wmsProductStock = wmsProductStockMapper.selectProductStockByBatch(materialBarcode);
if (wmsProductStock == null || !wmsProductStock.getLocationCode().equals(locationCode)) {
throw new ServiceException("无此库存信息");
}
BigDecimal totalAmount = wmsProductStock.getTotalAmount() == null ? BigDecimal.ZERO : wmsProductStock.getTotalAmount();
BigDecimal occupyAmount = wmsProductStock.getOccupyAmount() == null ? BigDecimal.ZERO : wmsProductStock.getOccupyAmount();
BigDecimal frozenAmount = wmsProductStock.getFrozenAmount() == null ? BigDecimal.ZERO : wmsProductStock.getFrozenAmount();
BigDecimal availableAmount = totalAmount.subtract(occupyAmount).subtract(frozenAmount);
if (applyQty.compareTo(availableAmount) > 0) {
throw new ServiceException("移库出库数量不能大于" + availableAmount);
}
totalAmount = totalAmount.subtract(applyQty);
if (totalAmount.compareTo(BigDecimal.ZERO) == 0) {
wmsProductStockMapper.deleteWmsProductStockByProductStockId(wmsProductStock.getProductStockId());
} else {
wmsProductStock.setTotalAmount(totalAmount);
wmsProductStock.setUpdateBy(userName);
wmsProductStock.setUpdateDate(currentDate);
wmsProductStockMapper.updateWmsProductStock(wmsProductStock);
}
}
WmsMoveDetail queryMoveDetail = new WmsMoveDetail();
queryMoveDetail.setMaterialBarcode(materialBarcode);
queryMoveDetail.setMoveExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_EXECUTING);//移库合库记录执行状态正在执行中的,对于已完成的可以重复移库合库
List<WmsMoveDetail> wmsMoveDetails = wmsMoveDetailMapper.selectWmsMoveDetailList(queryMoveDetail);
if (wmsMoveDetails != null && !wmsMoveDetails.isEmpty()) {
throw new ServiceException("已经有此物料信息的移库记录");
}
WmsMove wmsMove = new WmsMove();
wmsMove.setTaskCode(Seq.getId(Seq.wmsMoveSeqType, Seq.wmsMoveSeqCode));
wmsMove.setWarehouseId(location.getWarehouseId());
wmsMove.setOriLocationCode(locationCode);
wmsMove.setOperationType(WmsConstants.WMS_OPERATION_TYPE_MANUAL);
wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL);
wmsMove.setMoveType(WmsConstants.WMS_MOVEMERGE_TYPE_MOVE);
wmsMove.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS);
wmsMove.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_EXECUTING);
wmsMove.setApplyBy(userName);
wmsMove.setApplyDate(currentDate);
wmsMove.setBeginTime(currentDate);
wmsMoveMapper.insertWmsMove(wmsMove);
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.setMoveId(wmsMove.getMoveId());
wmsMoveDetail.setLocationCode(locationCode);
wmsMoveDetail.setMaterialBarcode(materialBarcode);
wmsMoveDetail.setInstockBatch(baseBarcodeInfo.getBatchCode());
wmsMoveDetail.setMaterialId(baseBarcodeInfo.getMaterialId());
wmsMoveDetail.setPlanAmount(applyQty);
wmsMoveDetail.setRealAmount(applyQty);
wmsMoveDetail.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_FINISH);
wmsMoveDetail.setExecutePerson(userName);
wmsMoveDetail.setExecuteTime(currentDate);
wmsMoveDetail.setMoveDetailType(WmsConstants.WMS_MOVE_DETAIL_TYPE_OUT);
wmsMoveDetail.setCreateBy(userName);
wmsMoveDetail.setCreateDate(currentDate);
wmsMoveDetailMapper.insertWmsMoveDetail(wmsMoveDetail);
return 1;
}*/
} }

@ -8,9 +8,11 @@ import com.hw.common.core.constant.SecurityConstants;
import com.hw.common.core.constant.WmsConstants; import com.hw.common.core.constant.WmsConstants;
import com.hw.common.core.domain.R; import com.hw.common.core.domain.R;
import com.hw.common.core.exception.ServiceException; import com.hw.common.core.exception.ServiceException;
import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.security.utils.SecurityUtils; import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.RemoteMesService; import com.hw.mes.api.RemoteMesService;
import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.wms.config.WmsConfig;
import com.hw.wms.domain.*; import com.hw.wms.domain.*;
import com.hw.wms.domain.vo.WmsProduceInstockVo; import com.hw.wms.domain.vo.WmsProduceInstockVo;
import com.hw.wms.domain.vo.WmsProductInstockVo; import com.hw.wms.domain.vo.WmsProductInstockVo;
@ -47,10 +49,12 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService {
@Autowired @Autowired
private WmsProductStockMapper wmsProductStockMapper; private WmsProductStockMapper wmsProductStockMapper;
@Autowired @Autowired
private WmsBaseLocationMapper wmsBaseLocationMapper; private WmsBaseLocationMapper wmsBaseLocationMapper;
@Autowired
private WmsConfig wmsConfig;
@Resource @Resource
private RemoteMesService remoteMesService; private RemoteMesService remoteMesService;
@ -279,8 +283,39 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService {
*/ */
@Override @Override
public int produceInstock(WmsProduceInstockVo wmsProduceInstockVo) { public int produceInstock(WmsProduceInstockVo wmsProduceInstockVo) {
String materialBarcode = wmsProduceInstockVo.getMaterialBarcode();
R<MesBaseBarcodeInfo> baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER);
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData();
if (baseBarcodeInfo == null) {
throw new ServiceException("物料编码有误");
}
return 1; WmsProductInstock queryProductInstock = new WmsProductInstock();
queryProductInstock.setProductBatch(materialBarcode);
List<WmsProductInstock> wmsProductInstocks = wmsProductInstockMapper.selectWmsProductInstockList(queryProductInstock);
if (wmsProductInstocks != null && !wmsProductInstocks.isEmpty()) {
throw new ServiceException("已经有此物料入库记录");
}
Long warehouseId = wmsConfig.getFifthSemiWarehouseId();//五楼半成品库
WmsProductInstock wmsProductInstock = new WmsProductInstock();
wmsProductInstock.setTaskCode(Seq.getId(Seq.productInstockSeqType, Seq.productInstockCode));
wmsProductInstock.setWarehouseId(warehouseId);
wmsProductInstock.setPalletInfoCode(baseBarcodeInfo.getPalletInfoCode());
wmsProductInstock.setProductType(WmsConstants.PRODUCT_STOCK_STOCK_TYPE_SEMI);
wmsProductInstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_AUTO);
wmsProductInstock.setPlanCode(baseBarcodeInfo.getPlanCode());
wmsProductInstock.setPlanDetailCode(baseBarcodeInfo.getPlanDetailCode());
wmsProductInstock.setInstockType(WmsConstants.PRODUCT_INSTOCK_INSTOCK_TYPE_PRODUCT);
wmsProductInstock.setProductId(baseBarcodeInfo.getMaterialId());
wmsProductInstock.setProductBatch(materialBarcode);
wmsProductInstock.setInstockAmount(BigDecimal.ONE);
wmsProductInstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS);
wmsProductInstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE);
wmsProductInstock.setApplyBy(SecurityUtils.getUsername());
wmsProductInstock.setApplyDate(new Date());
return wmsProductInstockMapper.insertWmsProductInstock(wmsProductInstock);
} }

@ -10,6 +10,7 @@ import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.security.utils.SecurityUtils; import com.hw.common.security.utils.SecurityUtils;
import com.hw.wms.domain.WmsBaseWarehouse; import com.hw.wms.domain.WmsBaseWarehouse;
import com.hw.wms.domain.WmsProductStock; import com.hw.wms.domain.WmsProductStock;
import com.hw.wms.domain.vo.WmsProductOutstockConfirmVo;
import com.hw.wms.mapper.WmsBaseWarehouseMapper; import com.hw.wms.mapper.WmsBaseWarehouseMapper;
import com.hw.wms.mapper.WmsProductStockMapper; import com.hw.wms.mapper.WmsProductStockMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -217,4 +218,17 @@ public class WmsProductOutstockServiceImpl implements IWmsProductOutstockService
} }
/**
*
* @param wmsProductOutstockConfirmVo
* @return
*/
@Override
public int finalConfirmProductOutstock(WmsProductOutstockConfirmVo wmsProductOutstockConfirmVo){
System.out.println("111"+wmsProductOutstockConfirmVo.getSaleorderCode());
System.out.println("3333"+wmsProductOutstockConfirmVo.getMaterialBarcode());
return 1;
}
} }

@ -1,6 +1,5 @@
package com.hw.wms.service.impl; package com.hw.wms.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.hw.common.core.constant.MesConstants; import com.hw.common.core.constant.MesConstants;
import com.hw.common.core.constant.SecurityConstants; import com.hw.common.core.constant.SecurityConstants;
@ -14,6 +13,7 @@ import com.hw.mes.api.RemoteMesService;
import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.api.domain.MesBaseMaterialInfo; import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo; import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo;
import com.hw.wms.config.WmsConfig;
import com.hw.wms.domain.*; import com.hw.wms.domain.*;
import com.hw.wms.domain.vo.*; import com.hw.wms.domain.vo.*;
import com.hw.wms.mapper.*; import com.hw.wms.mapper.*;
@ -55,9 +55,13 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
@Autowired @Autowired
private WmsBaseLocationMapper wmsBaseLocationMapper; private WmsBaseLocationMapper wmsBaseLocationMapper;
@Autowired
private WmsConfig wmsConfig;
@Autowired @Autowired
private RemoteMesService remoteMesService; private RemoteMesService remoteMesService;
/** /**
* *
* *
@ -281,7 +285,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
WmsRawOutstockDetail queryRawOutstockDetail = new WmsRawOutstockDetail(); WmsRawOutstockDetail queryRawOutstockDetail = new WmsRawOutstockDetail();
queryRawOutstockDetail.setLocationCode(locationCode); queryRawOutstockDetail.setLocationCode(locationCode);
queryRawOutstockDetail.setInstockBatch(baseBarcodeInfo.getBatchCode()); queryRawOutstockDetail.setInstockBatch(baseBarcodeInfo.getBatchCode());
queryRawOutstockDetail.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE+","+WmsConstants.WMS_EXECUTE_STATUS_EXECUTING); queryRawOutstockDetail.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_EXECUTE_STATUS_EXECUTING);
queryRawOutstockDetail.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); queryRawOutstockDetail.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS);
List<WmsRawOutstockDetail> wmsRawOutstockDetails = wmsRawOutstockDetailMapper.selectWmsRawOutstockDetailList(queryRawOutstockDetail); List<WmsRawOutstockDetail> wmsRawOutstockDetails = wmsRawOutstockDetailMapper.selectWmsRawOutstockDetailList(queryRawOutstockDetail);
WmsRawOutstockDetail wmsRawOutstockDetail; WmsRawOutstockDetail wmsRawOutstockDetail;
@ -799,6 +803,53 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
*/ */
@Override @Override
public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) { public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) {
String materialBarcode = wmsAssembleOutstockVo.getMaterialBarcode();
R<MesBaseBarcodeInfo> baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER);
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData();
if (baseBarcodeInfo == null) {
throw new ServiceException("物料编码有误");
}
String bindBarcode = baseBarcodeInfo.getBindBarcode();
WmsRawOutstock queryRawOutstock = new WmsRawOutstock();
queryRawOutstock.setMaterialBatch(bindBarcode);
List<WmsRawOutstock> wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutstock);
if (wmsRawOutstocks != null && !wmsRawOutstocks.isEmpty()) {
throw new ServiceException("已经有此物料出库记录");
}
WmsRawStock queryRawStock = new WmsRawStock();
queryRawStock.setInstockBatch(bindBarcode);
queryRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_NO);
List<WmsRawStock> wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock);
if (wmsRawStocks == null || wmsRawStocks.isEmpty()) {
throw new ServiceException("没找到库存信息");
}
WmsRawStock wmsRawStock = wmsRawStocks.get(0); //待agv出库后wcs更新库存信息需要删除库存由于是1个
WmsRawOutstock wmsRawOutstock = new WmsRawOutstock();
wmsRawOutstock.setTaskCode(Seq.getId(Seq.rawOutstockSeqType, Seq.rawOutstockSeqCode));
wmsRawOutstock.setWarehouseId(wmsRawStock.getWarehouseId());
wmsRawOutstock.setLocationCode(wmsRawStock.getLocationCode());
wmsRawOutstock.setOrderId(baseBarcodeInfo.getSaleOrderId());
wmsRawOutstock.setPlanCode(baseBarcodeInfo.getPlanCode());
wmsRawOutstock.setPlanDetailCode(baseBarcodeInfo.getPlanDetailCode());
wmsRawOutstock.setProductId(baseBarcodeInfo.getMaterialId());
wmsRawOutstock.setMaterialBatch(bindBarcode);
wmsRawOutstock.setPalletInfoCode(baseBarcodeInfo.getPalletInfoCode());//在绑定时需要在条码信息中记录托盘码
wmsRawOutstock.setOutstockAmount(BigDecimal.ONE);
wmsRawOutstock.setEndStationCode(wmsConfig.getFifthAssembleStationCode());//目标位置,五楼组装区域 todo 读配置文件获取
wmsRawOutstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_AUTO);
wmsRawOutstock.setTaskType(WmsConstants.WMS_RAW_OUTSTOCK_TASK_TYPE_PRODUCTION_SPLIT);
wmsRawOutstock.setApplyBy(SecurityUtils.getUsername());
wmsRawOutstock.setApplyDate(new Date());
wmsRawOutstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS);
wmsRawOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE);
wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock);
return 1; return 1;
} }

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hw.wms.mapper.WmsMoveDetailMapper">
<resultMap type="WmsMoveDetail" id="WmsMoveDetailResult">
<result property="moveDetailId" column="move_detail_id" />
<result property="moveId" column="move_id" />
<result property="materialBarcode" column="material_barcode" />
<result property="instockBatch" column="instock_batch" />
<result property="materialId" column="material_id" />
<result property="locationCode" column="location_code" />
<result property="planAmount" column="plan_amount" />
<result property="realAmount" column="real_amount" />
<result property="realInstockAmount" column="real_instock_amount" />
<result property="executeStatus" column="execute_status" />
<result property="executePerson" column="execute_person" />
<result property="executeTime" column="execute_time" />
<result property="executeEndTime" column="execute_end_time" />
<result property="machineName" column="machine_name" />
<result property="createBy" column="create_by" />
<result property="createDate" column="create_date" />
<result property="updateBy" column="update_by" />
<result property="updateDate" column="update_date" />
<result property="activeFlag" column="active_flag" />
<result property="materialName" column="material_name" />
</resultMap>
<sql id="selectWmsMoveDetailVo">
select move_detail_id, move_id, material_barcode, instock_batch, material_id, plan_amount, real_amount, execute_status, execute_person, execute_time, machine_name, create_by, create_date, update_by, update_date, active_flag from wms_move_detail wmd
</sql>
<select id="selectWmsMoveDetailList" parameterType="WmsMoveDetail" resultMap="WmsMoveDetailResult">
<include refid="selectWmsMoveDetailVo"/>
<where>
<if test="moveId != null "> and move_id = #{moveId}</if>
<if test="materialBarcode != null and materialBarcode != ''"> and material_barcode = #{materialBarcode}</if>
<if test="instockBatch != null and instockBatch != ''"> and instock_batch = #{instockBatch}</if>
<if test="materialId != null "> and material_id = #{materialId}</if>
<if test="planAmount != null "> and plan_amount = #{planAmount}</if>
<if test="realAmount != null "> and real_amount = #{realAmount}</if>
<if test="executeStatus != null and executeStatus != ''"> and execute_status = #{executeStatus}</if>
<if test="executePerson != null and executePerson != ''"> and execute_person = #{executePerson}</if>
<if test="machineName != null and machineName != ''"> and machine_name like concat('%', #{machineName}, '%')</if>
<if test="createDate != null "> and create_date = #{createDate}</if>
<if test="updateDate != null "> and update_date = #{updateDate}</if>
<if test="activeFlag != null and activeFlag != ''"> and active_flag = #{activeFlag}</if>
<if test="moveExecuteStatus != null and moveExecuteStatus != ''"> and exists (select 1 from wms_move wm where wm.move_id=wmd.move_id and wm.execute_status = #{moveExecuteStatusStr}</if>
<if test="moveExecuteStatusStr != null and moveExecuteStatusStr != ''"> and exists (select 1 from wms_move wm where wm.move_id=wmd.move_id and wm.execute_status in (${moveExecuteStatusStr}))</if>
</where>
</select>
<select id="selectWmsMoveDetailByMoveDetailId" parameterType="Long" resultMap="WmsMoveDetailResult">
<include refid="selectWmsMoveDetailVo"/>
where move_detail_id = #{moveDetailId}
</select>
<insert id="insertWmsMoveDetail" parameterType="WmsMoveDetail" useGeneratedKeys="true" keyProperty="moveDetailId">
insert into wms_move_detail
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="moveId != null">move_id,</if>
<if test="materialBarcode != null and materialBarcode != ''">material_barcode,</if>
<if test="instockBatch != null">instock_batch,</if>
<if test="materialId != null">material_id,</if>
<if test="planAmount != null">plan_amount,</if>
<if test="realAmount != null">real_amount,</if>
<if test="executeStatus != null and executeStatus != ''">execute_status,</if>
<if test="executePerson != null">execute_person,</if>
<if test="executeTime != null">execute_time,</if>
<if test="executeEndTime != null">execute_end_time,</if>
<if test="machineName != null">machine_name,</if>
<if test="createBy != null">create_by,</if>
<if test="createDate != null">create_date,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateDate != null">update_date,</if>
<if test="activeFlag != null">active_flag,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="moveId != null">#{moveId},</if>
<if test="materialBarcode != null and materialBarcode != ''">#{materialBarcode},</if>
<if test="instockBatch != null">#{instockBatch},</if>
<if test="materialId != null">#{materialId},</if>
<if test="planAmount != null">#{planAmount},</if>
<if test="realAmount != null">#{realAmount},</if>
<if test="executeStatus != null and executeStatus != ''">#{executeStatus},</if>
<if test="executePerson != null">#{executePerson},</if>
<if test="executeTime != null">#{executeTime},</if>
<if test="executeEndTime != null">#{executeEndTime},</if>
<if test="machineName != null">#{machineName},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createDate != null">#{createDate},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateDate != null">#{updateDate},</if>
<if test="activeFlag != null">#{activeFlag},</if>
</trim>
</insert>
<update id="updateWmsMoveDetail" parameterType="WmsMoveDetail">
update wms_move_detail
<trim prefix="SET" suffixOverrides=",">
<if test="moveId != null">move_id = #{moveId},</if>
<if test="materialBarcode != null and materialBarcode != ''">material_barcode = #{materialBarcode},</if>
<if test="instockBatch != null">instock_batch = #{instockBatch},</if>
<if test="materialId != null">material_id = #{materialId},</if>
<if test="planAmount != null">plan_amount = #{planAmount},</if>
<if test="realAmount != null">real_amount = #{realAmount},</if>
<if test="executeStatus != null and executeStatus != ''">execute_status = #{executeStatus},</if>
<if test="executePerson != null">execute_person = #{executePerson},</if>
<if test="executeTime != null">execute_time = #{executeTime},</if>
<if test="executeEndTime != null">execute_end_time = #{executeEndTime},</if>
<if test="machineName != null">machine_name = #{machineName},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createDate != null">create_date = #{createDate},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateDate != null">update_date = #{updateDate},</if>
<if test="activeFlag != null">active_flag = #{activeFlag},</if>
</trim>
where move_detail_id = #{moveDetailId}
</update>
<delete id="deleteWmsMoveDetailByMoveDetailId" parameterType="Long">
delete from wms_move_detail where move_detail_id = #{moveDetailId}
</delete>
<delete id="deleteWmsMoveDetailByMoveDetailIds" parameterType="String">
delete from wms_move_detail where move_detail_id in
<foreach item="moveDetailId" collection="array" open="(" separator="," close=")">
#{moveDetailId}
</foreach>
</delete>
<select id="selectWmsMoveDetailByMoveIdAndBatchCode" resultMap="WmsMoveDetailResult">
<include refid="selectWmsMoveDetailVo"/>
where move_id = #{moveId} and instock_batch = #{instockBatch}
</select>
<sql id="selectWmsMoveDetailJoinVo">
select wmd.move_detail_id, wmd.move_id, wmd.material_barcode, wmd.instock_batch, wmd.material_id, wmd.plan_amount, wmd.real_amount,wmd.real_instock_amount,
wmd.execute_status, wmd.execute_person, wmd.execute_time, wmd.machine_name, wmd.create_by, wmd.create_date,
mbmi.material_name
from wms_move_detail wmd left join mes_base_material_info mbmi on wmd.material_id = mbmi.material_id
</sql>
<select id="selectWmsMoveDetailJoinList" parameterType="WmsMoveDetail" resultMap="WmsMoveDetailResult">
<include refid="selectWmsMoveDetailJoinVo"/>
<where>
<if test="moveId != null "> and move_id = #{moveId}</if>
<if test="materialBarcode != null and materialBarcode != ''"> and material_barcode = #{materialBarcode}</if>
<if test="instockBatch != null and instockBatch != ''"> and instock_batch = #{instockBatch}</if>
<if test="materialId != null "> and material_id = #{materialId}</if>
<if test="planAmount != null "> and plan_amount = #{planAmount}</if>
<if test="realAmount != null "> and real_amount = #{realAmount}</if>
<if test="executeStatus != null and executeStatus != ''"> and execute_status = #{executeStatus}</if>
<if test="executePerson != null and executePerson != ''"> and execute_person = #{executePerson}</if>
<if test="machineName != null and machineName != ''"> and machine_name like concat('%', #{machineName}, '%')</if>
<if test="createDate != null "> and create_date = #{createDate}</if>
<if test="updateDate != null "> and update_date = #{updateDate}</if>
<if test="activeFlag != null and activeFlag != ''"> and active_flag = #{activeFlag}</if>
<if test="moveExecuteStatus != null and moveExecuteStatus != ''"> and exists (select 1 from wms_move wm where wm.move_id=wmd.move_id and wm.execute_status = #{moveExecuteStatusStr}</if>
<if test="moveExecuteStatusStr != null and moveExecuteStatusStr != ''"> and exists (select 1 from wms_move wm where wm.move_id=wmd.move_id and wm.execute_status in (${moveExecuteStatusStr}))</if>
</where>
</select>
</mapper>

@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateDate" column="update_date" /> <result property="updateDate" column="update_date" />
<result property="beginTime" column="begin_time" /> <result property="beginTime" column="begin_time" />
<result property="endTime" column="end_time" /> <result property="endTime" column="end_time" />
<result property="warehouseName" column="warehouse_name" />
</resultMap> </resultMap>
<resultMap id="WmsMoveWmsMoveDetailResult" type="WmsMove" extends="WmsMoveResult"> <resultMap id="WmsMoveWmsMoveDetailResult" type="WmsMove" extends="WmsMoveResult">
@ -43,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="executeStatus" column="sub_execute_status" /> <result property="executeStatus" column="sub_execute_status" />
<result property="executePerson" column="sub_execute_person" /> <result property="executePerson" column="sub_execute_person" />
<result property="executeTime" column="sub_execute_time" /> <result property="executeTime" column="sub_execute_time" />
<result property="moveDetailType" column="sub_move_detail_type" /> <result property="executeEndTime" column="sub_execute_end_time" />
<result property="machineName" column="sub_machine_name" /> <result property="machineName" column="sub_machine_name" />
<result property="createBy" column="sub_create_by" /> <result property="createBy" column="sub_create_by" />
<result property="createDate" column="sub_create_date" /> <result property="createDate" column="sub_create_date" />
@ -82,7 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectWmsMoveByMoveId" parameterType="Long" resultMap="WmsMoveWmsMoveDetailResult"> <select id="selectWmsMoveByMoveId" parameterType="Long" resultMap="WmsMoveWmsMoveDetailResult">
select a.move_id, a.task_code, a.warehouse_id, a.ori_location_code, a.target_location_code, a.operation_type, a.move_way, a.move_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time, select a.move_id, a.task_code, a.warehouse_id, a.ori_location_code, a.target_location_code, a.operation_type, a.move_way, a.move_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time,
b.move_detail_id as sub_move_detail_id, b.move_id as sub_move_id, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.instock_batch as sub_instock_batch, b.material_id as sub_material_id, b.plan_amount as sub_plan_amount, b.real_amount as sub_real_amount, b.execute_status as sub_execute_status, b.execute_person as sub_execute_person, b.execute_time as sub_execute_time, b.move_detail_type as sub_move_detail_type, b.machine_name as sub_machine_name, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.active_flag as sub_active_flag b.move_detail_id as sub_move_detail_id, b.move_id as sub_move_id, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.instock_batch as sub_instock_batch, b.material_id as sub_material_id, b.plan_amount as sub_plan_amount, b.real_amount as sub_real_amount, b.execute_status as sub_execute_status, b.execute_person as sub_execute_person, b.execute_time as sub_execute_time, b.execute_end_time as sub_execute_end_time, b.machine_name as sub_machine_name, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.active_flag as sub_active_flag
from wms_move a from wms_move a
left join wms_move_detail b on b.move_id = a.move_id left join wms_move_detail b on b.move_id = a.move_id
where a.move_id = #{moveId} where a.move_id = #{moveId}
@ -183,9 +184,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete> </delete>
<insert id="batchWmsMoveDetail"> <insert id="batchWmsMoveDetail">
insert into wms_move_detail( move_detail_id, move_id, location_code, material_barcode, instock_batch, material_id, plan_amount, real_amount, execute_status, execute_person, execute_time, move_detail_type, machine_name, create_by, create_date, update_by, update_date, active_flag) values insert into wms_move_detail( move_detail_id, move_id, location_code, material_barcode, instock_batch, material_id, plan_amount, real_amount, execute_status, execute_person, execute_time, execute_end_time, machine_name, create_by, create_date, update_by, update_date, active_flag) values
<foreach item="item" index="index" collection="list" separator=","> <foreach item="item" index="index" collection="list" separator=",">
( #{item.moveDetailId}, #{item.moveId}, #{item.locationCode}, #{item.materialBarcode}, #{item.instockBatch}, #{item.materialId}, #{item.planAmount}, #{item.realAmount}, #{item.executeStatus}, #{item.executePerson}, #{item.executeTime}, #{item.moveDetailType}, #{item.machineName}, #{item.createBy}, #{item.createDate}, #{item.updateBy}, #{item.updateDate}, #{item.activeFlag}) ( #{item.moveDetailId}, #{item.moveId}, #{item.locationCode}, #{item.materialBarcode}, #{item.instockBatch}, #{item.materialId}, #{item.planAmount}, #{item.realAmount}, #{item.executeStatus}, #{item.executePerson}, #{item.executeTime}, #{item.executeEndTime}, #{item.machineName}, #{item.createBy}, #{item.createDate}, #{item.updateBy}, #{item.updateDate}, #{item.activeFlag})
</foreach> </foreach>
</insert> </insert>
<sql id="selectWmsMoveJoinVo">
select wm.move_id, wm.task_code, wm.warehouse_id, wm.ori_location_code, wm.target_location_code, wm.operation_type, wm.move_way, wm.move_type,
wm.execute_status, wm.apply_by, wm.apply_date, wm.begin_time, wm.end_time,
wbw.warehouse_name
from wms_move wm left join wms_base_warehouse wbw on wm.warehouse_id = wbw.warehouse_id
</sql>
<select id="selectWmsMoveJoinList" parameterType="WmsMove" resultMap="WmsMoveResult">
<include refid="selectWmsMoveJoinVo"/>
<where>
</where>
order by wm.move_id desc
</select>
</mapper> </mapper>

@ -14,6 +14,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="planCode" column="plan_code" /> <result property="planCode" column="plan_code" />
<result property="planDetailCode" column="plan_detail_code" /> <result property="planDetailCode" column="plan_detail_code" />
<result property="instockType" column="instock_type" /> <result property="instockType" column="instock_type" />
<result property="productId" column="product_id" />
<result property="productBatch" column="product_batch" />
<result property="instockAmount" column="instock_amount" />
<result property="palletInfoCode" column="pallet_info_code" />
<result property="applyReason" column="apply_reason" /> <result property="applyReason" column="apply_reason" />
<result property="auditReason" column="audit_reason" /> <result property="auditReason" column="audit_reason" />
<result property="auditStatus" column="audit_status" /> <result property="auditStatus" column="audit_status" />
@ -51,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectWmsProductInstockVo"> <sql id="selectWmsProductInstockVo">
select product_instock_id, task_code, warehouse_id, location_code, product_type, operation_type, plan_code, plan_detail_code, instock_type, apply_reason, audit_reason, audit_status, execute_status, apply_by, apply_date, audit_by, audit_date, update_by, update_date, begin_time, end_time from wms_product_instock select product_instock_id, task_code, warehouse_id, location_code, product_type, operation_type, plan_code, plan_detail_code, instock_type, product_id, product_batch, instock_amount, pallet_info_code, apply_reason, audit_reason, audit_status, execute_status, apply_by, apply_date, audit_by, audit_date, update_by, update_date, begin_time, end_time from wms_product_instock
</sql> </sql>
<select id="selectWmsProductInstockList" parameterType="WmsProductInstock" resultMap="WmsProductInstockResult"> <select id="selectWmsProductInstockList" parameterType="WmsProductInstock" resultMap="WmsProductInstockResult">
@ -95,9 +99,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="locationCode != null">location_code,</if> <if test="locationCode != null">location_code,</if>
<if test="productType != null and productType != ''">product_type,</if> <if test="productType != null and productType != ''">product_type,</if>
<if test="operationType != null and operationType != ''">operation_type,</if> <if test="operationType != null and operationType != ''">operation_type,</if>
<if test="planCode != null">plan_code,</if> <if test="planCode != null and planCode != ''">plan_code,</if>
<if test="planDetailCode != null">plan_detail_code,</if> <if test="planDetailCode != null">plan_detail_code,</if>
<if test="instockType != null and instockType != ''">instock_type,</if> <if test="instockType != null and instockType != ''">instock_type,</if>
<if test="productId != null">product_id,</if>
<if test="productBatch != null">product_batch,</if>
<if test="instockAmount != null">instock_amount,</if>
<if test="palletInfoCode != null">pallet_info_code,</if>
<if test="applyReason != null">apply_reason,</if> <if test="applyReason != null">apply_reason,</if>
<if test="auditReason != null">audit_reason,</if> <if test="auditReason != null">audit_reason,</if>
<if test="auditStatus != null and auditStatus != ''">audit_status,</if> <if test="auditStatus != null and auditStatus != ''">audit_status,</if>
@ -110,16 +118,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateDate != null">update_date,</if> <if test="updateDate != null">update_date,</if>
<if test="beginTime != null">begin_time,</if> <if test="beginTime != null">begin_time,</if>
<if test="endTime != null">end_time,</if> <if test="endTime != null">end_time,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="taskCode != null">#{taskCode},</if> <if test="taskCode != null">#{taskCode},</if>
<if test="warehouseId != null">#{warehouseId},</if> <if test="warehouseId != null">#{warehouseId},</if>
<if test="locationCode != null">#{locationCode},</if> <if test="locationCode != null">#{locationCode},</if>
<if test="productType != null and productType != ''">#{productType},</if> <if test="productType != null and productType != ''">#{productType},</if>
<if test="operationType != null and operationType != ''">#{operationType},</if> <if test="operationType != null and operationType != ''">#{operationType},</if>
<if test="planCode != null">#{planCode},</if> <if test="planCode != null and planCode != ''">#{planCode},</if>
<if test="planDetailCode != null">#{planDetailCode},</if> <if test="planDetailCode != null">#{planDetailCode},</if>
<if test="instockType != null and instockType != ''">#{instockType},</if> <if test="instockType != null and instockType != ''">#{instockType},</if>
<if test="productId != null">#{productId},</if>
<if test="productBatch != null">#{productBatch},</if>
<if test="instockAmount != null">#{instockAmount},</if>
<if test="palletInfoCode != null">#{palletInfoCode},</if>
<if test="applyReason != null">#{applyReason},</if> <if test="applyReason != null">#{applyReason},</if>
<if test="auditReason != null">#{auditReason},</if> <if test="auditReason != null">#{auditReason},</if>
<if test="auditStatus != null and auditStatus != ''">#{auditStatus},</if> <if test="auditStatus != null and auditStatus != ''">#{auditStatus},</if>
@ -132,7 +144,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateDate != null">#{updateDate},</if> <if test="updateDate != null">#{updateDate},</if>
<if test="beginTime != null">#{beginTime},</if> <if test="beginTime != null">#{beginTime},</if>
<if test="endTime != null">#{endTime},</if> <if test="endTime != null">#{endTime},</if>
</trim> </trim>
</insert> </insert>
<update id="updateWmsProductInstock" parameterType="WmsProductInstock"> <update id="updateWmsProductInstock" parameterType="WmsProductInstock">
@ -143,9 +155,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="locationCode != null">location_code = #{locationCode},</if> <if test="locationCode != null">location_code = #{locationCode},</if>
<if test="productType != null and productType != ''">product_type = #{productType},</if> <if test="productType != null and productType != ''">product_type = #{productType},</if>
<if test="operationType != null and operationType != ''">operation_type = #{operationType},</if> <if test="operationType != null and operationType != ''">operation_type = #{operationType},</if>
<if test="planCode != null">plan_code = #{planCode},</if> <if test="planCode != null and planCode != ''">plan_code = #{planCode},</if>
<if test="planDetailCode != null">plan_detail_code = #{planDetailCode},</if> <if test="planDetailCode != null">plan_detail_code = #{planDetailCode},</if>
<if test="instockType != null and instockType != ''">instock_type = #{instockType},</if> <if test="instockType != null and instockType != ''">instock_type = #{instockType},</if>
<if test="productId != null">product_id = #{productId},</if>
<if test="productBatch != null">product_batch = #{productBatch},</if>
<if test="instockAmount != null">instock_amount = #{instockAmount},</if>
<if test="palletInfoCode != null">pallet_info_code = #{palletInfoCode},</if>
<if test="applyReason != null">apply_reason = #{applyReason},</if> <if test="applyReason != null">apply_reason = #{applyReason},</if>
<if test="auditReason != null">audit_reason = #{auditReason},</if> <if test="auditReason != null">audit_reason = #{auditReason},</if>
<if test="auditStatus != null and auditStatus != ''">audit_status = #{auditStatus},</if> <if test="auditStatus != null and auditStatus != ''">audit_status = #{auditStatus},</if>

@ -14,6 +14,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="planDetailCode" column="plan_detail_code" /> <result property="planDetailCode" column="plan_detail_code" />
<result property="stationId" column="station_id" /> <result property="stationId" column="station_id" />
<result property="productId" column="product_id" /> <result property="productId" column="product_id" />
<result property="materialBatch" column="material_batch" />
<result property="palletInfoCode" column="pallet_info_code" />
<result property="outstockAmount" column="outstock_amount" />
<result property="endStationCode" column="end_station_code" />
<result property="operationType" column="operation_type" /> <result property="operationType" column="operation_type" />
<result property="taskType" column="task_type" /> <result property="taskType" column="task_type" />
<result property="applyReason" column="apply_reason" /> <result property="applyReason" column="apply_reason" />
@ -60,7 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<sql id="selectWmsRawOutstockVo"> <sql id="selectWmsRawOutstockVo">
select raw_outstock_id, task_code, warehouse_id, location_code, order_id, plan_code, plan_detail_code, station_id, product_id, operation_type, task_type, apply_reason, audit_reason, audit_status, execute_status, apply_by, apply_date, audit_by, audit_date, update_by, update_date, begin_time, end_time from wms_raw_outstock select raw_outstock_id, task_code, warehouse_id, location_code, order_id, plan_code, plan_detail_code, station_id, product_id, material_batch, pallet_info_code, outstock_amount, end_station_code, operation_type, task_type, apply_reason, audit_reason, audit_status, execute_status, apply_by, apply_date, audit_by, audit_date, update_by, update_date, begin_time, end_time from wms_raw_outstock
</sql> </sql>
<select id="selectWmsRawOutstockList" parameterType="WmsRawOutstock" resultMap="WmsRawOutstockResult"> <select id="selectWmsRawOutstockList" parameterType="WmsRawOutstock" resultMap="WmsRawOutstockResult">
@ -91,10 +95,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectWmsRawOutstockByRawOutstockId" parameterType="Long" resultMap="WmsRawOutstockWmsRawOutstockDetailResult"> <select id="selectWmsRawOutstockByRawOutstockId" parameterType="Long" resultMap="WmsRawOutstockWmsRawOutstockDetailResult">
select a.raw_outstock_id, a.task_code, a.warehouse_id, a.location_code, a.order_id, a.plan_code, a.plan_detail_code, a.station_id, a.product_id, a.operation_type, a.task_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time, select a.raw_outstock_id, a.task_code, a.warehouse_id, a.location_code, a.order_id, a.plan_code, a.plan_detail_code, a.station_id, a.product_id, a.material_batch, a.pallet_info_code, a.outstock_amount, a.end_station_code, a.operation_type, a.task_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time,
b.raw_outstock_detail_id as sub_raw_outstock_detail_id, b.raw_outstock_id as sub_raw_outstock_id, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.material_id as sub_material_id, b.instock_batch as sub_instock_batch, b.material_production_Date as sub_material_production_Date, b.plan_amount as sub_plan_amount, b.outstock_amount as sub_outstock_amount, b.execute_status as sub_execute_status, b.erp_status as sub_erp_status, b.outstock_person as sub_outstock_person, b.outstock_time as sub_outstock_time, b.outstock_way as sub_outstock_way, b.machine_name as sub_machine_name, b.quality_status as sub_quality_status, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.stack_amount as sub_stack_amount b.raw_outstock_detail_id as sub_raw_outstock_detail_id, b.raw_outstock_id as sub_raw_outstock_id, b.task_code as sub_task_code, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.material_id as sub_material_id, b.instock_batch as sub_instock_batch, b.material_production_date as sub_material_production_date, b.plan_amount as sub_plan_amount, b.outstock_amount as sub_outstock_amount, b.execute_status as sub_execute_status, b.erp_status as sub_erp_status, b.erp_amount as sub_erp_amount, b.outstock_person as sub_outstock_person, b.outstock_time as sub_outstock_time, b.outstock_way as sub_outstock_way, b.machine_name as sub_machine_name, b.quality_status as sub_quality_status, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.stack_amount as sub_stack_amount
from wms_raw_outstock a from wms_raw_outstock a
left join wms_raw_outstock_detail b on b.raw_outstock_id = a.raw_outstock_id left join wms_raw_outstock_detail b on b.raw_outstock_id = a.raw_outstock_id
where a.raw_outstock_id = #{rawOutstockId} where a.raw_outstock_id = #{rawOutstockId}
</select> </select>
@ -109,12 +113,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="planDetailCode != null">plan_detail_code,</if> <if test="planDetailCode != null">plan_detail_code,</if>
<if test="stationId != null">station_id,</if> <if test="stationId != null">station_id,</if>
<if test="productId != null">product_id,</if> <if test="productId != null">product_id,</if>
<if test="operationType != null">operation_type,</if> <if test="materialBatch != null">material_batch,</if>
<if test="taskType != null">task_type,</if> <if test="palletInfoCode != null">pallet_info_code,</if>
<if test="outstockAmount != null">outstock_amount,</if>
<if test="endStationCode != null">end_station_code,</if>
<if test="operationType != null and operationType != ''">operation_type,</if>
<if test="taskType != null and taskType != ''">task_type,</if>
<if test="applyReason != null">apply_reason,</if> <if test="applyReason != null">apply_reason,</if>
<if test="auditReason != null">audit_reason,</if> <if test="auditReason != null">audit_reason,</if>
<if test="auditStatus != null">audit_status,</if> <if test="auditStatus != null and auditStatus != ''">audit_status,</if>
<if test="executeStatus != null">execute_status,</if> <if test="executeStatus != null and executeStatus != ''">execute_status,</if>
<if test="applyBy != null">apply_by,</if> <if test="applyBy != null">apply_by,</if>
<if test="applyDate != null">apply_date,</if> <if test="applyDate != null">apply_date,</if>
<if test="auditBy != null">audit_by,</if> <if test="auditBy != null">audit_by,</if>
@ -123,7 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateDate != null">update_date,</if> <if test="updateDate != null">update_date,</if>
<if test="beginTime != null">begin_time,</if> <if test="beginTime != null">begin_time,</if>
<if test="endTime != null">end_time,</if> <if test="endTime != null">end_time,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="taskCode != null and taskCode != ''">#{taskCode},</if> <if test="taskCode != null and taskCode != ''">#{taskCode},</if>
<if test="warehouseId != null">#{warehouseId},</if> <if test="warehouseId != null">#{warehouseId},</if>
@ -133,12 +141,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="planDetailCode != null">#{planDetailCode},</if> <if test="planDetailCode != null">#{planDetailCode},</if>
<if test="stationId != null">#{stationId},</if> <if test="stationId != null">#{stationId},</if>
<if test="productId != null">#{productId},</if> <if test="productId != null">#{productId},</if>
<if test="operationType != null">#{operationType},</if> <if test="materialBatch != null">#{materialBatch},</if>
<if test="taskType != null">#{taskType},</if> <if test="palletInfoCode != null">#{palletInfoCode},</if>
<if test="outstockAmount != null">#{outstockAmount},</if>
<if test="endStationCode != null">#{endStationCode},</if>
<if test="operationType != null and operationType != ''">#{operationType},</if>
<if test="taskType != null and taskType != ''">#{taskType},</if>
<if test="applyReason != null">#{applyReason},</if> <if test="applyReason != null">#{applyReason},</if>
<if test="auditReason != null">#{auditReason},</if> <if test="auditReason != null">#{auditReason},</if>
<if test="auditStatus != null">#{auditStatus},</if> <if test="auditStatus != null and auditStatus != ''">#{auditStatus},</if>
<if test="executeStatus != null">#{executeStatus},</if> <if test="executeStatus != null and executeStatus != ''">#{executeStatus},</if>
<if test="applyBy != null">#{applyBy},</if> <if test="applyBy != null">#{applyBy},</if>
<if test="applyDate != null">#{applyDate},</if> <if test="applyDate != null">#{applyDate},</if>
<if test="auditBy != null">#{auditBy},</if> <if test="auditBy != null">#{auditBy},</if>
@ -147,7 +159,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateDate != null">#{updateDate},</if> <if test="updateDate != null">#{updateDate},</if>
<if test="beginTime != null">#{beginTime},</if> <if test="beginTime != null">#{beginTime},</if>
<if test="endTime != null">#{endTime},</if> <if test="endTime != null">#{endTime},</if>
</trim> </trim>
</insert> </insert>
<update id="updateWmsRawOutstock" parameterType="WmsRawOutstock"> <update id="updateWmsRawOutstock" parameterType="WmsRawOutstock">
@ -161,12 +173,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="planDetailCode != null">plan_detail_code = #{planDetailCode},</if> <if test="planDetailCode != null">plan_detail_code = #{planDetailCode},</if>
<if test="stationId != null">station_id = #{stationId},</if> <if test="stationId != null">station_id = #{stationId},</if>
<if test="productId != null">product_id = #{productId},</if> <if test="productId != null">product_id = #{productId},</if>
<if test="operationType != null">operation_type = #{operationType},</if> <if test="materialBatch != null">material_batch = #{materialBatch},</if>
<if test="taskType != null">task_type = #{taskType},</if> <if test="palletInfoCode != null">pallet_info_code = #{palletInfoCode},</if>
<if test="outstockAmount != null">outstock_amount = #{outstockAmount},</if>
<if test="endStationCode != null">end_station_code = #{endStationCode},</if>
<if test="operationType != null and operationType != ''">operation_type = #{operationType},</if>
<if test="taskType != null and taskType != ''">task_type = #{taskType},</if>
<if test="applyReason != null">apply_reason = #{applyReason},</if> <if test="applyReason != null">apply_reason = #{applyReason},</if>
<if test="auditReason != null">audit_reason = #{auditReason},</if> <if test="auditReason != null">audit_reason = #{auditReason},</if>
<if test="auditStatus != null">audit_status = #{auditStatus},</if> <if test="auditStatus != null and auditStatus != ''">audit_status = #{auditStatus},</if>
<if test="executeStatus != null">execute_status = #{executeStatus},</if> <if test="executeStatus != null and executeStatus != ''">execute_status = #{executeStatus},</if>
<if test="applyBy != null">apply_by = #{applyBy},</if> <if test="applyBy != null">apply_by = #{applyBy},</if>
<if test="applyDate != null">apply_date = #{applyDate},</if> <if test="applyDate != null">apply_date = #{applyDate},</if>
<if test="auditBy != null">audit_by = #{auditBy},</if> <if test="auditBy != null">audit_by = #{auditBy},</if>

@ -192,7 +192,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateDate != null "> and update_date = #{updateDate}</if> <if test="updateDate != null "> and update_date = #{updateDate}</if>
<if test="activeFlag != null and activeFlag != ''"> and active_flag = #{activeFlag}</if> <if test="activeFlag != null and activeFlag != ''"> and active_flag = #{activeFlag}</if>
and totalAmount > 0 and total_amount > 0
</where> </where>
</select> </select>

Loading…
Cancel
Save