-车间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")
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
public class MesPdaProductPlanVo {
//物料条码
//保存生产明细的物料条码
@NotBlank(message="material barcode cannot be empty")
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) {
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")
public R<Boolean> isExistProductStock(@Validated @RequestBody WmsProductStockVo queryProductStockVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* ERP
* @param days
@ -65,4 +66,7 @@ public interface RemoteWmsService {
@PostMapping("/wmswarehouse/allocateVirtualMaterial")
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());
}
@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_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;
/**
* ID
*/
private Long laserProcessId;
/**
* PDAID
*/
private Long pdaAssembleProcessId;
/**五楼原料周转区仓库ID*/
private Long fifthCabinetWarehouseId;
@ -67,6 +75,14 @@ public class MesConfig
this.laserProcessId = laserProcessId;
}
public Long getPdaAssembleProcessId() {
return pdaAssembleProcessId;
}
public void setPdaAssembleProcessId(Long pdaAssembleProcessId) {
this.pdaAssembleProcessId = pdaAssembleProcessId;
}
public Long getFifthCabinetWarehouseId() {
return fifthCabinetWarehouseId;
}

@ -309,7 +309,7 @@ public class MesApiController extends BaseController {
*/
@GetMapping(value = "/printProductBarcodes/{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")
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")
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")
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));
}
/**
*
*/
@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 {
MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail();
mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode());
mesProductPlanDetail.setRawMaterialBarcode(mesPdaProductPlanVo.getRawMaterialBarcode());
mesProductPlanDetailService.startNextMesProductPlanDetail(mesProductPlanDetail, MesConstants.MES_START_TYPE_FIFTH_FLOOR_INSTALL);
return R.ok("start successfully");
} catch (Exception e) {
@ -286,7 +287,7 @@ public class MesProductPlanController extends BaseController {
public R<?> complete5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo) {
try {
MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail();
mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode());
mesProductPlanDetail.setRawMaterialBarcode(mesPdaProductPlanVo.getRawMaterialBarcode());
mesProductPlanDetailService.completeMesProductPlanDetail(mesProductPlanDetail);
return R.ok("complete successfully");
} 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 String cabinetChannel;
/**
* ;
*/
@ -424,6 +430,14 @@ public class MesProductOrder extends BaseEntity {
return dispatchId;
}
public String getCabinetChannel() {
return cabinetChannel;
}
public void setCabinetChannel(String cabinetChannel) {
this.cabinetChannel = cabinetChannel;
}
public void setSaleAmount(BigDecimal saleAmount) {
this.saleAmount = saleAmount;
}

@ -194,6 +194,10 @@ public class MesProductPlan extends BaseEntity
private String nickName;
private String incompleteFlag;
private String cabinetChannel;
public Long getSaleOrderId() {
return saleOrderId;
}
@ -567,6 +571,22 @@ public class MesProductPlan extends BaseEntity
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
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

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

@ -89,6 +89,14 @@ public interface MesBaseBarcodeInfoMapper
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByProductBarcode(String productBarcode);
/**
* like,limit 1
*
* @param productBarcode 545
* @return
*/
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByLikeProductBarcode(String productBarcode);
/**
*
* @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,12 +12,11 @@ import java.util.List;
* @author xs
* @date 2023-12-20
*/
public interface IMesBaseBarcodeInfoService
{
public interface IMesBaseBarcodeInfoService {
/**
*
*
* @param barcodeInfo UID
* @param barcodeInfo UID
* @return
*/
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByBarcodeInfo(String barcodeInfo);
@ -58,12 +57,14 @@ public interface IMesBaseBarcodeInfoService
/**
*
*
* @param mesBaseBarcodeInfo
*/
public int generateNoPurchaseRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo);
/**
*
*
* @param mesBaseBarcodeInfo
*/
public int generateRegularRawBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo);
@ -105,11 +106,12 @@ public interface IMesBaseBarcodeInfoService
*
*
* @param barcodeIds
* @param printType 1 3
* @param printType 1 3
* @param reprintFlag (1)
* @param printNumber
* @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);
/**
*
*
* @param mesBaseBarcodeInfo
* @return
*/
@ -159,6 +161,7 @@ public interface IMesBaseBarcodeInfoService
/**
*
*
* @param mesBaseBarcodeInfo
* @return
*/
@ -166,6 +169,7 @@ public interface IMesBaseBarcodeInfoService
/**
*
*
* @param mesBaseBarcodeInfo
* @return
*/
@ -173,6 +177,7 @@ public interface IMesBaseBarcodeInfoService
/**
*
*
* @param mesBaseBarcodeInfo
* @return
*/
@ -181,6 +186,7 @@ public interface IMesBaseBarcodeInfoService
/**
*
*
* @param materialBarcode
* @return
*/
@ -196,7 +202,16 @@ public interface IMesBaseBarcodeInfoService
/**
*
*
* @param 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.util.*;
import com.alibaba.fastjson2.JSONObject;
import com.hw.common.core.constant.*;
import com.hw.common.core.domain.R;
import com.hw.common.core.exception.ServiceException;
@ -72,7 +73,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
private MesProductPlanDetailMapper mesProductPlanDetailMapper;
@Autowired
private MesPurchaseOrderMapper mesPurchaseOrderMapper;
private MesBaseBindBarcodeMapper mesBaseBindBarcodeMapper;
@Autowired
private MesSaleOrderMapper mesSaleOrderMapper;
@ -83,6 +84,7 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Autowired
private MesSaleOrderRelateMapper mesSaleOrderRelateMapper;
@Autowired
private MesConfig mesConfig;
@ -109,8 +111,8 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
*/
@Override
public MesBaseBarcodeInfo selectMesBaseBarcodeInfoByBarcodeId(Long barcodeId) {
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId);
if(mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)){
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeId(barcodeId);
if (mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_MERGE)) {
MesSaleOrderRelate querySaleOrderRelate = new MesSaleOrderRelate();
querySaleOrderRelate.setBarcodeInfo(mesBaseBarcodeInfo.getBarcodeInfo());
List<MesSaleOrderRelate> mesSaleOrderRelates = mesSaleOrderRelateMapper.selectMesSaleOrderRelateJoinList(querySaleOrderRelate);
@ -316,16 +318,43 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
public void generateProductBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
String planCode;
String planDetailCode;
Long saleOrderId;
String saleOrderCode;
Long materialId;
// String planCode;
// String planDetailCode;
String barcode = Seq.getId(Seq.mesCompBarcodeSeqType, Seq.mesCompBarcodeCode);
Date currentDate = new Date();
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()) &&
mesBaseBarcodeInfo.getSingleFlag().equals(MesConstants.MES_BARCODE_SINGLE_FLAG_YES)) {
@ -344,20 +373,20 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
throw new ServiceException("此原材料条码已经生成过成品条码,不能重复生成");
}
MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(rawMaterialBarcode);
if (mesProductPlanDetail == null) {
throw new ServiceException("此条码没有生产明细");
MesProductPlanDetail rawBarcodeMesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(rawMaterialBarcode);
if (rawBarcodeMesProductPlanDetail == null) {
throw new ServiceException("此原材料条码没有生产明细");
}
if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH)) {
throw new ServiceException("生产明细还未结束");
}
// if (!mesProductPlanDetail.getPlanDetailStatus().equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH)) {
// throw new ServiceException("生产明细还未结束");
// }
planCode = mesProductPlanDetail.getPlanCode();
planDetailCode = mesProductPlanDetail.getPlanDetailCode();
String rawBarCodePlanCode = rawBarcodeMesProductPlanDetail.getPlanCode();
String rawBarCodePlanDetailCode = rawBarcodeMesProductPlanDetail.getPlanDetailCode();
if (StringUtils.isEmpty(planCode) || StringUtils.isEmpty(planDetailCode)) {
if (StringUtils.isEmpty(rawBarCodePlanCode) || StringUtils.isEmpty(rawBarCodePlanDetailCode)) {
throw new ServiceException("绑定的配对码有误");
}
@ -365,16 +394,12 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
throw new ServiceException("此条码未绑定托盘信息");
}
MesProductPlan productPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode);
if (productPlan == null) {
throw new ServiceException("生产派工不存在");
MesProductPlan rawBarcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(rawBarCodePlanCode);
if (rawBarcodeProductPlan == null) {
throw new ServiceException("原材料条码的生产派工不存在");
}
saleOrderId = rawBarcode.getSaleOrderId();
saleOrderCode = rawBarcode.getSaleorderCode();
materialId = productPlan.getMaterialId();
mesBaseBarcodeInfo.setPalletInfoCode(rawBarcode.getPalletInfoCode());//重新绑定托盘号
mesBaseBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_BINDING);
@ -400,35 +425,6 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
mesProductPlanDetailMapper.updateMesProductPlanDetail(mesProductPlanDetail);
} 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());
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.setSaleOrderId(saleOrderId);
mesBaseBarcodeInfo.setSaleorderCode(saleOrderCode);
mesBaseBarcodeInfo.setPlanCode(planCode);
mesBaseBarcodeInfo.setPlanDetailCode(planDetailCode);
mesBaseBarcodeInfo.setPlanCode(mesBaseBarcodeInfo.getPlanCode());
mesBaseBarcodeInfo.setPlanDetailCode(mesBaseBarcodeInfo.getPlanDetailCode());
mesBaseBarcodeInfo.setCreateTime(currentDate);
mesBaseBarcodeInfo.setCreateBy(userName);
@ -611,17 +607,25 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
* @param barcodeIds
* @param printType 1 3
* @param reprintFlag (1)
* @param printNumber
* @return
*/
@Override
@Transactional
public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag) {
public int printBarcodes(Long[] barcodeIds, String printType, boolean reprintFlag, Integer printNumber) {
//获取条码List
// List<List<PrintContentVo>> printContents = new ArrayList<>();
// List<MesBaseBarcodeInfo> toUpdatedBaseBarcodeInfos = new ArrayList<>();
for (Long barcodeId : barcodeIds) {
printBarcodesByBarcodeId(barcodeId, printType, reprintFlag);
if (printNumber != null && printNumber > 1) {
for (int i = 0; i < printNumber; i++) {
printBarcodesByBarcodeId(barcodeId, printType, reprintFlag);
}
} else {
printBarcodesByBarcodeId(barcodeId, printType, reprintFlag);
}
}
// for (MesBaseBarcodeInfo toUpdateMesBaseBarcodeInfo : toUpdatedBaseBarcodeInfos) {
@ -898,84 +902,204 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
@Transactional(rollbackFor = Exception.class)
@Override
public int insertInternalMesBaseBarcode(MesBaseBarcodeInfo mesBaseBarcodeInfo) {
String productBarcode = mesBaseBarcodeInfo.getProductBarcode();
Long materialId = 0L;
String productBarcodes = mesBaseBarcodeInfo.getProductBarcode();//多个成品条码以,隔开
String splitCharacterEnglish = ",";
String splitCharacterChinese = "";
String[] productBarcodesArr = null;
if (productBarcodes.indexOf(splitCharacterEnglish) >= 0) {
productBarcodesArr = productBarcodes.split(splitCharacterEnglish);
} else if (productBarcodes.indexOf(splitCharacterChinese) >= 0) {
productBarcodesArr = productBarcodes.split(splitCharacterChinese);
}
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 basePalletInfo = mesBasePalletInfoMapper.selectMesBasePalletInfoByBarcode(productBarcode);
MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcode);
if (productBarcodeInfo == null) {
allErrorMsgBuilder.append("成品条码").append(productBarcode).append("不存在;");
} else {
productBarcodeInfoList.add(productBarcodeInfo);
}
//多个成品条码绑定的条码必须相同
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.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_UNBINDING);
productBarcodeInfo.setUpdateTime(currentDate);
productBarcodeInfo.setUpdateBy(userName);
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楼的成品条码。判断此成品条码是否有绑定过原材料条码
MesBaseBarcodeInfo bindProductBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByProductBarcode(productBarcode);
MesBaseBindBarcode bindProductBarcodeInfo = mesBaseBindBarcodeMapper.selectMesBaseBindBarcodeByBindBarcode(productBarcode);
if (bindProductBarcodeInfo != null) {
throw new ServiceException("此成品条码已经打印过原材料条码,无需重复打印");
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> isExistProductStock = remoteWmsService.isExistProductStock(queryProductStockVo, SecurityConstants.INNER);
if (isExistProductStock.getData()) {
throw new ServiceException("此物料条码还未出库,不能生成原材料条码");
R<Boolean> isProductOutstock = remoteWmsService.isProductOutstock(queryProductStockVo, SecurityConstants.INNER);
if (!isProductOutstock.getData()) {
errorMsg.append("成品条码[").append(productBarcode).append("]还未出库,不能生成原材料条码;");
}
//先根据之前的成品条码信息获取托盘信息
MesBasePalletInfo queryPalletInfo = new MesBasePalletInfo();
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);
//有可能一个托盘有多个成品,但是只绑定了一个,也有可能是从货梯运输上来的
// if (basePalletInfos == null || basePalletInfos.isEmpty()) {
// errorMsg.append("此成品未绑定托盘信息");
// }
MesBaseBarcodeInfo productBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(productBarcode);
if (productBarcodeInfo == null) {
throw new ServiceException("成品条码不存在");
}
if (StringUtils.isEmpty(productBarcodeInfo.getPalletInfoCode())) {
throw new ServiceException("此成品还未绑定托盘信息");
}
productBarcodeInfo.setPalletInfoCode("");
productBarcodeInfo.setBindStatus(MesConstants.MES_BARCODE_BIND_STATUS_UNBINDING);
productBarcodeInfo.setUpdateTime(currentDate);
productBarcodeInfo.setUpdateBy(userName);
mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(productBarcodeInfo);
// if (StringUtils.isEmpty(productBarcodeInfo.getPalletInfoCode())) {
// errorMsg.append("成品条码""还未绑定托盘信息");
// }
//更新此成品码之前的配对码的绑定码
MesBaseBarcodeInfo queryBarcodeInfo = new MesBaseBarcodeInfo();
queryBarcodeInfo.setBindBarcode(productBarcode);
List<MesBaseBarcodeInfo> bindBarcodes = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoList(queryBarcodeInfo);
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();
}
/**
*
*
* @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,
// List<MesPurchaseOrderRelate> mesPurchaseOrderRelates,String userName, Date currentDate) {
// MesPurchaseOrder virtualPurchaseOrder = new MesPurchaseOrder();

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

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

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

@ -53,6 +53,8 @@
<result property="displayFlag" column="display_flag"/>
<result property="processProductionTime" column="process_production_time"/>
<result property="nickName" column="nick_name"/>
<result property="cabinetChannel" column="cabinet_channel"/>
</resultMap>
<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.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.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
left join mes_base_material_info mbmi on mpp.material_id=mbmi.material_id
<where>
<if test="processId != null ">and mpp.process_id = #{processId}</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="incompleteFlag != null and incompleteFlag != ''">and mpp.plan_status in ('1','2')</if>
</where>
order by mpp.plan_status,mpp.plan_begin_time
</select>

@ -4,6 +4,8 @@ import java.util.List;
import java.io.IOException;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@ -27,7 +29,7 @@ import com.hw.common.core.web.page.TableDataInfo;
/**
* Controller
*
*
* @author xs
* @date 2023-12-20
*/
@ -141,4 +143,20 @@ public class WmsProductOutstockController extends BaseController
public AjaxResult auditProductOutstock(@Validated @RequestBody WmsProductOutstockAuditVo 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="生产计划明细编号必须输入")
private String planDetailCode;
//柜体渠道
@NotBlank(message="柜体渠道必须输入")
private String cabinetChannel;
}

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

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

@ -287,16 +287,33 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService {
throw new ServiceException("物料条码有误");
}
//判断此柜体是否已跟配对码绑定,如果未绑定不允许返库
R<MesBaseBarcodeInfo> bindBarcodeInfoR = remoteMesService.getBarcodeByBindBarcode(materialBarcode, SecurityConstants.INNER);
if (bindBarcodeInfoR == null) {
throw new ServiceException("没找到绑定信息,不能返库");
}
MesBaseBarcodeInfo bindBarcodeInfo = bindBarcodeInfoR.getData();
if (bindBarcodeInfo == null) {
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);
if (bindBarcodeInfoR == null) {
throw new ServiceException("没找到绑定信息,不能返库");
}
MesBaseBarcodeInfo bindBarcodeInfo = bindBarcodeInfoR.getData();
if (bindBarcodeInfo == null) {
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();
queryReturnRawInstock.setReturnFlag("1");
List<WmsRawInstock> returnRawInstocks = wmsRawInstockMapper.selectWmsRawInstockList(queryReturnRawInstock);
@ -311,15 +328,6 @@ public class WmsRawInstockServiceImpl implements IWmsRawInstockService {
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())) {
throw new ServiceException(String.format("此物料条码明细编号为%s:,与此明细编号不符", baseBarcodeInfo.getPlanDetailCode()));

@ -333,7 +333,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
if (rawOutstockId != null) {
wmsRawOutstock = wmsRawOutstockMapper.selectWmsRawOutstockByRawOutstockId(rawOutstockId);
} else {
wmsRawOutstock = this.getWmsRawOutstock(baseLocation,baseBarcodeInfo);
wmsRawOutstock = this.getWmsRawOutstock(baseLocation, baseBarcodeInfo);
}
@ -387,7 +387,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
return 1;
}
public WmsRawOutstock getWmsRawOutstock(WmsBaseLocation baseLocation,MesBaseBarcodeInfo baseBarcodeInfo){
public WmsRawOutstock getWmsRawOutstock(WmsBaseLocation baseLocation, MesBaseBarcodeInfo baseBarcodeInfo) {
WmsRawOutstock queryRawOutstock = new WmsRawOutstock();
queryRawOutstock.setWarehouseId(baseLocation.getWarehouseId());
queryRawOutstock.setMaterialId(baseBarcodeInfo.getMaterialId());
@ -969,7 +969,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) {
/**1wcs
* 2
* 3WCS
* 3WCS
* *
*/
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*/
String bindBarcode = baseBarcodeInfo.getBindBarcode();//原柜体条码
String bindBarcode = baseBarcodeInfo.getBindBarcode();//配对码绑定的原柜体条码(四楼到五楼的是成品码,外部采购的是原材料条码)
if (StringUtils.isEmpty(bindBarcode)) {
throw new ServiceException("此柜体还未绑定");
}
@ -1002,26 +1002,26 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
}
String assembleMaterialBarcode,planCode,planDetailCode,palletInfoCode;
String assembleMaterialBarcode, planCode, planDetailCode, palletInfoCode;
Long materialId;
if (!bindBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) {
//bindBarcode在这成品码通过productbarcode找到5楼拆分区新生成的原材料条码
R<MesBaseBarcodeInfo> productBarcodeInfoR = remoteMesService.getBarcodeByProductBarcode(bindBarcode, SecurityConstants.INNER);
if (productBarcodeInfoR == null) {
//bindBarcode在这成品码通过productbarcode找到5楼拆分区新生成的原材料条码
R<MesBaseBarcodeInfo> rawBarcodeInfoR = remoteMesService.getRawBarcodeByProductBarcode(bindBarcode, SecurityConstants.INNER);
if (rawBarcodeInfoR == null) {
throw new ServiceException("没有绑定的原材料条码");
}
MesBaseBarcodeInfo productBarcodeInfo = productBarcodeInfoR.getData();
if (productBarcodeInfo == null) {
MesBaseBarcodeInfo rawBarcodeInfo = rawBarcodeInfoR.getData();
if (rawBarcodeInfo == null) {
throw new ServiceException("没有绑定的原材料条码");
}
assembleMaterialBarcode = productBarcodeInfo.getBarcodeInfo();
planCode = productBarcodeInfo.getPlanCode();
planDetailCode = productBarcodeInfo.getPlanDetailCode();
palletInfoCode = productBarcodeInfo.getPalletInfoCode();
materialId = productBarcodeInfo.getMaterialId();
}else{
assembleMaterialBarcode = bindBarcode;//组装出库的料条码
assembleMaterialBarcode = rawBarcodeInfo.getBarcodeInfo();
planCode = rawBarcodeInfo.getPlanCode();
planDetailCode = rawBarcodeInfo.getPlanDetailCode();
palletInfoCode = rawBarcodeInfo.getPalletInfoCode();
materialId = rawBarcodeInfo.getMaterialId();
} else {
assembleMaterialBarcode = bindBarcode;//组装出库的原材料条码
planCode = bindBarcodeInfo.getPlanCode();
planDetailCode = bindBarcodeInfo.getPlanDetailCode();
palletInfoCode = bindBarcodeInfo.getPalletInfoCode();
@ -1032,19 +1032,50 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
WmsRawOutstock queryRawOutstock = new WmsRawOutstock();
queryRawOutstock.setMaterialBatch(assembleMaterialBarcode);
List<WmsRawOutstock> wmsRawOutstocks = wmsRawOutstockMapper.selectWmsRawOutstockList(queryRawOutstock);
if (wmsRawOutstocks != null && !wmsRawOutstocks.isEmpty()) {
throw new ServiceException("已经有此物料出库记录");
}
WmsRawStock queryRawStock = new WmsRawStock();
queryRawStock.setInstockBatch(assembleMaterialBarcode);
queryRawStock.setCompleteFlag(WmsConstants.WMS_RAW_STOCK_COMPLETE_FLAG_NO);
// 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()) {
throw new ServiceException("已经有此物料出库记录");
}
this.assembleRawOutstock(wmsRawStocks, assembleMaterialBarcode, planCode, planDetailCode,
palletInfoCode, materialId, bindBarcodeInfo.getSaleOrderId());
}
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()) {
throw new ServiceException("没找到库存信息");
}
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.setTaskCode(Seq.getId(Seq.rawOutstockSeqType, Seq.rawOutstockSeqCode));
@ -1055,9 +1086,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
wmsRawOutstock.setPlanDetailCode(planDetailCode);
wmsRawOutstock.setPalletInfoCode(palletInfoCode);//在绑定时需要在条码信息中记录托盘码
wmsRawOutstock.setMaterialId(materialId);
wmsRawOutstock.setSaleOrderId(bindBarcodeInfo.getSaleOrderId());//销售订单ID都是一样的
wmsRawOutstock.setSaleOrderId(saleOrderId);//销售订单ID都是一样的
wmsRawOutstock.setOutstockAmount(BigDecimal.ONE);
wmsRawOutstock.setEndStationCode(wmsConfig.getFifthAssembleStationCode());//目标位置,五楼组装区域
wmsRawOutstock.setOperationType(WmsConstants.WMS_OPERATION_TYPE_AUTO);
@ -1068,18 +1097,8 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
wmsRawOutstock.setExecuteStatus(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE);
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.MesBaseStationInfo;
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.WmsProductStock;
import com.hw.wms.domain.WmsRawStock;
@ -55,6 +56,9 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService {
@Autowired
private RemoteMesService remoteMesService;
@Autowired
private WmsConfig wmsConfig;
public static final int TRANSFER_TYPE_RAW_STOCK = 1;
public static final int TRANSFER_TYPE_STOCK_TOTAL = 2;
@ -148,7 +152,9 @@ public class WmsStockTotalServiceImpl implements IWmsStockTotalService {
@Override
public List<WmsStockTotal> selectWmsStockTotalJoinListBySaleOrder(WmsStockTotal wmsStockTotal) {
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.setAccessoriesFlag(null);
} 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="warehouseId != null "> and warehouse_id = #{warehouseId}</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="operationType != null and operationType != ''"> and operation_type = #{operationType}</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) {
return request({

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

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

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

@ -159,6 +159,11 @@
</template>
</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="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">
<template slot-scope="scope">
<span>{{ formatDayHourMinutes(scope.row.productionTime) }}</span>
@ -376,6 +381,20 @@
></el-option>
</el-select>
</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-input-number v-model="form.saleAmount" placeholder="请输入销售数量" :disabled="true"/>
</el-form-item>
@ -579,7 +598,7 @@ import selectMaterial from "@/views/mes/materialinfo/selectMaterial.vue";
export default {
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: {
'add-SaleOrder': addSaleOrder,
'select-material': selectMaterial,
@ -683,6 +702,9 @@ export default {
dispatchId: [
{required: true, message: "工艺路线不能为空", trigger: "blur"}
],
cabinetChannel: [
{required: true, message: "柜体渠道不能为空", trigger: "blur"}
],
planDeliveryDate: [
{required: true, message: "计划交货日期不能为空", trigger: "blur"}
],

Loading…
Cancel
Save