-车间4楼装配:生成成品码和配对码逻辑完善
-车间5楼拆分:
    可根据多个成品码生成原材料条码(适用于4楼到5楼生产的拆分后的柜体);
    外部采购的根据合并的虚拟物料进行申请领取柜体。
-PDA5楼组装出库:支持多个成品条码合并一个原材料条码的组装出库,不能重复组装出库,但每个四楼的成品都需要生成一条明细
-车间5楼装配:申请领料,外部采购柜体合并的根据虚拟bom进行领料
master
xins 9 months ago
parent 3174142b61
commit 68bf18d502

@ -137,4 +137,15 @@ public interface RemoteMesService {
@PostMapping("/saleOrder/transferSaleOrders") @PostMapping("/saleOrder/transferSaleOrders")
public R<Boolean> transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public R<Boolean> transferSaleOrders(@RequestBody MesSaleOrderTransferVo mesSaleOrderTransferVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
*
*
* @param productBarcode
* @param source
* @return
*/
@GetMapping("/barcode/getRawBarcodeByProductBarcode/{productBarcode}")
public R<MesBaseBarcodeInfo> getRawBarcodeByProductBarcode(@PathVariable("productBarcode") String productBarcode, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
} }

@ -17,7 +17,11 @@ import javax.validation.constraints.NotBlank;
@Data @Data
public class MesPdaProductPlanVo { public class MesPdaProductPlanVo {
//物料条码 //保存生产明细的物料条码
@NotBlank(message="material barcode cannot be empty") @NotBlank(message="material barcode cannot be empty")
private String materialBarcode; private String materialBarcode;
//组装出库配对码对应的原材料条码
@NotBlank(message="raw material barcode cannot be empty")
private String rawMaterialBarcode;
} }

@ -83,6 +83,11 @@ public class RemoteMesFallbackFactory implements FallbackFactory<RemoteMesServic
public R<Boolean> transferSaleOrders(MesSaleOrderTransferVo mesSaleOrderTransferVo, String source) { public R<Boolean> transferSaleOrders(MesSaleOrderTransferVo mesSaleOrderTransferVo, String source) {
return R.fail("销售订单信息转换失败:" + throwable.getMessage()); return R.fail("销售订单信息转换失败:" + throwable.getMessage());
} }
@Override
public R<MesBaseBarcodeInfo> getRawBarcodeByProductBarcode(String productBarcode, String source) {
return R.fail("根据成品条码获取原材料条码信息失败:" + throwable.getMessage());
}
}; };
} }
} }

@ -43,6 +43,7 @@ public interface RemoteWmsService {
@PostMapping("/productstock/isExistProductStock") @PostMapping("/productstock/isExistProductStock")
public R<Boolean> isExistProductStock(@Validated @RequestBody WmsProductStockVo queryProductStockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public R<Boolean> isExistProductStock(@Validated @RequestBody WmsProductStockVo queryProductStockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/** /**
* ERP * ERP
* @param days * @param days
@ -65,4 +66,7 @@ public interface RemoteWmsService {
@PostMapping("/wmswarehouse/allocateVirtualMaterial") @PostMapping("/wmswarehouse/allocateVirtualMaterial")
public R<Boolean> allocateVirtualMaterial(@RequestBody WmsWarehouseMaterial wmsWarehouseMaterial, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); public R<Boolean> allocateVirtualMaterial(@RequestBody WmsWarehouseMaterial wmsWarehouseMaterial, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
@PostMapping("/productoutstock/isProductOutstock")
public R<Boolean> isProductOutstock(@Validated @RequestBody WmsProductStockVo queryProductStockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
} }

@ -60,6 +60,11 @@ public class RemoteWmsFallbackFactory implements FallbackFactory<RemoteWmsServic
return R.fail("配置仓库虚拟物料失败:" + throwable.getMessage()); return R.fail("配置仓库虚拟物料失败:" + throwable.getMessage());
} }
@Override
public R<Boolean> isProductOutstock(WmsProductStockVo queryProductStockVo, String source) {
return R.fail("获取成品出库记录失败:" + throwable.getMessage());
}
}; };
} }
} }

@ -274,4 +274,10 @@ public class MesConstants {
*/ */
public static final String MES_MATERIAL_ACCESSORIES_FLAG_YES = "1";//是 public static final String MES_MATERIAL_ACCESSORIES_FLAG_YES = "1";//是
public static final String MES_MATERIAL_ACCESSORIES_FLAG_NO = "0";//否 public static final String MES_MATERIAL_ACCESSORIES_FLAG_NO = "0";//否
/**
*
*/
public static final String MES_PRODUCT_ORDER_CABINET_CHANNEL_PURCHASE = "1";//外部采购
public static final String MES_PRODUCT_ORDER_CABINET_CHANNEL_INTERNAL = "2";//内部生产
} }

@ -29,8 +29,16 @@ public class MesConfig
*/ */
private int socketServerReadTimeOut; private int socketServerReadTimeOut;
/**
* ID
*/
private Long laserProcessId; private Long laserProcessId;
/**
* PDAID
*/
private Long pdaAssembleProcessId;
/**五楼原料周转区仓库ID*/ /**五楼原料周转区仓库ID*/
private Long fifthCabinetWarehouseId; private Long fifthCabinetWarehouseId;
@ -67,6 +75,14 @@ public class MesConfig
this.laserProcessId = laserProcessId; this.laserProcessId = laserProcessId;
} }
public Long getPdaAssembleProcessId() {
return pdaAssembleProcessId;
}
public void setPdaAssembleProcessId(Long pdaAssembleProcessId) {
this.pdaAssembleProcessId = pdaAssembleProcessId;
}
public Long getFifthCabinetWarehouseId() { public Long getFifthCabinetWarehouseId() {
return fifthCabinetWarehouseId; return fifthCabinetWarehouseId;
} }

@ -309,7 +309,7 @@ public class MesApiController extends BaseController {
*/ */
@GetMapping(value = "/printProductBarcodes/{barcodeIds}") @GetMapping(value = "/printProductBarcodes/{barcodeIds}")
public AjaxResult printProductBarcodes(@PathVariable Long[] barcodeIds) { public AjaxResult printProductBarcodes(@PathVariable Long[] barcodeIds) {
return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false)); return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false,1));
} }
@ -333,4 +333,15 @@ public class MesApiController extends BaseController {
} }
/**
*
*
* @param barcodeIds
* @return
*/
@GetMapping(value = "/printBindBarcodes/{barcodeIds}/{printNumber}")
public AjaxResult printBindBarcodes(@PathVariable Long[] barcodeIds, @PathVariable Integer printNumber) {
return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false,printNumber));
}
} }

@ -128,7 +128,7 @@ public class MesBaseBarcodeInfoController extends BaseController
@RequiresPermissions("mes:barcode:printBarcode") @RequiresPermissions("mes:barcode:printBarcode")
public AjaxResult printBarcodes(@PathVariable Long[] barcodeIds) public AjaxResult printBarcodes(@PathVariable Long[] barcodeIds)
{ {
return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,false)); return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,false,1));
} }
/** /**
@ -140,7 +140,7 @@ public class MesBaseBarcodeInfoController extends BaseController
@RequiresPermissions("mes:barcode:reprint") @RequiresPermissions("mes:barcode:reprint")
public AjaxResult reprintBarcodes(@PathVariable Long[] barcodeIds) public AjaxResult reprintBarcodes(@PathVariable Long[] barcodeIds)
{ {
return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,true)); return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds,MesConstants.MES_BARCODE_TYPE_RAW,true,1));
} }
/** /**
@ -220,7 +220,7 @@ public class MesBaseBarcodeInfoController extends BaseController
@RequiresPermissions("mes:barcode:printProductBarcodes") @RequiresPermissions("mes:barcode:printProductBarcodes")
public AjaxResult printProductBarcodes(@PathVariable Long[] barcodeIds) public AjaxResult printProductBarcodes(@PathVariable Long[] barcodeIds)
{ {
return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false)); return success(mesBaseBarcodeInfoService.printBarcodes(barcodeIds, MesConstants.MES_BARCODE_TYPE_PRODUCT,false,1));
} }
@ -373,4 +373,16 @@ public class MesBaseBarcodeInfoController extends BaseController
return toAjax(mesBaseBarcodeInfoService.generateMergeRawBarcode(mesBaseBarcodeInfo)); return toAjax(mesBaseBarcodeInfoService.generateMergeRawBarcode(mesBaseBarcodeInfo));
} }
/**
*
*/
@InnerAuth
@GetMapping(value = "/getRawBarcodeByProductBarcode/{productBarcode}")
public AjaxResult getRawBarcodeByProductBarcode(@PathVariable("productBarcode") String productBarcode)
{
return success(mesBaseBarcodeInfoService.selectRawBarcodeInfoByProductBarcode(productBarcode));
}
} }

@ -269,6 +269,7 @@ public class MesProductPlanController extends BaseController {
try { try {
MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail(); MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail();
mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode()); mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode());
mesProductPlanDetail.setRawMaterialBarcode(mesPdaProductPlanVo.getRawMaterialBarcode());
mesProductPlanDetailService.startNextMesProductPlanDetail(mesProductPlanDetail, MesConstants.MES_START_TYPE_FIFTH_FLOOR_INSTALL); mesProductPlanDetailService.startNextMesProductPlanDetail(mesProductPlanDetail, MesConstants.MES_START_TYPE_FIFTH_FLOOR_INSTALL);
return R.ok("start successfully"); return R.ok("start successfully");
} catch (Exception e) { } catch (Exception e) {
@ -286,7 +287,7 @@ public class MesProductPlanController extends BaseController {
public R<?> complete5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo) { public R<?> complete5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo) {
try { try {
MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail(); MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail();
mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode()); mesProductPlanDetail.setRawMaterialBarcode(mesPdaProductPlanVo.getRawMaterialBarcode());
mesProductPlanDetailService.completeMesProductPlanDetail(mesProductPlanDetail); mesProductPlanDetailService.completeMesProductPlanDetail(mesProductPlanDetail);
return R.ok("complete successfully"); return R.ok("complete successfully");
} catch (Exception e) { } catch (Exception e) {

@ -0,0 +1,88 @@
package com.hw.mes.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hw.common.core.annotation.Excel;
import com.hw.common.core.web.domain.BaseEntity;
/**
* mes_base_bind_barcode
*
* @author Open Platform
* @date 2024-09-25
*/
public class MesBaseBindBarcode extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long bindBarcodeId;
/** 条码ID */
@Excel(name = "条码ID")
private Long barcodeId;
private String barcodeInfo;
private Long saleOrderId;
/** 绑定的条码内容 */
@Excel(name = "绑定的条码内容")
private String bindBarcode;
public void setBindBarcodeId(Long bindBarcodeId)
{
this.bindBarcodeId = bindBarcodeId;
}
public Long getBindBarcodeId()
{
return bindBarcodeId;
}
public void setBarcodeId(Long barcodeId)
{
this.barcodeId = barcodeId;
}
public Long getBarcodeId()
{
return barcodeId;
}
public String getBarcodeInfo() {
return barcodeInfo;
}
public void setBarcodeInfo(String barcodeInfo) {
this.barcodeInfo = barcodeInfo;
}
public Long getSaleOrderId() {
return saleOrderId;
}
public void setSaleOrderId(Long saleOrderId) {
this.saleOrderId = saleOrderId;
}
public void setBindBarcode(String bindBarcode)
{
this.bindBarcode = bindBarcode;
}
public String getBindBarcode()
{
return bindBarcode;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("bindBarcodeId", getBindBarcodeId())
.append("barcodeId", getBarcodeId())
.append("bindBarcode", getBindBarcode())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.toString();
}
}

@ -94,6 +94,12 @@ public class MesProductOrder extends BaseEntity {
private Long dispatchId; private Long dispatchId;
/**
*
*/
private String cabinetChannel;
/** /**
* ; * ;
*/ */
@ -424,6 +430,14 @@ public class MesProductOrder extends BaseEntity {
return dispatchId; return dispatchId;
} }
public String getCabinetChannel() {
return cabinetChannel;
}
public void setCabinetChannel(String cabinetChannel) {
this.cabinetChannel = cabinetChannel;
}
public void setSaleAmount(BigDecimal saleAmount) { public void setSaleAmount(BigDecimal saleAmount) {
this.saleAmount = saleAmount; this.saleAmount = saleAmount;
} }

@ -194,6 +194,10 @@ public class MesProductPlan extends BaseEntity
private String nickName; private String nickName;
private String incompleteFlag;
private String cabinetChannel;
public Long getSaleOrderId() { public Long getSaleOrderId() {
return saleOrderId; return saleOrderId;
} }
@ -567,6 +571,22 @@ public class MesProductPlan extends BaseEntity
this.nickName = nickName; this.nickName = nickName;
} }
public String getIncompleteFlag() {
return incompleteFlag;
}
public void setIncompleteFlag(String incompleteFlag) {
this.incompleteFlag = incompleteFlag;
}
public String getCabinetChannel() {
return cabinetChannel;
}
public void setCabinetChannel(String cabinetChannel) {
this.cabinetChannel = cabinetChannel;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

@ -69,6 +69,8 @@ public class MesProductPlanDetail extends BaseEntity
private String processType;//工序类型1五楼拆分工序 private String processType;//工序类型1五楼拆分工序
private String rawMaterialBarcode;
public void setPlanDetailId(Long planDetailId) public void setPlanDetailId(Long planDetailId)
{ {
this.planDetailId = planDetailId; this.planDetailId = planDetailId;
@ -201,6 +203,14 @@ public class MesProductPlanDetail extends BaseEntity
this.processType = processType; this.processType = processType;
} }
public String getRawMaterialBarcode() {
return rawMaterialBarcode;
}
public void setRawMaterialBarcode(String rawMaterialBarcode) {
this.rawMaterialBarcode = rawMaterialBarcode;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

@ -89,6 +89,14 @@ public interface MesBaseBarcodeInfoMapper
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByProductBarcode(String productBarcode); public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByProductBarcode(String productBarcode);
/**
* like,limit 1
*
* @param productBarcode 545
* @return
*/
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByLikeProductBarcode(String productBarcode);
/** /**
* *
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo

@ -0,0 +1,78 @@
package com.hw.mes.mapper;
import java.util.List;
import com.hw.mes.domain.MesBaseBindBarcode;
/**
* Mapper
*
* @author xins
* @date 2024-09-25
*/
public interface MesBaseBindBarcodeMapper
{
/**
*
*
* @param bindBarcodeId
* @return
*/
public MesBaseBindBarcode selectMesBaseBindBarcodeByBindBarcodeId(Long bindBarcodeId);
/**
*
*
* @param mesBaseBindBarcode
* @return
*/
public List<MesBaseBindBarcode> selectMesBaseBindBarcodeList(MesBaseBindBarcode mesBaseBindBarcode);
/**
*
*
* @param mesBaseBindBarcode
* @return
*/
public int insertMesBaseBindBarcode(MesBaseBindBarcode mesBaseBindBarcode);
/**
*
*
* @param mesBaseBindBarcode
* @return
*/
public int updateMesBaseBindBarcode(MesBaseBindBarcode mesBaseBindBarcode);
/**
*
*
* @param bindBarcodeId
* @return
*/
public int deleteMesBaseBindBarcodeByBindBarcodeId(Long bindBarcodeId);
/**
*
*
* @param bindBarcodeIds
* @return
*/
public int deleteMesBaseBindBarcodeByBindBarcodeIds(Long[] bindBarcodeIds);
/**
*
*
* @param mesBaseBindBarcodeList
* @return
*/
public int batchMesBaseBindBarcode(List<MesBaseBindBarcode> mesBaseBindBarcodeList);
/**
*
*
* @param bindBarcode
* @return
*/
public MesBaseBindBarcode selectMesBaseBindBarcodeByBindBarcode(String bindBarcode);
}

@ -12,8 +12,7 @@ import java.util.List;
* @author xs * @author xs
* @date 2023-12-20 * @date 2023-12-20
*/ */
public interface IMesBaseBarcodeInfoService public interface IMesBaseBarcodeInfoService {
{
/** /**
* *
* *
@ -58,12 +57,14 @@ public interface IMesBaseBarcodeInfoService
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
*/ */
public int generateNoPurchaseRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo); public int generateNoPurchaseRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo);
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
*/ */
public int generateRegularRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo); public int generateRegularRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo);
@ -107,9 +108,10 @@ public interface IMesBaseBarcodeInfoService
* @param barcodeIds * @param barcodeIds
* @param printType 1 3 * @param printType 1 3
* @param reprintFlag (1) * @param reprintFlag (1)
* @param printNumber
* @return * @return
*/ */
public int printBarcodes(Long[] barcodeIds, String printType,boolean reprintFlag); public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber);
/** /**
@ -148,9 +150,9 @@ public interface IMesBaseBarcodeInfoService
public MesBaseBarcodeInfo selectProductBarcodeInfoByBarcodeInfo(String barcodeInfo); public MesBaseBarcodeInfo selectProductBarcodeInfoByBarcodeInfo(String barcodeInfo);
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
* @return * @return
*/ */
@ -159,6 +161,7 @@ public interface IMesBaseBarcodeInfoService
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
* @return * @return
*/ */
@ -166,6 +169,7 @@ public interface IMesBaseBarcodeInfoService
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
* @return * @return
*/ */
@ -173,6 +177,7 @@ public interface IMesBaseBarcodeInfoService
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
* @return * @return
*/ */
@ -181,6 +186,7 @@ public interface IMesBaseBarcodeInfoService
/** /**
* *
*
* @param materialBarcode * @param materialBarcode
* @return * @return
*/ */
@ -196,7 +202,16 @@ public interface IMesBaseBarcodeInfoService
/** /**
* *
*
* @param mesBaseBarcodeInfo * @param mesBaseBarcodeInfo
*/ */
public int generateMergeRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo); public int generateMergeRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo);
/**
*
*
* @param productBarcode
* @return
*/
public MesBaseBarcodeInfo selectRawBarcodeInfoByProductBarcode(String productBarcode);
} }

@ -3,6 +3,7 @@ package com.hw.mes.service.impl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import com.alibaba.fastjson2.JSONObject;
import com.hw.common.core.constant.*; import com.hw.common.core.constant.*;
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;
@ -72,7 +73,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
private MesProductPlanDetailMapper mesProductPlanDetailMapper; private MesProductPlanDetailMapper mesProductPlanDetailMapper;
@Autowired @Autowired
private MesPurchaseOrderMapper mesPurchaseOrderMapper; private MesBaseBindBarcodeMapper mesBaseBindBarcodeMapper;
@Autowired @Autowired
private MesSaleOrderMapper mesSaleOrderMapper; private MesSaleOrderMapper mesSaleOrderMapper;
@ -83,6 +84,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Autowired @Autowired
private MesSaleOrderRelateMapper mesSaleOrderRelateMapper; private MesSaleOrderRelateMapper mesSaleOrderRelateMapper;
@Autowired @Autowired
private MesConfig mesConfig; private MesConfig mesConfig;
@ -110,7 +112,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Override @Override
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByBarcodeId(Long barcodeId) { public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByBarcodeId(Long barcodeId) {
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId); MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId);
if(mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)){ if (mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)) {
MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate(); MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate();
querySaleOrderRelate.setBarcodeInfo(mesBaseBarcodeInfo.getBarcodeInfo()); querySaleOrderRelate.setBarcodeInfo(mesBaseBarcodeInfo.getBarcodeInfo());
List<MesSaleOrderRelate> mesSaleOrderRelates = mesSaleOrderRelateMapper.selectMesSaleOrderRelateJoinList(querySaleOrderRelate); List<MesSaleOrderRelate> mesSaleOrderRelates = mesSaleOrderRelateMapper.selectMesSaleOrderRelateJoinList(querySaleOrderRelate);
@ -316,16 +318,43 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
public void generateProductBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) { public void generateProductBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
String planCode; // String planCode;
String planDetailCode; // String planDetailCode;
Long saleOrderId;
String saleOrderCode;
Long materialId;
String barcode = Seq.getId(Seq.mesCompBarcodeSeqType, Seq.mesCompBarcodeCode); String barcode = Seq.getId(Seq.mesCompBarcodeSeqType, Seq.mesCompBarcodeCode);
Date currentDate = new Date(); Date currentDate = new Date();
String userName = SecurityUtils.getUsername(); String userName = SecurityUtils.getUsername();
String planCode = mesBaseBarcodeInfo.getPlanCode();
String planDetailCode = mesBaseBarcodeInfo.getPlanDetailCode();
MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo();
queryBarcodeInfo.setPlanDetailCode(planDetailCode);
List<MesBaseBarcodeInfo> mesBaseBarcodeInfos = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo);
if (mesBaseBarcodeInfos != null && !mesBaseBarcodeInfos.isEmpty()) {
throw new ServiceException("此生产明细已经生成条码,不能重复生成");
}
MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailCode(planDetailCode);
if (mesProductPlanDetail == null) {
throw new ServiceException("此生产明细不存在");
}
// if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH) &&
// !mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH)) {
// throw new ServiceException("此生产明细还未完成,不能打印条码");
// }
MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode);
if (productPlan == null) {
throw new ServiceException("此生产派工不存在");
}
Long saleOrderId = productPlan.getSaleOrderId();
String saleOrderCode = productPlan.getSaleorderCode();
Long materialId = productPlan.getMaterialId();//在生产计划的materialid是根据saletype保存如果是外部销售则保存productorder中的materialid如果是内部生产则保存prpductorder中的producematerialid
//在五楼根据原材料条码单独生成成品条码 //在五楼根据原材料条码单独生成成品条码
if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getSingleFlag()) && if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getSingleFlag()) &&
mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_YES)) { mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_YES)) {
@ -344,20 +373,20 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
throw new ServiceException("此原材料条码已经生成过成品条码,不能重复生成"); throw new ServiceException("此原材料条码已经生成过成品条码,不能重复生成");
} }
MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(rawMaterialBarcode); MesProductPlanDetail rawBarcodeMesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(rawMaterialBarcode);
if (mesProductPlanDetail == null) { if (rawBarcodeMesProductPlanDetail == null) {
throw new ServiceException("此条码没有生产明细"); throw new ServiceException("此原材料条码没有生产明细");
} }
if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH)) { // if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH)) {
throw new ServiceException("生产明细还未结束"); // throw new ServiceException("生产明细还未结束");
} // }
planCode = mesProductPlanDetail.getPlanCode(); String rawBarCodePlanCode = rawBarcodeMesProductPlanDetail.getPlanCode();
planDetailCode = mesProductPlanDetail.getPlanDetailCode(); String rawBarCodePlanDetailCode = rawBarcodeMesProductPlanDetail.getPlanDetailCode();
if (StringUtils.isEmpty(planCode) || StringUtils.isEmpty(planDetailCode)) { if (StringUtils.isEmpty(rawBarCodePlanCode) || StringUtils.isEmpty(rawBarCodePlanDetailCode)) {
throw new ServiceException("绑定的配对码有误"); throw new ServiceException("绑定的配对码有误");
} }
@ -365,16 +394,12 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
throw new ServiceException("此条码未绑定托盘信息"); throw new ServiceException("此条码未绑定托盘信息");
} }
MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode); MesProductPlan rawBarcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarCodePlanCode);
if (productPlan == null) { if (rawBarcodeProductPlan == null) {
throw new ServiceException("生产派工不存在"); throw new ServiceException("原材料条码的生产派工不存在");
} }
saleOrderId = rawBarcode.getSaleOrderId();
saleOrderCode = rawBarcode.getSaleorderCode();
materialId = productPlan.getMaterialId();
mesBaseBarcodeInfo.setPalletInfoCode(rawBarcode.getPalletInfoCode());//重新绑定托盘号 mesBaseBarcodeInfo.setPalletInfoCode(rawBarcode.getPalletInfoCode());//重新绑定托盘号
mesBaseBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_BINDING); mesBaseBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_BINDING);
@ -400,35 +425,6 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
mesProductPlanDetailMapper.updateMesProductPlanDetail(mesProductPlanDetail); mesProductPlanDetailMapper.updateMesProductPlanDetail(mesProductPlanDetail);
} else { } else {
planCode = mesBaseBarcodeInfo.getPlanCode();
planDetailCode = mesBaseBarcodeInfo.getPlanDetailCode();
MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo();
queryBarcodeInfo.setPlanDetailCode(planDetailCode);
List<MesBaseBarcodeInfo> mesBaseBarcodeInfos = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo);
if (mesBaseBarcodeInfos != null && !mesBaseBarcodeInfos.isEmpty()) {
throw new ServiceException("此生产明细已经生成条码,不能重复生成");
}
MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailCode(planDetailCode);
if (mesProductPlanDetail == null) {
throw new ServiceException("此生产明细不存在");
}
if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH) &&
!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH)) {
throw new ServiceException("此生产明细还未完成,不能打印条码");
}
MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode);
if (productPlan == null) {
throw new ServiceException("此生产派工不存在");
}
saleOrderId = productPlan.getSaleOrderId();
saleOrderCode = productPlan.getSaleorderCode();
materialId = productPlan.getMaterialId();//在生产计划的materialid是根据saletype保存如果是外部销售则保存productorder中的materialid如果是内部生产则保存prpductorder中的producematerialid
MesProductOrder mesProductOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(productPlan.getProductOrderId()); MesProductOrder mesProductOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(productPlan.getProductOrderId());
mesBaseBarcodeInfo.setCompleteFlag(mesProductOrder.getSaleType().equals(MesConstants.MES_PRODUCT_ORDER_SALE) mesBaseBarcodeInfo.setCompleteFlag(mesProductOrder.getSaleType().equals(MesConstants.MES_PRODUCT_ORDER_SALE)
@ -444,8 +440,8 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
mesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_NO); mesBaseBarcodeInfo.setPrintFlag(MesConstants.MES_BARCODE_PRINT_FLAG_NO);
mesBaseBarcodeInfo.setSaleOrderId(saleOrderId); mesBaseBarcodeInfo.setSaleOrderId(saleOrderId);
mesBaseBarcodeInfo.setSaleorderCode(saleOrderCode); mesBaseBarcodeInfo.setSaleorderCode(saleOrderCode);
mesBaseBarcodeInfo.setPlanCode(planCode); mesBaseBarcodeInfo.setPlanCode(mesBaseBarcodeInfo.getPlanCode());
mesBaseBarcodeInfo.setPlanDetailCode(planDetailCode); mesBaseBarcodeInfo.setPlanDetailCode(mesBaseBarcodeInfo.getPlanDetailCode());
mesBaseBarcodeInfo.setCreateTime(currentDate); mesBaseBarcodeInfo.setCreateTime(currentDate);
mesBaseBarcodeInfo.setCreateBy(userName); mesBaseBarcodeInfo.setCreateBy(userName);
@ -611,18 +607,26 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
* @param barcodeIds * @param barcodeIds
* @param printType 1 3 * @param printType 1 3
* @param reprintFlag (1) * @param reprintFlag (1)
* @param printNumber
* @return * @return
*/ */
@Override @Override
@Transactional @Transactional
public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag) { public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber) {
//获取条码List //获取条码List
// List<List<PrintContentVo>> printContents = new ArrayList<>(); // List<List<PrintContentVo>> printContents = new ArrayList<>();
// List<MesBaseBarcodeInfo> toUpdatedBaseBarcodeInfos = new ArrayList<>(); // List<MesBaseBarcodeInfo> toUpdatedBaseBarcodeInfos = new ArrayList<>();
for (Long barcodeId : barcodeIds) { for (Long barcodeId : barcodeIds) {
if (printNumber != null && printNumber > 1) {
for (int i = 0; i < printNumber; i++) {
printBarcodesByBarcodeId(barcodeId, printType, reprintFlag); printBarcodesByBarcodeId(barcodeId, printType, reprintFlag);
} }
} else {
printBarcodesByBarcodeId(barcodeId, printType, reprintFlag);
}
}
// for (MesBaseBarcodeInfo toUpdateMesBaseBarcodeInfo : toUpdatedBaseBarcodeInfos) { // for (MesBaseBarcodeInfo toUpdateMesBaseBarcodeInfo : toUpdatedBaseBarcodeInfos) {
// toUpdateMesBaseBarcodeInfo.setPrintTime(DateUtils.getNowDate()); // toUpdateMesBaseBarcodeInfo.setPrintTime(DateUtils.getNowDate());
@ -898,83 +902,203 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public int insertInternalMesBaseBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) { public int insertInternalMesBaseBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
String productBarcode = mesBaseBarcodeInfo.getProductBarcode(); Long materialId = 0L;
//先获取此4楼的成品条码。判断此成品条码是否有绑定过原材料条码 String productBarcodes = mesBaseBarcodeInfo.getProductBarcode();//多个成品条码以,隔开
MesBaseBarcodeInfo bindProductBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(productBarcode); String splitCharacterEnglish = ",";
if (bindProductBarcodeInfo != null) { String splitCharacterChinese = "";
throw new ServiceException("此成品条码已经打印过原材料条码,无需重复打印"); String[] productBarcodesArr = null;
} if (productBarcodes.indexOf(splitCharacterEnglish) >= 0) {
productBarcodesArr = productBarcodes.split(splitCharacterEnglish);
WmsProductStockVo queryProductStockVo = new WmsProductStockVo();
queryProductStockVo.setProductBatch(productBarcode); } else if (productBarcodes.indexOf(splitCharacterChinese) >= 0) {
R<Boolean> isExistProductStock = remoteWmsService.isExistProductStock(queryProductStockVo, SecurityConstants.INNER); productBarcodesArr = productBarcodes.split(splitCharacterChinese);
if (isExistProductStock.getData()) {
throw new ServiceException("此物料条码还未出库,不能生成原材料条码");
} }
List<MesBaseBarcodeInfo> productBarcodeInfoList = new ArrayList<>();
List<MesBasePalletInfo> basePalletInfoList = new ArrayList<>();
StringBuilder allErrorMsgBuilder = new StringBuilder();
StringBuilder palletBindErrorMsg = new StringBuilder();
boolean palletInfoCodeRepeat = false;
String palletInfoCode = "";
if (productBarcodesArr != null) {
for (String productBarcode : productBarcodesArr) {
//先根据之前的成品条码信息获取托盘信息 //先根据之前的成品条码信息获取托盘信息
MesBasePalletInfo queryPalletInfo = new MesBasePalletInfo(); MesBasePalletInfo basePalletInfo = mesBasePalletInfoMapper.selectMesBasePalletInfoByBarcode(productBarcode);
queryPalletInfo.setMaterialBarcode(productBarcode);
List<MesBasePalletInfo> basePalletInfos = mesBasePalletInfoMapper.selectMesBasePalletInfoList(queryPalletInfo);
if (basePalletInfos == null || basePalletInfos.isEmpty()) {
throw new ServiceException("此成品未绑定托盘信息");
}
String userName = SecurityUtils.getUsername();
Date currentDate = DateUtils.getNowDate();
String barcodeInfo = Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode);
//修改托盘信息的绑定关系为当前原材料的
MesBasePalletInfo basePalletInfo = basePalletInfos.get(0);
basePalletInfo.setMaterialBarcode(barcodeInfo);
basePalletInfo.setUpdateBy(userName);
basePalletInfo.setUpdateTime(currentDate);
mesBasePalletInfoMapper.updateMesBasePalletInfo(basePalletInfo);
MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcode); MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcode);
if (productBarcodeInfo == null) { if (productBarcodeInfo == null) {
throw new ServiceException("成品条码不存在"); allErrorMsgBuilder.append("成品条码").append(productBarcode).append("不存在;");
} } else {
if (StringUtils.isEmpty(productBarcodeInfo.getPalletInfoCode())) { productBarcodeInfoList.add(productBarcodeInfo);
throw new ServiceException("此成品还未绑定托盘信息");
} }
//多个成品条码绑定的条码必须相同
if (basePalletInfo != null) {
if (StringUtils.isEmpty(palletInfoCode)) {
palletInfoCode = basePalletInfo.getPalletInfoCode();
palletBindErrorMsg.append(palletInfoCode);
} else {
if (!palletInfoCode.equals(basePalletInfo.getPalletInfoCode())) {
palletBindErrorMsg.append(",").append(basePalletInfo.getPalletInfoCode());
palletInfoCodeRepeat = true;
}
}
basePalletInfoList.add(basePalletInfo);
}
allErrorMsgBuilder.append(this.checkInternalMesBaseBarcode(productBarcode, productBarcodeInfo, mesBaseBarcodeInfo));
}
} else {
MesBasePalletInfo basePalletInfo = mesBasePalletInfoMapper.selectMesBasePalletInfoByBarcode(productBarcodes);
if (basePalletInfo == null) {
allErrorMsgBuilder.append("此成品条码没有绑定托盘信息;");
} else {
palletInfoCode = basePalletInfo.getPalletInfoCode();
}
MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcodes);
if (productBarcodeInfo == null) {
allErrorMsgBuilder.append("此成品条码不存在;");
}
allErrorMsgBuilder.append(this.checkInternalMesBaseBarcode(productBarcodes, productBarcodeInfo, mesBaseBarcodeInfo));
productBarcodeInfoList.add(productBarcodeInfo);
basePalletInfoList.add(basePalletInfo);
materialId = productBarcodeInfo.getMaterialId();
}
if (palletInfoCodeRepeat) {
allErrorMsgBuilder.append("托盘号不同,请重新绑定(").append(palletBindErrorMsg).append(");");
}
if (allErrorMsgBuilder.length() > 0) {
throw new ServiceException(allErrorMsgBuilder.toString());
}
String barcodeInfo = Seq.getId(Seq.mesBarcodeSeqType, Seq.mesBarcodeCode);
String userName = SecurityUtils.getUsername();
Date currentDate = DateUtils.getNowDate();
//修改托盘信息的绑定关系为当前原材料的
if (basePalletInfoList == null || basePalletInfoList.isEmpty()) {
throw new ServiceException("没有绑定托盘信息;请先绑定");
}
for (MesBasePalletInfo toUpdatePalletInfo : basePalletInfoList) {
toUpdatePalletInfo.setMaterialBarcode(barcodeInfo);
toUpdatePalletInfo.setUpdateBy(userName);
toUpdatePalletInfo.setUpdateTime(currentDate);
mesBasePalletInfoMapper.updateMesBasePalletInfo(toUpdatePalletInfo);
}
mesBaseBarcodeInfo.setBarcodeInfo(barcodeInfo);
mesBaseBarcodeInfo.setBatchCode(barcodeInfo);
mesBaseBarcodeInfo.setMaterialId(materialId);
mesBaseBarcodeInfo.setBatchFlag(MesConstants.NOT_IS_BATCH);
mesBaseBarcodeInfo.setAmount(BigDecimal.ONE);
mesBaseBarcodeInfo.setBarcodeType(MesConstants.MES_BARCODE_TYPE_RAW);
mesBaseBarcodeInfo.setPalletInfoCode(palletInfoCode);
mesBaseBarcodeInfo.setProductBarcode(null);
mesBaseBarcodeInfo.setSingleFlag(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL);
mesBaseBarcodeInfo.setCompleteFlag(MesConstants.MES_BASE_BARCODE_COMPLETE_FLAG_NO);
// if (productBarcodeInfo.getSaleOrderId() != null && !productBarcodeInfo.getSaleOrderId().equals(0L)) {
// mesBaseBarcodeInfo.setSaleOrderId(productBarcodeInfo.getSaleOrderId());
// mesBaseBarcodeInfo.setSaleorderCode(productBarcodeInfo.getSaleorderCode());
// mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_NO);
// } else {
// mesBaseBarcodeInfo.setSaleOrderId(0L);
// mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES);
// }
mesBaseBarcodeInfo.setCreateTime(currentDate);
mesBaseBarcodeInfo.setCreateBy(userName);
mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(mesBaseBarcodeInfo);
List<MesBaseBindBarcode> toInsertedBaseBindBarcodeList = new ArrayList<>();
for (MesBaseBarcodeInfo productBarcodeInfo : productBarcodeInfoList) {
if (StringUtils.isNotEmpty(productBarcodeInfo.getPalletInfoCode())) {
productBarcodeInfo.setPalletInfoCode(""); productBarcodeInfo.setPalletInfoCode("");
productBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_UNBINDING); productBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_UNBINDING);
productBarcodeInfo.setUpdateTime(currentDate); productBarcodeInfo.setUpdateTime(currentDate);
productBarcodeInfo.setUpdateBy(userName); productBarcodeInfo.setUpdateBy(userName);
mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(productBarcodeInfo); mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(productBarcodeInfo);
}
MesBaseBindBarcode baseBindBarcode = new MesBaseBindBarcode();
baseBindBarcode.setBindBarcode(productBarcodeInfo.getBarcodeInfo());
baseBindBarcode.setBarcodeId(mesBaseBarcodeInfo.getBarcodeId());
baseBindBarcode.setBarcodeInfo(barcodeInfo);
baseBindBarcode.setSaleOrderId(mesBaseBarcodeInfo.getSaleOrderId());
baseBindBarcode.setCreateBy(userName);
baseBindBarcode.setCreateTime(new Date());
toInsertedBaseBindBarcodeList.add(baseBindBarcode);
}
return mesBaseBindBarcodeMapper.batchMesBaseBindBarcode(toInsertedBaseBindBarcodeList);
}
public String checkInternalMesBaseBarcode(String productBarcode, MesBaseBarcodeInfo productBarcodeInfo, MesBaseBarcodeInfo mesBaseBarcodeInfo) {
StringBuilder errorMsg = new StringBuilder();
//先获取此4楼的成品条码。判断此成品条码是否有绑定过原材料条码
MesBaseBindBarcode bindProductBarcodeInfo = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(productBarcode);
if (bindProductBarcodeInfo != null) {
errorMsg.append("成品条码[").append(productBarcode).append("]已经生成过原材料条码,无需重复生成;");
}
//多个成品条码的销售订单要相同,并且需要与当前生产明细的销售订单相同;
String produceSaleOrderCode = StringUtils.isEmpty(mesBaseBarcodeInfo.getSaleorderCode()) ? "无"
: mesBaseBarcodeInfo.getSaleorderCode();
String productSaleOrderCode = StringUtils.isEmpty(productBarcodeInfo.getSaleorderCode()) ? "无"
: productBarcodeInfo.getSaleorderCode();
if (!produceSaleOrderCode.equals(productSaleOrderCode)) {
errorMsg.append("成品条码销售订单与当前生产明细不同(成品条码:").append(productBarcode)
.append(",销售订单:").append(productSaleOrderCode)
.append(",当前生产明细销售订单:").append(produceSaleOrderCode).append(");");
}
if (!productBarcodeInfo.getCompleteFlag().equals(MesConstants.MES_BASE_BARCODE_COMPLETE_FLAG_NO)) {
errorMsg.append("成品条码[").append(productBarcode).append("]是完整物料,未拆分;");
}
WmsProductStockVo queryProductStockVo = new WmsProductStockVo();
queryProductStockVo.setProductBatch(productBarcode);
R<Boolean> isProductOutstock = remoteWmsService.isProductOutstock(queryProductStockVo, SecurityConstants.INNER);
if (!isProductOutstock.getData()) {
errorMsg.append("成品条码[").append(productBarcode).append("]还未出库,不能生成原材料条码;");
}
MesBasePalletInfo queryPalletInfo = new MesBasePalletInfo();
queryPalletInfo.setMaterialBarcode(productBarcode);
//有可能一个托盘有多个成品,但是只绑定了一个,也有可能是从货梯运输上来的
// if (basePalletInfos == null || basePalletInfos.isEmpty()) {
// errorMsg.append("此成品未绑定托盘信息");
// }
// if (StringUtils.isEmpty(productBarcodeInfo.getPalletInfoCode())) {
// errorMsg.append("成品条码""还未绑定托盘信息");
// }
//更新此成品码之前的配对码的绑定码 //更新此成品码之前的配对码的绑定码
MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo(); MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo();
queryBarcodeInfo.setBindBarcode(productBarcode); queryBarcodeInfo.setBindBarcode(productBarcode);
List<MesBaseBarcodeInfo> bindBarcodes = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo); List<MesBaseBarcodeInfo> bindBarcodes = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo);
if (bindBarcodes == null || bindBarcodes.isEmpty()) { if (bindBarcodes == null || bindBarcodes.isEmpty()) {
throw new ServiceException("此成品码没有配对码信息"); errorMsg.append("成品条码").append(productBarcode).append("没有配对码信息;");
} }
mesBaseBarcodeInfo.setBarcodeInfo(barcodeInfo);
mesBaseBarcodeInfo.setBatchCode(barcodeInfo);
mesBaseBarcodeInfo.setBatchFlag(MesConstants.NOT_IS_BATCH);
mesBaseBarcodeInfo.setAmount(BigDecimal.ONE);
mesBaseBarcodeInfo.setBarcodeType(MesConstants.MES_BARCODE_TYPE_RAW);
mesBaseBarcodeInfo.setPalletInfoCode(basePalletInfo.getPalletInfoCode());
mesBaseBarcodeInfo.setSingleFlag(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL);
mesBaseBarcodeInfo.setCompleteFlag(productBarcodeInfo.getCompleteFlag());
if (productBarcodeInfo.getSaleOrderId() != null && !productBarcodeInfo.getSaleOrderId().equals(0L)) {
mesBaseBarcodeInfo.setSaleOrderId(productBarcodeInfo.getSaleOrderId());
mesBaseBarcodeInfo.setSaleorderCode(productBarcodeInfo.getSaleorderCode());
mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_NO);
} else {
mesBaseBarcodeInfo.setSaleOrderId(0L);
mesBaseBarcodeInfo.setSafeFlag(MesConstants.MES_ORDER_BIND_SAFE_FLAG_YES);
}
mesBaseBarcodeInfo.setCreateTime(currentDate);
mesBaseBarcodeInfo.setCreateBy(userName);
return mesBaseBarcodeInfoMapper.insertMesBaseBarcodeInfo(mesBaseBarcodeInfo); return errorMsg.toString();
}
}
/** /**
* *
@ -1371,6 +1495,21 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
return batchCodeBuilder.toString(); return batchCodeBuilder.toString();
} }
/**
*
*
* @param productBarcode
* @return
*/
@Override
public MesBaseBarcodeInfo selectRawBarcodeInfoByProductBarcode(String productBarcode) {
MesBaseBindBarcode mesBaseBindBarcode = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(productBarcode);
return mesBaseBindBarcode == null ? null : mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(mesBaseBindBarcode.getBarcodeInfo());
}
// public MesPurchaseOrder insertVirtualPurchaseOrder(Long materialId, String barcodeInfo, BigDecimal sumOrderAmount, // public MesPurchaseOrder insertVirtualPurchaseOrder(Long materialId, String barcodeInfo, BigDecimal sumOrderAmount,
// List<MesPurchaseOrderRelate> mesPurchaseOrderRelates,String userName, Date currentDate) { // List<MesPurchaseOrderRelate> mesPurchaseOrderRelates,String userName, Date currentDate) {
// MesPurchaseOrder virtualPurchaseOrder = new MesPurchaseOrder(); // MesPurchaseOrder virtualPurchaseOrder = new MesPurchaseOrder();

@ -39,7 +39,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
private MesProductPlanMapper mesProductPlanMapper; private MesProductPlanMapper mesProductPlanMapper;
@Autowired @Autowired
private MesMaterialCheckResultMapper mesMaterialCheckResultMapper; private MesBaseBindBarcodeMapper mesBaseBindBarcodeMapper;
@Autowired @Autowired
private MesBaseBarcodeInfoMapper mesBaseBarcodeInfoMapper; private MesBaseBarcodeInfoMapper mesBaseBarcodeInfoMapper;
@ -259,14 +259,10 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
//如果是五楼拆分,校验是否有配对条码 //如果是五楼拆分,校验是否有配对条码
if (StringUtils.isNotEmpty(mesProductPlanDetail.getProcessType()) if (StringUtils.isNotEmpty(mesProductPlanDetail.getProcessType())
&& mesProductPlanDetail.getProcessType().equals(MesConstants.MES_PROCESS_TYPE_FIFTH_SPLIT)) { && mesProductPlanDetail.getProcessType().equals(MesConstants.MES_PROCESS_TYPE_FIFTH_SPLIT)) {
// //
MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo(); MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo();
queryBarcodeInfo.setPlanDetailCode(dbProductPlanDetail.getPlanDetailCode()); queryBarcodeInfo.setPlanDetailCode(dbProductPlanDetail.getPlanDetailCode());
@ -277,10 +273,6 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
} }
MesBaseBarcodeInfo mesBaseBarcodeInfo = rawBarcodeInfos.get(0); MesBaseBarcodeInfo mesBaseBarcodeInfo = rawBarcodeInfos.get(0);
String bindBarcode; String bindBarcode;
@ -459,7 +451,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
//在拆分区拿柜体拆分时,需要打印配对码,然后跟柜体码绑定 //在拆分区拿柜体拆分时,需要打印配对码,然后跟柜体码绑定
//在从4楼到5楼接驳位时需要根据4楼的成品码重新打印原材料条码 //在从4楼到5楼接驳位时需要根据4楼的成品码重新打印原材料条码
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo( MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(
mesProductPlanDetail.getMaterialBarcode()); mesProductPlanDetail.getRawMaterialBarcode());
if (mesBaseBarcodeInfo == null) { if (mesBaseBarcodeInfo == null) {
throw new ServiceException("无派工任务"); throw new ServiceException("无派工任务");
} }
@ -481,7 +473,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
} }
MesProductPlan queryProductPlan = new MesProductPlan(); MesProductPlan queryProductPlan = new MesProductPlan();
queryProductPlan.setDispatchCode(barcodeProductPlan.getDispatchCode()); queryProductPlan.setDispatchCode(barcodeProductPlan.getDispatchCode());
queryProductPlan.setFinalProcessFlag(MesConstants.MES_FINAL_PROCESS_FLAG_YES); queryProductPlan.setProcessId(mesConfig.getPdaAssembleProcessId());
List<MesProductPlan> mesProductPlans = mesProductPlanMapper.selectOnlyMesProductPlans(queryProductPlan); List<MesProductPlan> mesProductPlans = mesProductPlanMapper.selectOnlyMesProductPlans(queryProductPlan);
if (mesProductPlans == null || mesProductPlans.isEmpty()) { if (mesProductPlans == null || mesProductPlans.isEmpty()) {
throw new ServiceException("没有派工信息"); throw new ServiceException("没有派工信息");
@ -564,12 +556,6 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
throw new ServiceException("配对条码有误,未找到原材料条码信息"); throw new ServiceException("配对条码有误,未找到原材料条码信息");
} }
if (StringUtils.isNotEmpty(bindBarcodeInfo.getSingleFlag()) &&
bindBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL)) {//对内生产
if (StringUtils.isEmpty(bindBarcodeInfo.getProductBarcode())) {
throw new ServiceException("未按成品条码生成原材料条码");
}
}
if (StringUtils.isNotEmpty(bindBarcodeInfo.getTransferredPlanDetailCode())) { if (StringUtils.isNotEmpty(bindBarcodeInfo.getTransferredPlanDetailCode())) {
throw new ServiceException("此条码已经扫描使用过,不能再次使用"); throw new ServiceException("此条码已经扫描使用过,不能再次使用");
@ -578,16 +564,20 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
MesProductPlan barcodeProductPlan; MesProductPlan barcodeProductPlan;
if (bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_PRODUCT)) {//如果是成品码则是4楼绑定的需要找到5楼生成的原材料条码 if (bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_PRODUCT)) {//如果是成品码则是4楼绑定的需要找到5楼生成的原材料条码
//通过productbarcode找到原材料条码 //四楼到5楼的装配开始时有可能柜体还没运输上来还未生成原材料条码,组装出库再判断
MesBaseBarcodeInfo rawBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(mesBaseBarcodeInfo.getBindBarcode()); // MesBaseBindBarcode mesBaseBindBarcode = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(mesBaseBarcodeInfo.getBindBarcode());
if (rawBarcodeInfo == null) { // if (mesBaseBindBarcode ==null) {
throw new ServiceException("未找到原材料条码"); // throw new ServiceException("未按成品条码生成原材料条码");
} // }
barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarcodeInfo.getPlanCode()); //
// //通过绑定的原材料条码内容找到原材料条码,
// MesBaseBarcodeInfo rawBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(mesBaseBindBarcode.getBarcodeInfo());
// if (rawBarcodeInfo == null) {
// throw new ServiceException("未找到原材料条码");
// }
// barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarcodeInfo.getPlanCode());
} else { } else {
barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(mesBaseBarcodeInfo.getPlanCode()); barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(mesBaseBarcodeInfo.getPlanCode());
}
//校验此条码是否是同一派工单 //校验此条码是否是同一派工单
if (barcodeProductPlan == null) { if (barcodeProductPlan == null) {
throw new ServiceException("条码有误,没有相关派工"); throw new ServiceException("条码有误,没有相关派工");
@ -595,6 +585,9 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
if (!barcodeProductPlan.getDispatchCode().equals(dispatchCode)) { if (!barcodeProductPlan.getDispatchCode().equals(dispatchCode)) {
throw new ServiceException("此条码的派工单号为:" + barcodeProductPlan.getDispatchCode() + ",与此派工单号不符"); throw new ServiceException("此条码的派工单号为:" + barcodeProductPlan.getDispatchCode() + ",与此派工单号不符");
} }
}
bindBarcodeInfo.setTransferredPlanDetailCode(planDetailCode); bindBarcodeInfo.setTransferredPlanDetailCode(planDetailCode);
bindBarcodeInfo.setUpdateTime(currentDate); bindBarcodeInfo.setUpdateTime(currentDate);

@ -491,6 +491,7 @@ public class MesProductPlanServiceImpl implements IMesProductPlanService {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
mesProductPlan.setUserId(userId); mesProductPlan.setUserId(userId);
mesProductPlan.setProcessId(processId); mesProductPlan.setProcessId(processId);
mesProductPlan.setIncompleteFlag("1");
// String ipAddress = IpUtils.getIpAddr(); // String ipAddress = IpUtils.getIpAddr();
// MesBaseStationInfo mesBaseStationInfo = mesBase // MesBaseStationInfo mesBaseStationInfo = mesBase
// queryBaseStation.set // queryBaseStation.set

@ -311,6 +311,11 @@
</select> </select>
<select id="selectMesBaseBarcodeInfoByLikeProductBarcode" parameterType="String" resultMap="MesBaseBarcodeInfoResult">
<include refid="selectMesBaseBarcodeInfoVo"/>
where bbi.product_barcode like concat('%', #{productBarcode},'%') limit 1
</select>
<select id="selectMesBaseBarcodeInfoCount" parameterType="MesBaseBarcodeInfo"> <select id="selectMesBaseBarcodeInfoCount" parameterType="MesBaseBarcodeInfo">
select count(1) from mes_base_barcode_info bbi select count(1) from mes_base_barcode_info bbi
<where> <where>

@ -0,0 +1,89 @@
<?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.mes.mapper.MesBaseBindBarcodeMapper">
<resultMap type="MesBaseBindBarcode" id="MesBaseBindBarcodeResult">
<result property="bindBarcodeId" column="bind_barcode_id" />
<result property="barcodeId" column="barcode_id" />
<result property="barcodeInfo" column="barcode_info" />
<result property="saleOrderId" column="sale_order_id" />
<result property="bindBarcode" column="bind_barcode" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
</resultMap>
<sql id="selectMesBaseBindBarcodeVo">
select bind_barcode_id, barcode_id,barcode_info, sale_order_id,bind_barcode, create_by, create_time from mes_base_bind_barcode
</sql>
<select id="selectMesBaseBindBarcodeList" parameterType="MesBaseBindBarcode" resultMap="MesBaseBindBarcodeResult">
<include refid="selectMesBaseBindBarcodeVo"/>
<where>
<if test="barcodeId != null "> and barcode_id = #{barcodeId}</if>
<if test="bindBarcode != null and bindBarcode != ''"> and bind_barcode = #{bindBarcode}</if>
</where>
</select>
<select id="selectMesBaseBindBarcodeByBindBarcodeId" parameterType="Long" resultMap="MesBaseBindBarcodeResult">
<include refid="selectMesBaseBindBarcodeVo"/>
where bind_barcode_id = #{bindBarcodeId}
</select>
<insert id="insertMesBaseBindBarcode" parameterType="MesBaseBindBarcode" useGeneratedKeys="true" keyProperty="bindBarcodeId">
insert into mes_base_bind_barcode
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="barcodeId != null">barcode_id,</if>
<if test="barcodeInfo != null">barcode_info,</if>
<if test="saleOrderId != null">sale_order_id,</if>
<if test="bindBarcode != null and bindBarcode != ''">bind_barcode,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="barcodeId != null">#{barcodeId},</if>
<if test="barcodeInfo != null">#{barcodeInfo},</if>
<if test="saleOrderId != null">#{saleOrderId},</if>
<if test="bindBarcode != null and bindBarcode != ''">#{bindBarcode},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<update id="updateMesBaseBindBarcode" parameterType="MesBaseBindBarcode">
update mes_base_bind_barcode
<trim prefix="SET" suffixOverrides=",">
<if test="barcodeId != null">barcode_id = #{barcodeId},</if>
<if test="bindBarcode != null and bindBarcode != ''">bind_barcode = #{bindBarcode},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
</trim>
where bind_barcode_id = #{bindBarcodeId}
</update>
<delete id="deleteMesBaseBindBarcodeByBindBarcodeId" parameterType="Long">
delete from mes_base_bind_barcode where bind_barcode_id = #{bindBarcodeId}
</delete>
<delete id="deleteMesBaseBindBarcodeByBindBarcodeIds" parameterType="String">
delete from mes_base_bind_barcode where bind_barcode_id in
<foreach item="bindBarcodeId" collection="array" open="(" separator="," close=")">
#{bindBarcodeId}
</foreach>
</delete>
<insert id="batchMesBaseBindBarcode">
insert into mes_base_bind_barcode( bind_barcode_id, barcode_id, barcode_info, sale_order_id,bind_barcode, create_by, create_time) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.bindBarcodeId}, #{item.barcodeId},#{item.barcodeInfo}, #{item.saleOrderId}, #{item.bindBarcode}, #{item.createBy}, #{item.createTime})
</foreach>
</insert>
<select id="selectMesBaseBindBarcodeByBindBarcode" parameterType="String" resultMap="MesBaseBindBarcodeResult">
<include refid="selectMesBaseBindBarcodeVo"/>
where bind_barcode = #{bindBarcode} limit 1
</select>
</mapper>

@ -17,6 +17,7 @@
<result property="produceMaterialId" column="produce_material_id"/> <result property="produceMaterialId" column="produce_material_id"/>
<result property="dispatchType" column="dispatch_type"/> <result property="dispatchType" column="dispatch_type"/>
<result property="dispatchId" column="dispatch_id"/> <result property="dispatchId" column="dispatch_id"/>
<result property="cabinetChannel" column="cabinet_channel"/>
<result property="saleAmount" column="sale_amount"/> <result property="saleAmount" column="sale_amount"/>
<result property="planAmount" column="plan_amount"/> <result property="planAmount" column="plan_amount"/>
<result property="dispatchAmount" column="dispatch_amount"/> <result property="dispatchAmount" column="dispatch_amount"/>
@ -62,6 +63,7 @@
concat(mb.material_name, '-', mb.material_bom_desc) material_bom_desc, concat(mb.material_name, '-', mb.material_bom_desc) material_bom_desc,
mpo.dispatch_type, mpo.dispatch_type,
mpo.dispatch_id, mpo.dispatch_id,
mpo.cabinet_channel,
mbr.route_name dispatchName, mbr.route_name dispatchName,
bmi.material_code, bmi.material_code,
bmi.material_name, bmi.material_name,
@ -162,6 +164,7 @@
<if test="produceMaterialId != null">produce_material_id,</if> <if test="produceMaterialId != null">produce_material_id,</if>
<if test="dispatchType != null and dispatchType != ''">dispatch_type,</if> <if test="dispatchType != null and dispatchType != ''">dispatch_type,</if>
<if test="dispatchId != null">dispatch_id,</if> <if test="dispatchId != null">dispatch_id,</if>
<if test="cabinetChannel != null">cabinet_channel,</if>
<if test="saleAmount != null">sale_amount,</if> <if test="saleAmount != null">sale_amount,</if>
<if test="planAmount != null">plan_amount,</if> <if test="planAmount != null">plan_amount,</if>
<if test="dispatchAmount != null">dispatch_amount,</if> <if test="dispatchAmount != null">dispatch_amount,</if>
@ -195,6 +198,7 @@
<if test="produceMaterialId != null">#{produceMaterialId},</if> <if test="produceMaterialId != null">#{produceMaterialId},</if>
<if test="dispatchType != null and dispatchType != ''">#{dispatchType},</if> <if test="dispatchType != null and dispatchType != ''">#{dispatchType},</if>
<if test="dispatchId != null">#{dispatchId},</if> <if test="dispatchId != null">#{dispatchId},</if>
<if test="cabinetChannel != null">#{cabinetChannel},</if>
<if test="saleAmount != null">#{saleAmount},</if> <if test="saleAmount != null">#{saleAmount},</if>
<if test="planAmount != null">#{planAmount},</if> <if test="planAmount != null">#{planAmount},</if>
<if test="dispatchAmount != null">#{dispatchAmount},</if> <if test="dispatchAmount != null">#{dispatchAmount},</if>
@ -232,6 +236,7 @@
<if test="produceMaterialId != null">produce_material_id = #{produceMaterialId},</if> <if test="produceMaterialId != null">produce_material_id = #{produceMaterialId},</if>
<if test="dispatchType != null and dispatchType != ''">dispatch_type = #{dispatchType},</if> <if test="dispatchType != null and dispatchType != ''">dispatch_type = #{dispatchType},</if>
<if test="dispatchId != null">dispatch_id = #{dispatchId},</if> <if test="dispatchId != null">dispatch_id = #{dispatchId},</if>
<if test="cabinetChannel != null">cabinet_channel = #{cabinetChannel},</if>
<if test="saleAmount != null">sale_amount = #{saleAmount},</if> <if test="saleAmount != null">sale_amount = #{saleAmount},</if>
<if test="planAmount != null">plan_amount = #{planAmount},</if> <if test="planAmount != null">plan_amount = #{planAmount},</if>
<if test="dispatchAmount != null">dispatch_amount = #{dispatchAmount},</if> <if test="dispatchAmount != null">dispatch_amount = #{dispatchAmount},</if>
@ -309,6 +314,7 @@
concat(mb.material_name, '-', mb.material_bom_desc) material_bom_desc, concat(mb.material_name, '-', mb.material_bom_desc) material_bom_desc,
mpo.dispatch_type, mpo.dispatch_type,
mpo.dispatch_id, mpo.dispatch_id,
mpo.cabinet_channel,
mbr.route_name dispatchName, mbr.route_name dispatchName,
bmi.material_code, bmi.material_code,
bmi.material_name, bmi.material_name,

@ -53,6 +53,8 @@
<result property="displayFlag" column="display_flag"/> <result property="displayFlag" column="display_flag"/>
<result property="processProductionTime" column="process_production_time"/> <result property="processProductionTime" column="process_production_time"/>
<result property="nickName" column="nick_name"/> <result property="nickName" column="nick_name"/>
<result property="cabinetChannel" column="cabinet_channel"/>
</resultMap> </resultMap>
<resultMap id="MesProductPlanMesProductPlanDetailResult" type="MesProductPlan" extends="MesProductPlanResult"> <resultMap id="MesProductPlanMesProductPlanDetailResult" type="MesProductPlan" extends="MesProductPlanResult">
@ -347,13 +349,15 @@
mpp.material_bom_id, mpp.process_id, mpp.process_order, mpp.last_process_id,mpp.final_process_flag,mpp.user_id, mpp.material_bom_id, mpp.process_id, mpp.process_order, mpp.last_process_id,mpp.final_process_flag,mpp.user_id,
mpp.station_id, mpp.dispatch_amount, mpp.plan_amount, mpp.complete_amount, mpp.plan_begin_time, mpp.plan_end_time, mpp.station_id, mpp.dispatch_amount, mpp.plan_amount, mpp.complete_amount, mpp.plan_begin_time, mpp.plan_end_time,
mpp.real_begin_time, mpp.real_end_time, mpp.real_begin_time, mpp.real_end_time,
mpp.attach_id, mpp.plan_status, mpo.plan_delivery_date,mpo.sale_type,mbmi.material_code,mbmi.material_name,mbmi.material_spec mpp.attach_id, mpp.plan_status, mpo.plan_delivery_date,mpo.sale_type,mpo.cabinet_channel,
mbmi.material_code,mbmi.material_name,mbmi.material_spec
from mes_product_plan mpp left join mes_product_order mpo on mpp.product_order_id = mpo.product_order_id from mes_product_plan mpp left join mes_product_order mpo on mpp.product_order_id = mpo.product_order_id
left join mes_base_material_info mbmi on mpp.material_id=mbmi.material_id left join mes_base_material_info mbmi on mpp.material_id=mbmi.material_id
<where> <where>
<if test="processId != null ">and mpp.process_id = #{processId}</if> <if test="processId != null ">and mpp.process_id = #{processId}</if>
<if test="userId != null ">and mpp.user_id = #{userId}</if> <if test="userId != null ">and mpp.user_id = #{userId}</if>
<if test="planStatus != null and planStatus != ''">and mpp.plan_status = #{planStatus}</if> <if test="planStatus != null and planStatus != ''">and mpp.plan_status = #{planStatus}</if>
<if test="incompleteFlag != null and incompleteFlag != ''">and mpp.plan_status in ('1','2')</if>
</where> </where>
order by mpp.plan_status,mpp.plan_begin_time order by mpp.plan_status,mpp.plan_begin_time
</select> </select>

@ -4,6 +4,8 @@ import java.util.List;
import java.io.IOException; import java.io.IOException;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.hw.common.security.annotation.InnerAuth;
import com.hw.wms.api.domain.vo.WmsProductStockVo;
import com.hw.wms.domain.vo.WmsProductOutstockAuditVo; import com.hw.wms.domain.vo.WmsProductOutstockAuditVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -141,4 +143,20 @@ public class WmsProductOutstockController extends BaseController
public AjaxResult auditProductOutstock(@Validated @RequestBody WmsProductOutstockAuditVo wmsProductOutstockAuditVo) { public AjaxResult auditProductOutstock(@Validated @RequestBody WmsProductOutstockAuditVo wmsProductOutstockAuditVo) {
return success(wmsProductOutstockService.auditProductOutstock(wmsProductOutstockAuditVo)); return success(wmsProductOutstockService.auditProductOutstock(wmsProductOutstockAuditVo));
} }
/**
*
*/
@InnerAuth
@PostMapping(value = "/isProductOutstock")
public AjaxResult isProductOutstock(@RequestBody WmsProductStockVo queryProductStockVo) {
WmsProductOutstock queryProductOutstock = new WmsProductOutstock();
queryProductOutstock.setProductBatch(queryProductStockVo.getProductBatch());
List<WmsProductOutstock> wmsProductOutstocks = wmsProductOutstockService.selectWmsProductOutstockList(queryProductOutstock);
boolean isProductOutstock = wmsProductOutstocks!= null && !wmsProductOutstocks.isEmpty();
return success(isProductOutstock);
}
} }

@ -24,4 +24,8 @@ public class WmsRawBackVo {
//生产计划编号 //生产计划编号
@NotBlank(message="生产计划明细编号必须输入") @NotBlank(message="生产计划明细编号必须输入")
private String planDetailCode; private String planDetailCode;
//柜体渠道
@NotBlank(message="柜体渠道必须输入")
private String cabinetChannel;
} }

@ -310,7 +310,7 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService {
* 5PDA * 5PDA
*/ */
MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo(); MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo();
mesPdaProductPlanVo.setMaterialBarcode(wmsProduceInstockVo.getMaterialBarcode()); mesPdaProductPlanVo.setRawMaterialBarcode(wmsProduceInstockVo.getMaterialBarcode());
R<?> tdReturnMsg = remoteMesService.complete5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER); R<?> tdReturnMsg = remoteMesService.complete5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER);
if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务 if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务
throw new RuntimeException(tdReturnMsg.getMsg()); throw new RuntimeException(tdReturnMsg.getMsg());

@ -319,6 +319,7 @@ public class WmsProductOutstockServiceImpl implements IWmsProductOutstockService
wmsProductOutstock.setOutstockType(WmsConstants.WMS_PRODUCT_OUTSTOCK_TYPE_SALE); wmsProductOutstock.setOutstockType(WmsConstants.WMS_PRODUCT_OUTSTOCK_TYPE_SALE);
wmsProductOutstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS); wmsProductOutstock.setAuditStatus(WmsConstants.WMS_AUDIT_STATUS_PASS);
wmsProductOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_FINISH); wmsProductOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_FINISH);
wmsProductOutstock.setProductBatch(materialBarcode);
wmsProductOutstock.setApplyBy(userName); wmsProductOutstock.setApplyBy(userName);
wmsProductOutstock.setApplyDate(currentDate); wmsProductOutstock.setApplyDate(currentDate);
wmsProductOutstock.setTaskCode(Seq.getId(Seq.productOutstockSeqType, Seq.productOutstockCode)); wmsProductOutstock.setTaskCode(Seq.getId(Seq.productOutstockSeqType, Seq.productOutstockCode));

@ -287,6 +287,9 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService {
throw new ServiceException("物料条码有误"); throw new ServiceException("物料条码有误");
} }
String cabinetChannel = wmsRawBackVo.getCabinetChannel();
if(cabinetChannel.equals(MesConstants.MES_PRODUCT_ORDER_CABINET_CHANNEL_PURCHASE)){
//判断此柜体是否已跟配对码绑定,如果未绑定不允许返库 //判断此柜体是否已跟配对码绑定,如果未绑定不允许返库
R<MesBaseBarcodeInfo> bindBarcodeInfoR = remoteMesService.getBarcodeByBindBarcode(materialBarcode, SecurityConstants.INNER); R<MesBaseBarcodeInfo> bindBarcodeInfoR = remoteMesService.getBarcodeByBindBarcode(materialBarcode, SecurityConstants.INNER);
if (bindBarcodeInfoR == null) { if (bindBarcodeInfoR == null) {
@ -297,6 +300,20 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService {
throw new ServiceException("没找到绑定信息,不能返库"); throw new ServiceException("没找到绑定信息,不能返库");
} }
//4楼上5楼的不需要申请领柜体所以也不需要返库
WmsRawOutstock queryRawOutsotck = new WmsRawOutstock();
queryRawOutsotck.setPlanDetailCode(wmsRawBackVo.getPlanDetailCode());
queryRawOutsotck.setSplitFlag(WmsConstants.WMS_RAW_OUTSTOCK_SPLIT_FLAG_YES);
List<WmsRawOutstock> wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutsotck);
if (wmsRawOutstocks == null || wmsRawOutstocks.isEmpty()) {
throw new ServiceException("没有领取柜体,无需返库");
}
}else{
}
WmsRawInstock queryReturnRawInstock = new WmsRawInstock(); WmsRawInstock queryReturnRawInstock = new WmsRawInstock();
queryReturnRawInstock.setReturnFlag("1"); queryReturnRawInstock.setReturnFlag("1");
List<WmsRawInstock> returnRawInstocks = wmsRawInstockMapper.selectWmsRawInstockList(queryReturnRawInstock); List<WmsRawInstock> returnRawInstocks = wmsRawInstockMapper.selectWmsRawInstockList(queryReturnRawInstock);
@ -311,15 +328,6 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService {
throw new ServiceException("此生产明细已经申请过返库,无需重复申请"); throw new ServiceException("此生产明细已经申请过返库,无需重复申请");
} }
//4楼上5楼的不需要申请领柜体所以也不需要返库
WmsRawOutstock queryRawOutsotck = new WmsRawOutstock();
queryRawOutsotck.setPlanDetailCode(wmsRawBackVo.getPlanDetailCode());
queryRawOutsotck.setSplitFlag(WmsConstants.WMS_RAW_OUTSTOCK_SPLIT_FLAG_YES);
List<WmsRawOutstock> wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutsotck);
if (wmsRawOutstocks == null || wmsRawOutstocks.isEmpty()) {
throw new ServiceException("没有领取柜体,无需返库");
}
if (!baseBarcodeInfo.getPlanDetailCode().equals(wmsRawBackVo.getPlanDetailCode())) { if (!baseBarcodeInfo.getPlanDetailCode().equals(wmsRawBackVo.getPlanDetailCode())) {
throw new ServiceException(String.format("此物料条码明细编号为%s:,与此明细编号不符", baseBarcodeInfo.getPlanDetailCode())); throw new ServiceException(String.format("此物料条码明细编号为%s:,与此明细编号不符", baseBarcodeInfo.getPlanDetailCode()));

@ -333,7 +333,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
if (rawOutstockId != null) { if (rawOutstockId != null) {
wmsRawOutstock = wmsRawOutstockMapper.selectWmsRawOutstockByRawOutstockId(rawOutstockId); wmsRawOutstock = wmsRawOutstockMapper.selectWmsRawOutstockByRawOutstockId(rawOutstockId);
} else { } else {
wmsRawOutstock = this.getWmsRawOutstock(baseLocation,baseBarcodeInfo); wmsRawOutstock = this.getWmsRawOutstock(baseLocation, baseBarcodeInfo);
} }
@ -387,7 +387,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
return 1; return 1;
} }
public WmsRawOutstock getWmsRawOutstock(WmsBaseLocation baseLocation,MesBaseBarcodeInfo baseBarcodeInfo){ public WmsRawOutstock getWmsRawOutstock(WmsBaseLocation baseLocation, MesBaseBarcodeInfo baseBarcodeInfo) {
WmsRawOutstock queryRawOutstock = new WmsRawOutstock(); WmsRawOutstock queryRawOutstock = new WmsRawOutstock();
queryRawOutstock.setWarehouseId(baseLocation.getWarehouseId()); queryRawOutstock.setWarehouseId(baseLocation.getWarehouseId());
queryRawOutstock.setMaterialId(baseBarcodeInfo.getMaterialId()); queryRawOutstock.setMaterialId(baseBarcodeInfo.getMaterialId());
@ -969,7 +969,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) { public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) {
/**1wcs /**1wcs
* 2 * 2
* 3WCS * 3WCS
* * * *
*/ */
String materialBarcode = wmsAssembleOutstockVo.getMaterialBarcode();//配对码 String materialBarcode = wmsAssembleOutstockVo.getMaterialBarcode();//配对码
@ -987,7 +987,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
} }
/**在申请领柜体后wms插入wms_raw_outstock,wcs插入wms_raw_outstock_detail更新wms_raw_outstock*/ /**在申请领柜体后wms插入wms_raw_outstock,wcs插入wms_raw_outstock_detail更新wms_raw_outstock*/
String bindBarcode = baseBarcodeInfo.getBindBarcode();//原柜体条码 String bindBarcode = baseBarcodeInfo.getBindBarcode();//配对码绑定的原柜体条码(四楼到五楼的是成品码,外部采购的是原材料条码)
if (StringUtils.isEmpty(bindBarcode)) { if (StringUtils.isEmpty(bindBarcode)) {
throw new ServiceException("此柜体还未绑定"); throw new ServiceException("此柜体还未绑定");
} }
@ -1002,26 +1002,26 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
} }
String assembleMaterialBarcode,planCode,planDetailCode,palletInfoCode; String assembleMaterialBarcode, planCode, planDetailCode, palletInfoCode;
Long materialId; Long materialId;
if (!bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) { if (!bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) {
//bindBarcode在这成品码通过productbarcode找到5楼拆分区新生成的原材料条码 //bindBarcode在这成品码通过productbarcode找到5楼拆分区新生成的原材料条码
R<MesBaseBarcodeInfo> productBarcodeInfoR = remoteMesService.getBarcodeByProductBarcode(bindBarcode, SecurityConstants.INNER); R<MesBaseBarcodeInfo> rawBarcodeInfoR = remoteMesService.getRawBarcodeByProductBarcode(bindBarcode, SecurityConstants.INNER);
if (productBarcodeInfoR == null) { if (rawBarcodeInfoR == null) {
throw new ServiceException("没有绑定的原材料条码"); throw new ServiceException("没有绑定的原材料条码");
} }
MesBaseBarcodeInfo productBarcodeInfo = productBarcodeInfoR.getData(); MesBaseBarcodeInfo rawBarcodeInfo = rawBarcodeInfoR.getData();
if (productBarcodeInfo == null) { if (rawBarcodeInfo == null) {
throw new ServiceException("没有绑定的原材料条码"); throw new ServiceException("没有绑定的原材料条码");
} }
assembleMaterialBarcode = productBarcodeInfo.getBarcodeInfo(); assembleMaterialBarcode = rawBarcodeInfo.getBarcodeInfo();
planCode = productBarcodeInfo.getPlanCode(); planCode = rawBarcodeInfo.getPlanCode();
planDetailCode = productBarcodeInfo.getPlanDetailCode(); planDetailCode = rawBarcodeInfo.getPlanDetailCode();
palletInfoCode = productBarcodeInfo.getPalletInfoCode(); palletInfoCode = rawBarcodeInfo.getPalletInfoCode();
materialId = productBarcodeInfo.getMaterialId(); materialId = rawBarcodeInfo.getMaterialId();
}else{ } else {
assembleMaterialBarcode = bindBarcode;//组装出库的料条码 assembleMaterialBarcode = bindBarcode;//组装出库的原材料条码
planCode = bindBarcodeInfo.getPlanCode(); planCode = bindBarcodeInfo.getPlanCode();
planDetailCode = bindBarcodeInfo.getPlanDetailCode(); planDetailCode = bindBarcodeInfo.getPlanDetailCode();
palletInfoCode = bindBarcodeInfo.getPalletInfoCode(); palletInfoCode = bindBarcodeInfo.getPalletInfoCode();
@ -1032,19 +1032,50 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
WmsRawOutstock queryRawOutstock = new WmsRawOutstock(); WmsRawOutstock queryRawOutstock = new WmsRawOutstock();
queryRawOutstock.setMaterialBatch(assembleMaterialBarcode); queryRawOutstock.setMaterialBatch(assembleMaterialBarcode);
List<WmsRawOutstock> wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutstock); List<WmsRawOutstock> wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutstock);
WmsRawStock queryRawStock = new WmsRawStock();
queryRawStock.setInstockBatch(assembleMaterialBarcode);
// queryRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_NO);
List<WmsRawStock> wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock);
//如果是对内生产的柜体,则判断
if (baseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_INTERNAL)) {
if (wmsRawOutstocks == null || wmsRawOutstocks.isEmpty()) {
this.assembleRawOutstock(wmsRawStocks, assembleMaterialBarcode, planCode, planDetailCode,
palletInfoCode, materialId, bindBarcodeInfo.getSaleOrderId());
}
} else {
if (wmsRawOutstocks != null && !wmsRawOutstocks.isEmpty()) { if (wmsRawOutstocks != null && !wmsRawOutstocks.isEmpty()) {
throw new ServiceException("已经有此物料出库记录"); throw new ServiceException("已经有此物料出库记录");
} }
WmsRawStock queryRawStock = new WmsRawStock(); this.assembleRawOutstock(wmsRawStocks, assembleMaterialBarcode, planCode, planDetailCode,
queryRawStock.setInstockBatch(assembleMaterialBarcode); palletInfoCode, materialId, bindBarcodeInfo.getSaleOrderId());
queryRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_NO); }
List<WmsRawStock> wmsRawStocks = wmsRawStockMapper.selectWmsRawStockInList(queryRawStock);
MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo();
mesPdaProductPlanVo.setRawMaterialBarcode(assembleMaterialBarcode);//采购的柜体原材料条码或者4楼到5楼后生成的原材料条码
mesPdaProductPlanVo.setMaterialBarcode(bindBarcode);// 采购的bindbarcode就是采购的原材料条码而四楼到5楼的则是在4楼绑定的成品条码。原柜体的条码之前的原材料条码或成品条码start后在plandetail保存此码
R<?> tdReturnMsg = remoteMesService.start5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER);
if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务
throw new ServiceException(tdReturnMsg.getMsg());
}
return 1;
}
public void assembleRawOutstock(List<WmsRawStock> wmsRawStocks, String assembleMaterialBarcode, String planCode, String planDetailCode,
String palletInfoCode, Long materialId, Long saleOrderId) {
if (wmsRawStocks == null || wmsRawStocks.isEmpty()) { if (wmsRawStocks == null || wmsRawStocks.isEmpty()) {
throw new ServiceException("没找到库存信息"); throw new ServiceException("没找到库存信息");
} }
WmsRawStock wmsRawStock = wmsRawStocks.get(0); //待agv出库后wcs更新库存信息需要删除库存由于是1个 WmsRawStock wmsRawStock = wmsRawStocks.get(0); //待agv出库后wcs更新库存信息需要删除库存由于是1个
if (wmsRawStock.getCompleteFlag().equals(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_YES)) {
throw new ServiceException("绑定的柜体为完整库存,未拆分过");
}
WmsRawOutstock wmsRawOutstock = new WmsRawOutstock(); WmsRawOutstock wmsRawOutstock = new WmsRawOutstock();
wmsRawOutstock.setTaskCode(Seq.getId(Seq.rawOutstockSeqType, Seq.rawOutstockSeqCode)); wmsRawOutstock.setTaskCode(Seq.getId(Seq.rawOutstockSeqType, Seq.rawOutstockSeqCode));
@ -1055,9 +1086,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
wmsRawOutstock.setPlanDetailCode(planDetailCode); wmsRawOutstock.setPlanDetailCode(planDetailCode);
wmsRawOutstock.setPalletInfoCode(palletInfoCode);//在绑定时需要在条码信息中记录托盘码 wmsRawOutstock.setPalletInfoCode(palletInfoCode);//在绑定时需要在条码信息中记录托盘码
wmsRawOutstock.setMaterialId(materialId); wmsRawOutstock.setMaterialId(materialId);
wmsRawOutstock.setSaleOrderId(saleOrderId);//销售订单ID都是一样的
wmsRawOutstock.setSaleOrderId(bindBarcodeInfo.getSaleOrderId());//销售订单ID都是一样的
wmsRawOutstock.setOutstockAmount(BigDecimal.ONE); wmsRawOutstock.setOutstockAmount(BigDecimal.ONE);
wmsRawOutstock.setEndStationCode(wmsConfig.getFifthAssembleStationCode());//目标位置,五楼组装区域 wmsRawOutstock.setEndStationCode(wmsConfig.getFifthAssembleStationCode());//目标位置,五楼组装区域
wmsRawOutstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_AUTO); wmsRawOutstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_AUTO);
@ -1068,18 +1097,8 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
wmsRawOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE); wmsRawOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE);
wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock); wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock);
MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo();
mesPdaProductPlanVo.setMaterialBarcode(assembleMaterialBarcode);//原柜体的条码之前的原材料条码start后在plandetail保存此码
R<?> tdReturnMsg = remoteMesService.start5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER);
if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务
throw new ServiceException(tdReturnMsg.getMsg());
} }
return 1;
}
/** /**
* *
* *

@ -17,6 +17,7 @@ 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.MesBaseStationInfo; import com.hw.mes.api.domain.MesBaseStationInfo;
import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo; import com.hw.mes.api.domain.vo.MesSaleOrderTransferVo;
import com.hw.wms.config.WmsConfig;
import com.hw.wms.domain.WmsBaseLocation; import com.hw.wms.domain.WmsBaseLocation;
import com.hw.wms.domain.WmsProductStock; import com.hw.wms.domain.WmsProductStock;
import com.hw.wms.domain.WmsRawStock; import com.hw.wms.domain.WmsRawStock;
@ -55,6 +56,9 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService {
@Autowired @Autowired
private RemoteMesService remoteMesService; private RemoteMesService remoteMesService;
@Autowired
private WmsConfig wmsConfig;
public static final int TRANSFER_TYPE_RAW_STOCK = 1; public static final int TRANSFER_TYPE_RAW_STOCK = 1;
public static final int TRANSFER_TYPE_STOCK_TOTAL = 2; public static final int TRANSFER_TYPE_STOCK_TOTAL = 2;
@ -148,7 +152,9 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService {
@Override @Override
public List<WmsStockTotal> selectWmsStockTotalJoinListBySaleOrder(WmsStockTotal wmsStockTotal) { public List<WmsStockTotal> selectWmsStockTotalJoinListBySaleOrder(WmsStockTotal wmsStockTotal) {
String materialClassfication = wmsStockTotal.getMaterialClassfication(); String materialClassfication = wmsStockTotal.getMaterialClassfication();
if (materialClassfication.equals(MesConstants.MES_MATERIAL_CLASSFICATION_VIRTUAL)) { Long warehouseId = wmsStockTotal.getWarehouseId();
if (warehouseId.equals(wmsConfig.getFifthCabinetWarehouseId()) && materialClassfication.equals(MesConstants.MES_MATERIAL_CLASSFICATION_VIRTUAL)) {
wmsStockTotal.setMaterialId(wmsStockTotal.getProductId()); wmsStockTotal.setMaterialId(wmsStockTotal.getProductId());
wmsStockTotal.setAccessoriesFlag(null); wmsStockTotal.setAccessoriesFlag(null);
} else { } else {

@ -75,6 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="taskCode != null and taskCode != ''"> and task_code = #{taskCode}</if> <if test="taskCode != null and taskCode != ''"> and task_code = #{taskCode}</if>
<if test="warehouseId != null "> and warehouse_id = #{warehouseId}</if> <if test="warehouseId != null "> and warehouse_id = #{warehouseId}</if>
<if test="locationCode != null and locationCode != ''"> and location_code = #{locationCode}</if> <if test="locationCode != null and locationCode != ''"> and location_code = #{locationCode}</if>
<if test="productBatch != null and productBatch != ''"> and product_batch = #{productBatch}</if>
<if test="productType != null and productType != ''"> and product_type = #{productType}</if> <if test="productType != null and productType != ''"> and product_type = #{productType}</if>
<if test="operationType != null and operationType != ''"> and operation_type = #{operationType}</if> <if test="operationType != null and operationType != ''"> and operation_type = #{operationType}</if>
<if test="outstockType != null and outstockType != ''"> and outstock_type = #{outstockType}</if> <if test="outstockType != null and outstockType != ''"> and outstock_type = #{outstockType}</if>

@ -28,6 +28,15 @@ export function printProductBarcodes(barcodeIds) {
} }
// 打印配对条码
export function printBindBarcodes(barcodeIds,printNumber) {
return request({
url: '/mes/api/printBindBarcodes/' + barcodeIds+'/'+printNumber,
method: 'get'
})
}
// 重新生成成品条码信息,之前的条码作废 // 重新生成成品条码信息,之前的条码作废
export function regenerateBarcode(data) { export function regenerateBarcode(data) {
return request({ return request({

@ -27,7 +27,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <!--el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
plain plain
@ -37,13 +37,13 @@
:disabled="batchPrintBtnDisabled" :disabled="batchPrintBtnDisabled"
>打印 >打印
</el-button> </el-button>
</el-col> </el-col-->
<!--right-toolbar :columns="columns" :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar--> <!--right-toolbar :columns="columns" :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar-->
</el-row> </el-row>
<el-table v-loading="loading" :data="barcodeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="barcodeList" @selection-change="handleSelectionChange">
<el-table-column align="center" type="selection" width="55"/> <!--el-table-column align="center" type="selection" width="55"/-->
<el-table-column v-if="columns[0].visible" align="center" label="主键标识" prop="barcodeId"/> <el-table-column v-if="columns[0].visible" align="center" label="主键标识" prop="barcodeId"/>
<el-table-column v-if="columns[4].visible" align="center" label="条码类型" prop="barcodeType"> <el-table-column v-if="columns[4].visible" align="center" label="条码类型" prop="barcodeType">
<template slot-scope="scope"> <template slot-scope="scope">
@ -98,19 +98,50 @@
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
plain
icon="el-icon-refresh" icon="el-icon-refresh"
@click="regenerateBarcode(scope.row)" @click="regenerateBarcode(scope.row)"
v-if="scope.row.printFlag ==='1'" v-if="scope.row.printFlag ==='1' && scope.row.barcodeType !== BARCODE_TYPE.BIND_BARCODE"
>重新生成 >重新生成
</el-button> </el-button>
&nbsp;&nbsp;&nbsp;&nbsp;
<el-button <el-button
size="mini" size="mini"
type="text" type="success"
plain
icon="el-icon-printer" icon="el-icon-printer"
@click="handlePrintBarcodes(scope.row)" @click="handlePrintBarcodes(scope.row)"
v-if="scope.row.printFlag ==='0'" v-if="scope.row.printFlag ==='0' && scope.row.barcodeType !== BARCODE_TYPE.BIND_BARCODE"
> >
</el-button> </el-button>
<el-popover
placement="top"
width="260"
ref="popoverRef"
v-if="scope.row.barcodeType === BARCODE_TYPE.BIND_BARCODE"
trigger="click">
<div>
<div style="margin: 15px 0;">
<el-input-number placeholder="请输入打印数量" :min=1 :max=1000 v-model="printNumber">
</el-input-number>
</div>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="closePopover"></el-button>
<el-button type="primary" size="mini" @click="handlePrintBindBarcodes(scope.row)"></el-button>
</div>
</div>
<el-button
slot="reference"
icon="el-icon-printer"
plain
size="mini"
@click="printNumber = null"
type="success">
</el-button>
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -142,13 +173,15 @@
</el-form-item> </el-form-item>
<el-form-item label="配对码数量" prop="barcodeAmount" <el-form-item label="配对码数量" prop="barcodeAmount"
v-if="this.form.barcodeType === this.BARCODE_TYPE.BIND_BARCODE"> v-if="this.form.barcodeType === this.BARCODE_TYPE.BIND_BARCODE && this.defineData.barcodeType && this.defineData.barcodeType !==this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE">
<el-input-number v-model="form.barcodeAmount" :min="1" :max="1000"> <el-input-number v-model="form.barcodeAmount" :min=1 :max=1000>
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="原材料条码" prop="productBarcode"> <el-form-item label="原材料条码" prop="productBarcode"
<el-input v-model="form.productBarcode" placeholder="请扫描或输入原材料条码" suffix-icon="el-icon-full-screen"> v-if="this.defineData.singleFlag === SINGLE_FLAG.YES">
<el-input v-model="form.productBarcode" placeholder="请扫描或输入原材料条码"
suffix-icon="el-icon-full-screen">
</el-input> </el-input>
</el-form-item> </el-form-item>
@ -184,25 +217,24 @@
<el-dialog :title="internalTitle" :visible.sync="internalOpen" width="500px" append-to-body> <el-dialog :title="internalTitle" :visible.sync="internalOpen" width="500px" append-to-body>
<el-form ref="internalForm" :model="internalForm" :rules="internalRules" label-width="100px"> <el-form ref="internalForm" :model="internalForm" :rules="internalRules" label-width="100px">
<el-form-item label="成品条码" prop="productBarcode"> <el-form-item label="成品条码" prop="productBarcode">
<el-input v-model="internalForm.productBarcode" placeholder="请输入或扫描成品条码" class="input-with-select" <el-input type="textarea" v-model="internalForm.productBarcode" placeholder="请输入或扫描成品条码,多个以,隔开" class="input-with-select">
@blur="selectProductBarcodeInfoByBarcodeInfo">
<el-button slot="append" icon="el-icon-full-screen"></el-button> <el-button slot="append" icon="el-icon-full-screen"></el-button>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="物料ID" prop="materialId" v-if="false"> <!-- <el-form-item label="物料ID" prop="materialId" v-if="false">-->
<el-input v-model="internalForm.materialId" placeholder="请输入物料ID"/> <!-- <el-input v-model="internalForm.materialId" placeholder="请输入物料ID"/>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="物料编码" prop="materialCode"> <!-- <el-form-item label="物料编码" prop="materialCode">-->
<el-input v-model="internalForm.materialCode" disabled/> <!-- <el-input v-model="internalForm.materialCode" disabled/>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="物料名称" prop="materialName"> <!-- <el-form-item label="物料名称" prop="materialName">-->
<el-input v-model="internalForm.materialName" :disabled="true"/> <!-- <el-input v-model="internalForm.materialName" :disabled="true"/>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="物料规格" prop="materialSpec"> <!-- <el-form-item label="物料规格" prop="materialSpec">-->
<el-input v-model="internalForm.materialSpec" :disabled="true"/> <!-- <el-input v-model="internalForm.materialSpec" :disabled="true"/>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item label="生产日期" prop="productionDate"> <el-form-item label="生产日期" prop="productionDate">
<el-date-picker clearable <el-date-picker clearable
@ -227,13 +259,12 @@
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitInternalForm"> </el-button> <el-button type="primary" :loading="submitLoading" @click="submitInternalForm"> </el-button>
<el-button @click="cancelInternal"> </el-button> <el-button @click="cancelInternal"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@ -242,6 +273,7 @@ import {
listProductBarcode, listProductBarcode,
addProductBarcode, addProductBarcode,
printProductBarcodes, printProductBarcodes,
printBindBarcodes,
selectProductBarcodeInfoByBarcodeInfo, selectProductBarcodeInfoByBarcodeInfo,
addInternalBarcode, regenerateBarcode addInternalBarcode, regenerateBarcode
} from "@/api/board/barcode"; } from "@/api/board/barcode";
@ -254,7 +286,7 @@ export default {
// //
loading: true, loading: true,
// //
submitLoading:false, submitLoading: false,
// //
ids: [], ids: [],
barcodeInfos: [], barcodeInfos: [],
@ -282,8 +314,8 @@ export default {
internalForm: {}, internalForm: {},
// //
internalRules: { internalRules: {
materialCode: [ productBarcode: [
{required: true, message: "物料编码不能为空", trigger: "blur"} {required: true, message: "成品条码不能为空", trigger: "blur"}
], ],
}, },
@ -324,6 +356,9 @@ export default {
form: {}, form: {},
// //
rules: { rules: {
productBarcode: [
{required: true, message: "原材料条码不能为空", trigger: "blur"}
],
orderCode: [ orderCode: [
{required: true, message: "工单编号不能为空", trigger: "blur"} {required: true, message: "工单编号不能为空", trigger: "blur"}
], ],
@ -342,6 +377,7 @@ export default {
materialId: [ materialId: [
{required: true, message: "物料ID不能为空", trigger: "blur"} {required: true, message: "物料ID不能为空", trigger: "blur"}
], ],
}, },
columns: [ columns: [
{key: 0, label: `主键标识`, visible: false}, {key: 0, label: `主键标识`, visible: false},
@ -391,14 +427,20 @@ export default {
}, },
BARCODE_TYPE_PARAM: { BARCODE_TYPE_PARAM: {
PRODUCT:'3',// PRODUCT: '3',//
PRODUCT_BARCODE: '4',// PRODUCT_BARCODE: '4',//
SPLIT_BIND_BARCODE: '5', // SPLIT_BIND_BARCODE: '5', //
}, },
SINGLE_FLAG: { SINGLE_FLAG: {
YES: '1',// YES: '1',//
INTERNAL: "2",// INTERNAL: "2",//
} INTERNAL_PRODUCT: "3",//
},
SAFE_FLAG:{
YES: '1',//
NO:"0"
},
printNumber: null,
}; };
}, },
mounted() { mounted() {
@ -424,8 +466,15 @@ export default {
// }, // },
methods: { methods: {
getData() { getData() {
//barcodeType=3,ok
//barcodeType=4singleFlag=0,ok,
//barcodeType=4singleFlag=2,ok
//barcodeType=5,ok
//barcodeType=nullsingleFlag=2
//barcodeType=3singleFlag =1
//
if (this.defineData.barcodeType) { if (this.defineData.barcodeType) {
let barcodeType = this.defineData.barcodeType ? this.defineData.barcodeType : this.BARCODE_TYPE.PRODUCT; let barcodeType = this.defineData.barcodeType;
let bindBarcode = this.defineData.bindBarcode ? this.defineData.bindBarcode : ''; let bindBarcode = this.defineData.bindBarcode ? this.defineData.bindBarcode : '';
this.barcodeTypeParam = barcodeType; this.barcodeTypeParam = barcodeType;
@ -436,32 +485,33 @@ export default {
this.queryParams.bindOrFlag = "1"; this.queryParams.bindOrFlag = "1";
// this.queryParams.barcodeTypeStr = this.BARCODE_TYPE.PRODUCT + "," + this.BARCODE_TYPE.BIND_BARCODE; // this.queryParams.barcodeTypeStr = this.BARCODE_TYPE.PRODUCT + "," + this.BARCODE_TYPE.BIND_BARCODE;
} else if (barcodeType === this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE) {// } else if (barcodeType === this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE) {//
this.queryParams.barcodeType = this.BARCODE_TYPE.RAW ; this.queryParams.barcodeType = this.BARCODE_TYPE.RAW;
this.queryParams.bindOrFlag = "1"; this.queryParams.bindOrFlag = "1";
// this.queryParams.barcodeTypeStr = this.BARCODE_TYPE.RAW + "," + this.BARCODE_TYPE.BIND_BARCODE; // this.queryParams.barcodeTypeStr = this.BARCODE_TYPE.RAW + "," + this.BARCODE_TYPE.BIND_BARCODE;
// this.queryParams.bindOrFlag = "1"; // this.queryParams.bindOrFlag = "1";
} }
alert(JSON.stringify(this.queryParams));
this.form = { this.form = {
planId: this.defineData.planId, planId: this.defineData.planId,
planCode: this.defineData.planCode, planCode: this.defineData.planCode,
planDetailCode: this.defineData.planDetailCode, planDetailCode: this.defineData.planDetailCode,
singleFlag:this.defineData.singleFlag, singleFlag: this.defineData.singleFlag,
saleOrderId:this.defineData.saleOrderId, saleOrderId: this.defineData.saleOrderId,
batchFlag: '0', batchFlag: '0',
bindBarcode: bindBarcode, bindBarcode: bindBarcode,
barcodeType: "", barcodeType: "",
amount: 1, amount: 1,
} }
} else if (this.defineData.singleFlag && this.defineData.singleFlag === this.SINGLE_FLAG.INTERNAL) {// } else if (this.defineData.singleFlag && this.defineData.singleFlag === this.SINGLE_FLAG.INTERNAL) {//
//45plancodeplandetailcode //45plancodeplandetailcode
this.internalForm = { this.internalForm = {
planId: this.defineData.planId, planId: this.defineData.planId,
planCode: this.defineData.planCode, planCode: this.defineData.planCode,
planDetailCode: this.defineData.planDetailCode, planDetailCode: this.defineData.planDetailCode,
saleOrderId:this.defineData.saleOrderId, saleOrderId: this.defineData.saleOrderId,
saleorderCode: this.defineData.saleorderCode,
batchFlag: '0', batchFlag: '0',
amount: 1, amount: 1,
} }
@ -475,6 +525,7 @@ export default {
/** 查询条码信息列表 */ /** 查询条码信息列表 */
getList() { getList() {
this.loading = true; this.loading = true;
// alert(JSON.stringify(this.queryParams));
listProductBarcode(this.queryParams).then(response => { listProductBarcode(this.queryParams).then(response => {
this.barcodeList = response.rows; this.barcodeList = response.rows;
this.total = response.total; this.total = response.total;
@ -486,9 +537,9 @@ export default {
} else { } else {
this.addInternalBtnVisible = false; this.addInternalBtnVisible = false;
this.addProductBarcodeBtnVisible = false; this.addProductBarcodeBtnVisible = false;
if(this.barcodeTypeParam === this.BARCODE_TYPE_PARAM.PRODUCT){ if (this.barcodeTypeParam === this.BARCODE_TYPE_PARAM.PRODUCT) {
this.addBindBarcodeBtnVisible = false; this.addBindBarcodeBtnVisible = false;
}else{ } else {
this.addBindBarcodeBtnVisible = true; this.addBindBarcodeBtnVisible = true;
} }
@ -509,9 +560,7 @@ export default {
this.addProductBarcodeOpen = true; this.addProductBarcodeOpen = true;
this.handleAddProductBarcode(); this.handleAddProductBarcode();
} }
} }
this.loading = false; this.loading = false;
}); });
}, },
@ -640,16 +689,37 @@ export default {
}, },
/** 打印配对条码按钮操作 */
handlePrintBindBarcodes(row) {
const barcodeIds = row.barcodeId || this.ids;
if (barcodeIds == null || barcodeIds == '') {
this.$modal.msgWarning("请选择要打印的物料条码");
return;
}
let printNumber = this.printNumber ? this.printNumber : 1;
printBindBarcodes(barcodeIds, printNumber).then(response => {
this.$modal.msgSuccess("打印条码成功");
this.getList();
}).catch(() => {
});
},
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
this.submitLoading = true; this.submitLoading = true;
if(this.defineData.barcodeType && this.defineData.barcodeType == this.BARCODE_TYPE_PARAM.SPLIT_BIND_BARCODE){
this.form.barcodeAmount = 1;
}
addProductBarcode(this.form).then(response => { addProductBarcode(this.form).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.addProductBarcodeOpen = false; this.addProductBarcodeOpen = false;
this.getList(); this.getList();
}).finally(e =>{ }).finally(e => {
this.submitLoading = false; this.submitLoading = false;
}); });
} }
@ -719,7 +789,7 @@ export default {
return; return;
} }
if(response.data.saleOrderId !== this.internalForm.saleOrderId){ if (response.data.saleOrderId !== this.internalForm.saleOrderId) {
this.resetInternal(); this.resetInternal();
if (this.defineData?.planCode) { if (this.defineData?.planCode) {
this.getData() this.getData()
@ -754,10 +824,15 @@ export default {
submitInternalForm() { submitInternalForm() {
this.$refs["internalForm"].validate(valid => { this.$refs["internalForm"].validate(valid => {
if (valid) { if (valid) {
this.submitLoading = true;
this.internalForm.safeFlag = this.internalForm.saleOrderId > 0 ?
this.SAFE_FLAG.NO : this.SAFE_FLAG.YES;
addInternalBarcode(this.internalForm).then(response => { addInternalBarcode(this.internalForm).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.internalOpen = false; this.internalOpen = false;
this.getList(); this.getList();
}).finally(e => {
this.submitLoading = false;
}); });
} }
@ -791,6 +866,13 @@ export default {
}, },
closePopover() {
document.body.click()
},
} }
}; };
</script> </script>

@ -48,22 +48,23 @@
<el-button size="mini" type="danger" @click="returnMaterial()" v-if="(!$route.query || $route.query.id==='2')" <el-button size="mini" type="danger" @click="returnMaterial()" v-if="(!$route.query || $route.query.id==='2')"
:disabled="!form.planDetailCode">退料 :disabled="!form.planDetailCode">退料
</el-button> </el-button>
<el-button size="mini" type="info" @click="completeReturnMaterials()" v-if="(!$route.query || $route.query.id==='2')" <el-button size="mini" type="info" @click="completeReturnMaterials()"
v-if="(!$route.query || $route.query.id==='2')"
:disabled="!form.planDetailCode">完成退料 :disabled="!form.planDetailCode">完成退料
</el-button> </el-button>
<el-button size="mini" type="primary" v-if="($route.query && $route.query.id) === '1'" <el-button size="mini" type="primary" v-if="($route.query && $route.query.id) === '1'"
:disabled="form.planDetailStatus === '已完成' || !form.planDetailCode" :disabled="form.planDetailStatus === '已完成' || !form.planDetailCode || form.cabinetChannel === CABINET_CHANNEL.INTERNAL "
@click="getMaterials('1')"> @click="getMaterials('1')">
领柜体 领柜体
</el-button> </el-button>
<el-button size="mini" type="danger" v-if="($route.query && $route.query.id) === '1'" <el-button size="mini" type="danger" v-if="($route.query && $route.query.id) === '1'"
:disabled="form.planDetailStatus === '已完成' || !form.planDetailCode" :disabled="form.planDetailStatus === '已完成' || !form.planDetailCode || form.cabinetChannel === CABINET_CHANNEL.INTERNAL"
@click="print()"> @click="print()">
条码 条码
</el-button> </el-button>
<el-button size="mini" type="info" v-if="($route.query && $route.query.id) === '1'" <el-button size="mini" type="info" v-if="($route.query && $route.query.id) === '1'"
:disabled="form.planDetailStatus === '已完成' || !form.planDetailCode" :disabled="form.planDetailStatus === '已完成' || !form.planDetailCode || form.cabinetChannel !== CABINET_CHANNEL.INTERNAL"
@click="printInternalBarcode()"> @click="printInternalBarcode()">
对内条码 对内条码
</el-button> </el-button>
@ -77,7 +78,6 @@
</el-button> </el-button>
<el-button size="mini" type="info" v-if="($route.query && $route.query.id) === '3'" <el-button size="mini" type="info" v-if="($route.query && $route.query.id) === '3'"
:disabled=" !form.planDetailCode" :disabled=" !form.planDetailCode"
@click="printProductBarcode()"> @click="printProductBarcode()">
@ -275,10 +275,10 @@
</div> </div>
</div> </div>
<div> <div>
<div class="roundBorder" style="top: 72%;left: 1.2%;"> <div class="roundBorder" style="top: 36%;left: 1.2%;">
<el-button :disabled="nowNum1 <= 1" circle icon="el-icon-back" size="mini" @click="pre1"></el-button> <el-button :disabled="nowNum1 <= 1" circle icon="el-icon-back" size="mini" @click="pre1"></el-button>
</div> </div>
<div class="roundBorder" style="top: 72%;left: 49%;"> <div class="roundBorder" style="top: 36%;left: 49%;">
<el-button :disabled="nowNum1 >= totalNum1" circle icon="el-icon-right" size="mini" @click="next1"></el-button> <el-button :disabled="nowNum1 >= totalNum1" circle icon="el-icon-right" size="mini" @click="next1"></el-button>
</div> </div>
</div> </div>
@ -292,7 +292,9 @@
<div class="bottom"> <div class="bottom">
<el-row> <el-row>
<el-button type="success" @click="continueRawInstock" v-if="($route.query && $route.query.id) === '1'"></el-button> <el-button type="success" @click="continueRawInstock" v-if="($route.query && $route.query.id) === '1'">
继续调度入库
</el-button>
<el-button type="danger" @click="logout">退</el-button> <el-button type="danger" @click="logout">退</el-button>
</el-row> </el-row>
</div> </div>
@ -300,7 +302,8 @@
<!-- 申请领料信息对话框 --> <!-- 申请领料信息对话框 -->
<el-dialog :title="applyMaterialTitle" :visible.sync="dialogVisible" append-to-body> <el-dialog :title="applyMaterialTitle" :visible.sync="dialogVisible" append-to-body>
<apply-raw-outstock ref="applyRawOutstockRef" :defineData="productPlanData" v-if="dialogVisible"></apply-raw-outstock> <apply-raw-outstock ref="applyRawOutstockRef" :defineData="productPlanData"
v-if="dialogVisible"></apply-raw-outstock>
</el-dialog> </el-dialog>
@ -424,7 +427,8 @@
:visible.sync="continueRawInstockVisible" :visible.sync="continueRawInstockVisible"
title="继续入库" title="继续入库"
width="500px"> width="500px">
<el-form ref="continueRawInstockForm" :model="continueRawInstockForm" :rules="continueRawInstockRules" label-width="80px"> <el-form ref="continueRawInstockForm" :model="continueRawInstockForm" :rules="continueRawInstockRules"
label-width="80px">
<el-form-item label="物料条码" prop="materialBarcode"> <el-form-item label="物料条码" prop="materialBarcode">
<el-input v-model="continueRawInstockForm.materialBarcode" suffix-icon="el-icon-full-screen" <el-input v-model="continueRawInstockForm.materialBarcode" suffix-icon="el-icon-full-screen"
style="width:380px" placeholder="请扫描或输入原材料条码"></el-input> style="width:380px" placeholder="请扫描或输入原材料条码"></el-input>
@ -493,7 +497,7 @@ import {
bindBarcode, bindBarcode,
applyRawBack, applyRawBack,
assignTask, scanMaterial2Confirm, applyRawReturn, assignTask, scanMaterial2Confirm, applyRawReturn,
getNewestOutstockCabinet,updateBarcodePlan, completeCollectMaterials, completeReturnMaterials,continueRawInstock getNewestOutstockCabinet, updateBarcodePlan, completeCollectMaterials, completeReturnMaterials, continueRawInstock
} from "@/api/board"; } from "@/api/board";
import applyRawOutstock from '@//views/board/common/applyRawOutstock.vue'; import applyRawOutstock from '@//views/board/common/applyRawOutstock.vue';
import WorkshopNotice from "@/components/workshopNotice/index.vue"; import WorkshopNotice from "@/components/workshopNotice/index.vue";
@ -523,9 +527,9 @@ export default {
ViewFile ViewFile
}, },
dicts: ['wms_raw_return_task_type', 'mes_safe_flag'], dicts: ['wms_raw_return_task_type', 'mes_safe_flag'],
provide(){ provide() {
return{ return {
closeDialog : this.closeDialog closeDialog: this.closeDialog
} }
}, },
mixins: [noticeData], mixins: [noticeData],
@ -550,7 +554,7 @@ export default {
maxPlanAmount: 1, maxPlanAmount: 1,
taskType: '', taskType: '',
dialogVisible: false, dialogVisible: false,
productPlanData:{}, productPlanData: {},
form: {}, form: {},
form1: {}, form1: {},
assignTaskForm: { assignTaskForm: {
@ -589,7 +593,7 @@ export default {
PROCESS_TYPE: { PROCESS_TYPE: {
FIFTH_SPLIT: '1', FIFTH_SPLIT: '1',
FIFTH_ASSEMBLE: '2', FIFTH_ASSEMBLE: '2',
SELF_CHECK:'3', SELF_CHECK: '3',
}, },
stationData: [ stationData: [
{ {
@ -618,10 +622,10 @@ export default {
}, },
], ],
warehouseList: [], warehouseList: [],
queryParams:{ queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
materialCodeNameSpec:'' materialCodeNameSpec: ''
}, },
// //
total: 0, total: 0,
@ -662,7 +666,6 @@ export default {
}, },
continueRawInstockVisible: false, continueRawInstockVisible: false,
continueRawInstockForm: { continueRawInstockForm: {
materialBarcode: null materialBarcode: null
@ -682,7 +685,24 @@ export default {
RAW: '1',// RAW: '1',//
PRODUCT: '3',// PRODUCT: '3',//
BIND_BARCODE: '4',// BIND_BARCODE: '4',//
SPLIT_BARCODE: '5',//
}, },
PROCESS: {
SPLIT: "1",//
ASSEMBLE: "2",//
SELF_CHECK: "3",//
},
SINGLE_FLAG: {
YES: '1',//
INTERNAL: "2",//
INTERNAL_PRODUCT: "3",//
},
CABINET_CHANNEL: {
PURCHASE: '1',//
INTERNAL: "2",//
},
} }
}, },
async mounted() { async mounted() {
@ -702,7 +722,7 @@ export default {
// this.loginStationInfo = e.data; // this.loginStationInfo = e.data;
//TODO //TODO
this.loginStationInfo = {stationId:"1",stationCode:"ZP_02"} this.loginStationInfo = {stationId: "1", stationCode: "ZP_02"}
this.getProductPlans(); this.getProductPlans();
this.getChartData(); this.getChartData();
}); });
@ -931,7 +951,10 @@ export default {
this.form.materialCode = val.materialCode this.form.materialCode = val.materialCode
this.form.materialName = val.materialName this.form.materialName = val.materialName
this.form.materialSpec = val.materialSpec; this.form.materialSpec = val.materialSpec;
this.form.saleOrderId = val.saleOrderId
this.form.saleorderCode = val.saleorderCode
this.form.dispatchCode = val.dispatchCode; this.form.dispatchCode = val.dispatchCode;
this.form.cabinetChannel = val.cabinetChannel;
this.form.planDetailStatus = setState(data.data.planDetailStatus) this.form.planDetailStatus = setState(data.data.planDetailStatus)
this.getInfo(val) this.getInfo(val)
}, },
@ -970,7 +993,9 @@ export default {
this.form.materialName = val.materialName this.form.materialName = val.materialName
this.form.materialSpec = val.materialSpec this.form.materialSpec = val.materialSpec
this.form.saleOrderId = val.saleOrderId this.form.saleOrderId = val.saleOrderId
this.form.saleorderCode = val.saleorderCode
this.form.dispatchCode = val.dispatchCode; this.form.dispatchCode = val.dispatchCode;
this.form.cabinetChannel = val.cabinetChannel;
if (data) { if (data) {
this.form.planDetailStatus = setState(data.planDetailStatus) this.form.planDetailStatus = setState(data.planDetailStatus)
} }
@ -1394,14 +1419,14 @@ export default {
}, },
closeDialog(){ closeDialog() {
this.dialogVisible = false; this.dialogVisible = false;
}, },
print() { print() {
getNewestOutstockCabinet({planDetailCode: this.form.planDetailCode}).then(response => { getNewestOutstockCabinet({planDetailCode: this.form.planDetailCode}).then(response => {
if (!response.data || !response.data.materialBatch || response.data.materialBatch ==='') { if (!response.data || !response.data.materialBatch || response.data.materialBatch === '') {
this.$modal.msgWarning("请先领取柜体"); this.$modal.msgWarning("请先领取柜体");
return; return;
} }
@ -1409,25 +1434,30 @@ export default {
let materialBarcode = response.data.materialBatch; let materialBarcode = response.data.materialBatch;
// //
updateBarcodePlan({barcodeInfo: response.data.materialBatch,planCode: this.form.planCode,planDetailCode: this.form.planDetailCode}).then(response => { updateBarcodePlan({
barcodeInfo: response.data.materialBatch,
planCode: this.form.planCode,
planDetailCode: this.form.planDetailCode
}).then(response => {
this.PrintData = this.form this.PrintData = this.form
this.PrintData.bindBarcode = materialBarcode; this.PrintData.bindBarcode = materialBarcode;
this.PrintData.barcodeType = '5';// this.PrintData.barcodeType = this.BARCODE_TYPE.SPLIT_BARCODE;//
this.printModel = true this.printModel = true
}); });
}); });
}, },
printInternalBarcode(){ printInternalBarcode() {
this.PrintData = this.form; this.PrintData = this.form;
this.PrintData.singleFlag = '2';// this.PrintData.singleFlag = '2';//
this.printModel = true this.printModel = true
}, },
printProductBarcode(){ printProductBarcode() {
this.PrintData = this.form; this.PrintData = this.form;
this.PrintData.barcodeType = this.BARCODE_TYPE.PRODUCT this.PrintData.barcodeType = this.BARCODE_TYPE.PRODUCT;
this.PrintData.singleFlag = this.SINGLE_FLAG.YES;
this.printModel = true this.printModel = true
}, },
@ -1491,14 +1521,22 @@ export default {
}, },
//
submitRawBack() { submitRawBack() {
this.$refs["rawBackForm"].validate(valid => { this.$refs["rawBackForm"].validate(valid => {
if (valid) { if (valid) {
this.rawBackForm.planDetailCode = this.form.planDetailCode; let rawBackForm = this.rawBackForm;
applyRawBack(this.rawBackForm).then(response => { rawBackForm.planDetailCode = this.form.planDetailCode;
this.$modal.msgSuccess("申请成功"); rawBackForm.cabinetChannel = this.form.cabinetChannel;
this.$modal.confirm('请确认要执行返库么(从拆分区到原料周转区)?').then(function () {
return applyRawBack(rawBackForm);
}).then(() => {
this.$modal.msgSuccess("执行成功");
this.cancelRawBack(); this.cancelRawBack();
}).catch(() => {
}).finally(e => {
}); });
} }
}); });
}, },
@ -1596,24 +1634,30 @@ export default {
this.resetForm("continueRawInstockForm"); this.resetForm("continueRawInstockForm");
}, },
continueRawInstock(){ continueRawInstock() {
this.resetContinueRawInstock(); this.resetContinueRawInstock();
this.continueRawInstockVisible = true; this.continueRawInstockVisible = true;
}, },
submitContinueRawInstock(){ submitContinueRawInstock() {
continueRawInstock(this.continueRawInstockForm).then(v => { let continueRawInstockForm = this.continueRawInstockForm;
this.$modal.msgSuccess("操作成功"); this.$modal.confirm('请确认要继续入库么(从提升机接驳位到原料周转区)?').then(function () {
}) return continueRawInstock(continueRawInstockForm);
}).then(() => {
this.$modal.msgSuccess("执行成功");
this.continueRawInstockVisible = false;
}).catch(() => {
}).finally(e => {
});
}, },
cancelContinueRawInstock(){ cancelContinueRawInstock() {
this.continueRawInstockVisible = false; this.continueRawInstockVisible = false;
this.resetContinueRawInstock(); this.resetContinueRawInstock();
}, },
/** SOP预览*/ /** SOP预览*/
handleViewSOP(e){ handleViewSOP(e) {
this.fileListData = []; this.fileListData = [];
getDispatchSOPAttachList(e.dispatchCode, e.processId).then(res => { getDispatchSOPAttachList(e.dispatchCode, e.processId).then(res => {
let attachList = res.data; let attachList = res.data;
@ -1625,7 +1669,7 @@ export default {
thisFileList.push(previewFile); thisFileList.push(previewFile);
}) })
console.log("thisFileList", thisFileList) console.log("thisFileList", thisFileList)
if (thisFileList.length > 0){ if (thisFileList.length > 0) {
this.fileListData = thisFileList; this.fileListData = thisFileList;
this.showFileDialog = true; this.showFileDialog = true;
} else { } else {

@ -194,7 +194,6 @@
size="small" size="small"
type="text" type="text"
@click="print(scope.row)" @click="print(scope.row)"
v-if="scope.row.planDetailStatus === PLAN_DETAIL_STATUS.FINISHED || scope.row.planDetailStatus === PLAN_DETAIL_STATUS.ABNORMAL_FINISHED"
> >
条码 条码
</el-button> </el-button>

@ -159,6 +159,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工艺路线" align="center" prop="dispatchName" v-if="columns[9].visible" width="120"/> <el-table-column label="工艺路线" align="center" prop="dispatchName" v-if="columns[9].visible" width="120"/>
<el-table-column label="柜体渠道" align="center" prop="cabinetChannel" >
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_product_order_cabinet_channel" :value="scope.row.cabinetChannel"/>
</template>
</el-table-column>
<!--el-table-column label="单位时间" align="center" prop="productionTime" v-if="columns[27].visible"> <!--el-table-column label="单位时间" align="center" prop="productionTime" v-if="columns[27].visible">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ formatDayHourMinutes(scope.row.productionTime) }}</span> <span>{{ formatDayHourMinutes(scope.row.productionTime) }}</span>
@ -376,6 +381,20 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="柜体渠道" prop="cabinetChannel" v-if="form.dispatchId===4">
<el-radio-group v-model="form.cabinetChannel">
<el-radio
v-for="dict in dict.type.mes_product_order_canbinet_channel"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="销售数量" prop="saleAmount"> <el-form-item label="销售数量" prop="saleAmount">
<el-input-number v-model="form.saleAmount" placeholder="请输入销售数量" :disabled="true"/> <el-input-number v-model="form.saleAmount" placeholder="请输入销售数量" :disabled="true"/>
</el-form-item> </el-form-item>
@ -579,7 +598,7 @@ import selectMaterial from "@/views/mes/materialinfo/selectMaterial.vue";
export default { export default {
name: "ProductOrder", name: "ProductOrder",
dicts: ['active_flag', 'plan_status', 'dispatch_type', 'mes_sale_type'], dicts: ['active_flag', 'plan_status', 'dispatch_type', 'mes_sale_type','mes_product_order_canbinet_channel'],
components: { components: {
'add-SaleOrder': addSaleOrder, 'add-SaleOrder': addSaleOrder,
'select-material': selectMaterial, 'select-material': selectMaterial,
@ -683,6 +702,9 @@ export default {
dispatchId: [ dispatchId: [
{required: true, message: "工艺路线不能为空", trigger: "blur"} {required: true, message: "工艺路线不能为空", trigger: "blur"}
], ],
cabinetChannel: [
{required: true, message: "柜体渠道不能为空", trigger: "blur"}
],
planDeliveryDate: [ planDeliveryDate: [
{required: true, message: "计划交货日期不能为空", trigger: "blur"} {required: true, message: "计划交货日期不能为空", trigger: "blur"}
], ],

Loading…
Cancel
Save