PDA:
1、组装出库,开始生产计划明细
2、生产入库,结束生产计划明细,并判断更新工单状态
master
xs 8 months ago
parent 3201fc46d5
commit 67f59a344c

@ -8,6 +8,7 @@ import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.api.domain.MesBaseProcessInfo;
import com.hw.mes.api.domain.MesBaseStationInfo;
import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo;
import com.hw.mes.api.domain.vo.MesPdaProductPlanVo;
import com.hw.mes.api.factory.RemoteMesFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@ -69,4 +70,27 @@ public interface RemoteMesService {
*/
@GetMapping("/processInfo/getProcesses")
public R<List<MesBaseProcessInfo>> getProcesses(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 5
*
* @param mesPdaProductPlanVo
* @param source
* @return
*/
@PostMapping("/productplan/start5thFloorInstall")
public R<?> start5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
/**
* 5
*
* @param mesPdaProductPlanVo
* @param source
* @return
*/
@PostMapping("/productplan/complete5thFloorInstall")
public R<?> complete5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}

@ -14,6 +14,8 @@ import com.hw.common.core.web.domain.BaseEntity;
* @author xins
* @date 2024-01-15
*/
public class MesBaseBarcodeInfo extends BaseEntity
{
private static final long serialVersionUID = 1L;

@ -51,6 +51,11 @@ public class MesBaseProcessInfo extends BaseEntity {
@Excel(name = "标准工时(分钟)工序所在楼层")
private Integer processFloor;
private String finalProcessFlag;
private String displayFlag;
/**
*
*/
@ -59,6 +64,7 @@ public class MesBaseProcessInfo extends BaseEntity {
private Long processOrder;
/**
* 线
*/
@ -123,6 +129,22 @@ public class MesBaseProcessInfo extends BaseEntity {
this.processFloor = processFloor;
}
public String getFinalProcessFlag() {
return finalProcessFlag;
}
public void setFinalProcessFlag(String finalProcessFlag) {
this.finalProcessFlag = finalProcessFlag;
}
public String getDisplayFlag() {
return displayFlag;
}
public void setDisplayFlag(String displayFlag) {
this.displayFlag = displayFlag;
}
public void setActiveFlag(String activeFlag) {
this.activeFlag = activeFlag;
}
@ -147,6 +169,7 @@ public class MesBaseProcessInfo extends BaseEntity {
this.processOrder = processOrder;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

@ -0,0 +1,23 @@
package com.hw.mes.api.domain.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @Description: PDAVO
* @ClassName: MesPdaProductPlanVo
* @Author : xins
* @Date :2024-08-03 17:18
* @Version :1.0
*/
@Data
public class MesPdaProductPlanVo {
//物料条码
@NotBlank(message="material barcode cannot be empty")
private String materialBarcode;
}

@ -7,6 +7,7 @@ import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.api.domain.MesBaseProcessInfo;
import com.hw.mes.api.domain.MesBaseStationInfo;
import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo;
import com.hw.mes.api.domain.vo.MesPdaProductPlanVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
@ -51,6 +52,16 @@ public class RemoteMesFallbackFactory implements FallbackFactory<RemoteMesServic
public R<List<MesBaseProcessInfo>> getProcesses(String source) {
return R.fail("获取工序列表信息失败:" + throwable.getMessage());
}
@Override
public R<?> start5thFloorInstall(MesPdaProductPlanVo mesPdaProductPlanVo, String source) {
return R.fail("开始五楼组装工序失败:" + throwable.getMessage());
}
@Override
public R<?> complete5thFloorInstall(MesPdaProductPlanVo mesPdaProductPlanVo, String source) {
return R.fail("完成五楼组装工序失败:" + throwable.getMessage());
}
};
}
}

@ -141,8 +141,8 @@ public class MesConstants {
/**
*
*/
public static final String MES_START_TYPE_FIFTH_FLOOR_ASSEMBLE = "1";//五楼装配工
public static final String MES_START_TYPE_FIFTH_FLOOR_ASSEMBLE = "1";//五楼装配工
public static final String MES_START_TYPE_FIFTH_FLOOR_INSTALL = "2";//五楼组装工序
/**
*
@ -193,4 +193,10 @@ public class MesConstants {
*/
public static final String MES_BASE_BARCODE_COMPLETE_FLAG_YES = "1";
public static final String MES_BASE_BARCODE_COMPLETE_FLAG_NO = "0";
/**
* (10)*/
public static final String MES_PROCESS_DISPLAY_FLAG_YES = "1";//是
}

@ -4,6 +4,7 @@ import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.hw.common.core.constant.MesConstants;
import com.hw.common.security.annotation.InnerAuth;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.domain.MesBaseProcessInfo;
@ -149,6 +150,7 @@ public class MesBaseProcessInfoController extends BaseController
@GetMapping("/getProcesses")
public AjaxResult getProcesses(MesBaseProcessInfo mesBaseProcessInfo)
{
mesBaseProcessInfo.setDisplayFlag(MesConstants.MES_PROCESS_DISPLAY_FLAG_YES);
List<MesBaseProcessInfo> list = mesBaseProcessInfoService.selectMesBaseProcessInfoList(mesBaseProcessInfo);
return success(list);
}

@ -4,12 +4,17 @@ import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.hw.common.core.constant.MesConstants;
import com.hw.common.core.domain.R;
import com.hw.common.security.annotation.InnerAuth;
import com.hw.mes.api.domain.vo.MesPdaProductPlanVo;
import com.hw.mes.domain.MesBaseRouteProcess;
import com.hw.mes.domain.MesProductOrder;
import com.hw.mes.domain.MesProductPlanDetail;
import com.hw.mes.domain.vo.MesProductPlanDeleteVo;
import com.hw.mes.domain.vo.MesProductPlanEditVo;
import com.hw.mes.service.IMesBaseProcessInfoService;
import com.hw.mes.service.IMesBaseRouteProcessService;
import com.hw.mes.service.IMesProductPlanDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -31,17 +36,19 @@ import com.hw.common.core.web.page.TableDataInfo;
/**
* Controller
*
*
* @author xins
* @date 2024-02-21
*/
@RestController
@RequestMapping("/productplan")
public class MesProductPlanController extends BaseController
{
public class MesProductPlanController extends BaseController {
@Autowired
private IMesProductPlanService mesProductPlanService;
@Autowired
private IMesProductPlanDetailService mesProductPlanDetailService;
@Autowired
private IMesBaseProcessInfoService mesBaseProcessInfoService;
@ -53,8 +60,7 @@ public class MesProductPlanController extends BaseController
*/
@RequiresPermissions("mes:productplan:list")
@GetMapping("/list")
public TableDataInfo list(MesProductPlan mesProductPlan)
{
public TableDataInfo list(MesProductPlan mesProductPlan) {
startPage();
List<MesProductPlan> list = mesProductPlanService.selectMesProductPlanList(mesProductPlan);
return getDataTable(list);
@ -62,12 +68,12 @@ public class MesProductPlanController extends BaseController
/**
* List
*
* @param mesProductPlan
* @return
*/
@GetMapping("/selectProductPlans")
public AjaxResult selectProductPlans(MesProductPlan mesProductPlan)
{
public AjaxResult selectProductPlans(MesProductPlan mesProductPlan) {
List<MesProductPlan> list = mesProductPlanService.selectMesProductPlanJoinProcessList(mesProductPlan);
return success(list);
}
@ -78,8 +84,7 @@ public class MesProductPlanController extends BaseController
@RequiresPermissions("mes:productplan:export")
@Log(title = "生产派工", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, MesProductPlan mesProductPlan)
{
public void export(HttpServletResponse response, MesProductPlan mesProductPlan) {
List<MesProductPlan> list = mesProductPlanService.selectMesProductPlanList(mesProductPlan);
ExcelUtil<MesProductPlan> util = new ExcelUtil<MesProductPlan>(MesProductPlan.class);
util.exportExcel(response, list, "生产派工数据");
@ -90,8 +95,7 @@ public class MesProductPlanController extends BaseController
*/
@RequiresPermissions("mes:productplan:query")
@GetMapping(value = "/{planId}")
public AjaxResult getInfo(@PathVariable("planId") Long planId)
{
public AjaxResult getInfo(@PathVariable("planId") Long planId) {
return success(mesProductPlanService.selectMesProductPlanByPlanId(planId));
}
@ -101,8 +105,7 @@ public class MesProductPlanController extends BaseController
@RequiresPermissions("mes:productplan:add")
@Log(title = "生产派工", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MesProductPlan mesProductPlan)
{
public AjaxResult add(@RequestBody MesProductPlan mesProductPlan) {
return toAjax(mesProductPlanService.insertMesProductPlan(mesProductPlan));
}
@ -112,8 +115,7 @@ public class MesProductPlanController extends BaseController
@RequiresPermissions("mes:productplan:edit")
@Log(title = "生产派工", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MesProductPlan mesProductPlan)
{
public AjaxResult edit(@RequestBody MesProductPlan mesProductPlan) {
return toAjax(mesProductPlanService.updateMesProductPlan(mesProductPlan));
}
@ -122,9 +124,8 @@ public class MesProductPlanController extends BaseController
*/
@RequiresPermissions("mes:productplan:remove")
@Log(title = "生产派工", businessType = BusinessType.DELETE)
@DeleteMapping("/{planIds}")
public AjaxResult remove(@PathVariable Long[] planIds)
{
@DeleteMapping("/{planIds}")
public AjaxResult remove(@PathVariable Long[] planIds) {
return toAjax(mesProductPlanService.deleteMesProductPlanByPlanIds(planIds));
}
@ -144,12 +145,11 @@ public class MesProductPlanController extends BaseController
@RequiresPermissions("mes:productplan:add")
@Log(title = "生产派工", businessType = BusinessType.INSERT)
@PostMapping("/orderAddMesProductPlanList")
public AjaxResult orderAddMesProductPlanList(@RequestBody MesProductPlanEditVo productPlanEditVo)
{
public AjaxResult orderAddMesProductPlanList(@RequestBody MesProductPlanEditVo productPlanEditVo) {
return toAjax(mesProductPlanService.orderAddMesProductPlanList(productPlanEditVo));
}
/* *//**
/* *//**
* List()
* @param planId
* @return
@ -175,32 +175,31 @@ public class MesProductPlanController extends BaseController
/**
* List
*
* @param dispatchCode
* @param processId
* @return
*/
@GetMapping(value = "/drawingList/{dispatchCode}/{processId}")
public AjaxResult getDispatchDrawingList(@PathVariable("dispatchCode") String dispatchCode,
@PathVariable("processId") Long processId)
{
return success(mesProductPlanService.getDispatchAttachList(dispatchCode,processId, MesConstants.MES_ATTACH_TYPE_DRAWING));
@PathVariable("processId") Long processId) {
return success(mesProductPlanService.getDispatchAttachList(dispatchCode, processId, MesConstants.MES_ATTACH_TYPE_DRAWING));
}
/**
* SOPList
*
* @param dispatchCode
* @param processId
* @return
*/
@GetMapping(value = "/SOPAttachList/{dispatchCode}/{processId}")
public AjaxResult getDispatchSOPAttachList(@PathVariable("dispatchCode") String dispatchCode,
@PathVariable("processId") Long processId)
{
return success(mesProductPlanService.getDispatchAttachList(dispatchCode,processId,MesConstants.MES_ATTACH_TYPE_SOP));
@PathVariable("processId") Long processId) {
return success(mesProductPlanService.getDispatchAttachList(dispatchCode, processId, MesConstants.MES_ATTACH_TYPE_SOP));
}
/**
*
*/
@ -213,35 +212,72 @@ public class MesProductPlanController extends BaseController
/**
*
*
* @param mesBaseRouteProcess
* @return
*/
@GetMapping(value = "/getBaseRouteProcesses")
public AjaxResult getBaseRouteProcesses(MesBaseRouteProcess mesBaseRouteProcess)
{
public AjaxResult getBaseRouteProcesses(MesBaseRouteProcess mesBaseRouteProcess) {
return success(mesBaseRouteProcessService.selectMesBaseRouteProcessJoinList(mesBaseRouteProcess));
}
/**
* 线
*
* @param routeId 线ID
* @return
*/
@GetMapping(value = "/getProcessUsers/{routeId}")
public AjaxResult getProcessUsers(@PathVariable("routeId") Long routeId)
{
public AjaxResult getProcessUsers(@PathVariable("routeId") Long routeId) {
return success(mesBaseProcessInfoService.getProcessUsersByRouteId(routeId));
}
/**
*
*
* @param mesProductPlanDeleteVo VO
* @return
*/
@PostMapping(value = "/deleteProductPlansByDispatchCode")
public AjaxResult deleteProductPlansByDispatchCode(@RequestBody MesProductPlanDeleteVo mesProductPlanDeleteVo)
{
public AjaxResult deleteProductPlansByDispatchCode(@RequestBody MesProductPlanDeleteVo mesProductPlanDeleteVo) {
return success(mesProductPlanService.deleteProductPlansByDispatchCode(mesProductPlanDeleteVo));
}
/**
*
*/
@Log(title = "生产派工", businessType = BusinessType.START)
@PostMapping("/start5thFloorInstall")
@InnerAuth
public R<?> start5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo) {
try {
MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail();
mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode());
mesProductPlanDetailService.startNextMesProductPlanDetail(mesProductPlanDetail, MesConstants.MES_START_TYPE_FIFTH_FLOOR_INSTALL);
return R.ok("start successfully");
} catch (Exception e) {
e.printStackTrace();
return R.fail(e.getMessage());
}
}
/**
*
*/
@Log(title = "生产派工", businessType = BusinessType.COMPLETE)
@PostMapping("/complete5thFloorInstall")
@InnerAuth
public R<?> complete5thFloorInstall(@RequestBody MesPdaProductPlanVo mesPdaProductPlanVo) {
try {
MesProductPlanDetail mesProductPlanDetail = new MesProductPlanDetail();
mesProductPlanDetail.setMaterialBarcode(mesPdaProductPlanVo.getMaterialBarcode());
mesProductPlanDetailService.completeMesProductPlanDetail(mesProductPlanDetail);
return R.ok("complete successfully");
} catch (Exception e) {
return R.fail(e.getMessage());
}
}
}

@ -56,6 +56,8 @@ public class MesProductPlanDetail extends BaseEntity
@Excel(name = "明细状态1-未开始2-已开始3-已完成")
private String planDetailStatus;
private String materialBarcode;
/** 是否标识1-是0-否 */
@Excel(name = "是否标识1-是0-否")
private String isFlag;
@ -64,7 +66,6 @@ public class MesProductPlanDetail extends BaseEntity
private String attachName;
private String materialBarcode;
private String processType;//工序类型1五楼拆分工序

@ -85,5 +85,13 @@ public interface MesProductPlanDetailMapper
*/
public MesProductPlanDetail selectMesProductPlanDetailByPlanDetailCode(String planDetailCode);
/**
*
*
* @param materialBarcode
* @return
*/
public MesProductPlanDetail selectMesProductPlanDetailByMaterialBarcode(String materialBarcode);
}

@ -3,6 +3,7 @@ package com.hw.mes.service;
import java.util.List;
import com.hw.common.core.utils.DateUtils;
import com.hw.mes.api.domain.vo.MesPdaProductPlanVo;
import com.hw.mes.domain.MesProductPlan;
import com.hw.mes.domain.MesProductPlanDetail;
import com.hw.mes.domain.vo.MesProductPlanDetailVo;
@ -113,4 +114,6 @@ public interface IMesProductPlanDetailService {
* @return MesProductPlanDetail
*/
public MesProductPlanDetail startNextMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail,String startType);
}

@ -505,6 +505,10 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
mesBaseBarcodeInfo.setUpdateBy(SecurityUtils.getUsername());
mesBaseBarcodeInfo.setUpdateTime(DateUtils.getNowDate());
return mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo);
} else {
if (!dbBaseBarcodeInfo.getPlanCode().equals(mesBaseBarcodeInfo.getPlanCode())) {
throw new ServiceException("此柜体条码已经在别的生产明细中使用过");
}
}
return 1;
}

@ -7,7 +7,6 @@ import com.hw.common.core.utils.StringUtils;
import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.config.MesConfig;
import com.hw.mes.domain.*;
import com.hw.mes.domain.vo.MesProductPlanDetailVo;
import com.hw.mes.mapper.*;
@ -28,6 +27,8 @@ import java.util.stream.Collectors;
* @author xins
* @date 2024-02-21
*/
@Service
public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailService {
@Autowired
@ -221,8 +222,17 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
@Transactional(rollbackFor = Exception.class)
public int completeMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail) {
Long planDetailId = mesProductPlanDetail.getPlanDetailId();
MesProductPlanDetail dbProductPlanDetail = mesProductPlanDetailMapper.
selectMesProductPlanDetailByPlanDetailId(planDetailId);
MesProductPlanDetail dbProductPlanDetail = new MesProductPlanDetail();
if (planDetailId != null) {
dbProductPlanDetail = mesProductPlanDetailMapper.
selectMesProductPlanDetailByPlanDetailId(planDetailId);
} else if (StringUtils.isNotEmpty(mesProductPlanDetail.getMaterialBarcode())) {//适用于5楼组装区域PDA操作
dbProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(mesProductPlanDetail.getMaterialBarcode());
}
if (dbProductPlanDetail == null) {
throw new ServiceException("未找到生产明细");
}
String planDetailStatus = dbProductPlanDetail.getPlanDetailStatus();
if (planDetailStatus.equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_TO_START)) {
throw new ServiceException("此生产明细未开始");
@ -232,6 +242,10 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
Long planId = dbProductPlanDetail.getPlanId();
MesProductPlan dbProductPlan = mesProductPlanMapper.selectMesProductPlanByPlanId(planId);
if(!dbProductPlan.getUserId().equals(SecurityUtils.getUserId())){
throw new ServiceException("此派工信息没有派工到您");
}
String planStatus = dbProductPlan.getPlanStatus();
if (planStatus.equals(MesConstants.MES_PRODUCT_PLAN_STATUS_TO_DISPATCH)) {
throw new ServiceException("还未派工,不能结束");
@ -376,63 +390,70 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
}
}
MesProductPlan mesProductPlan = mesProductPlanMapper.selectMesProductPlanByPlanId(mesProductPlanDetail.getPlanId());
//判断生产计划的状态
String planStatus = mesProductPlan.getPlanStatus();
if (planStatus.equals(MesConstants.MES_PRODUCT_PLAN_STATUS_TO_DISPATCH)) {
throw new ServiceException("还未派工,不能开始");
} else if (planStatus.equals(MesConstants.MES_PRODUCT_PLAN_STATUS_FINISH)) {
throw new ServiceException("此生产派工已经结束");
}
Date currentDate = new Date();
String userName = SecurityUtils.getUsername();
Long userId = SecurityUtils.getUserId();
String planDetailCode = Seq.getId(Seq.mesProductPlanDetailSeqType, Seq.mesProductPlanDetailCode);
//五楼装配工位要扫码开始
if (startType.equals(MesConstants.MES_START_TYPE_FIFTH_FLOOR_ASSEMBLE)) {
String materialBarcode = mesProductPlanDetail.getMaterialBarcode();
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(materialBarcode);
if (mesBaseBarcodeInfo == null) {
throw new ServiceException("条码有误");
}
if (!mesBaseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_BIND)) {
throw new ServiceException("请扫描背板或门板条码开始");
MesProductPlan mesProductPlan = new MesProductPlan();
if (startType.equals(MesConstants.MES_START_TYPE_FIFTH_FLOOR_INSTALL)) {//五楼组装工序
//在拆分区拿柜体拆分时,需要打印配对码,然后跟柜体码绑定
//在从4楼到5楼接驳位时需要根据4楼的成品码重新打印原材料条码
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(
mesProductPlanDetail.getMaterialBarcode());
if (mesBaseBarcodeInfo == null) {
throw new ServiceException("无派工任务");
}
if (StringUtils.isEmpty(mesBaseBarcodeInfo.getBindBarcode())) {
throw new ServiceException("此条码有误,未绑定任何柜体");
String planCode = mesBaseBarcodeInfo.getPlanCode();
if (StringUtils.isEmpty(planCode)) {
throw new ServiceException("无派工任务");
}
if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getTransferredPlanDetailCode())) {
throw new ServiceException("此条码已经扫描使用过,不能再次使用");
MesProductPlanDetail dbProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(
mesProductPlanDetail.getMaterialBarcode());
if (dbProductPlanDetail != null) {
throw new ServiceException("已经开始,无须重复开始");
}
//校验此条码是否是同一派工单
MesProductPlan barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(mesBaseBarcodeInfo.getPlanCode());
if (barcodeProductPlan == null) {
throw new ServiceException("条码有误,没有相关派工");
MesProductPlan barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(planCode);
if(barcodeProductPlan==null){
throw new ServiceException("无派工信息");
}
if (!barcodeProductPlan.getDispatchCode().equals(mesProductPlan.getDispatchCode())) {
throw new ServiceException("此条码的派工单号为:" + barcodeProductPlan.getDispatchCode() + ",与此派工单号不符");
MesProductPlan queryProductPlan = new MesProductPlan();
queryProductPlan.setDispatchCode(barcodeProductPlan.getDispatchCode());
queryProductPlan.setFinalProcessFlag(MesConstants.MES_FINAL_PROCESS_FLAG_YES);
List<MesProductPlan> mesProductPlans = mesProductPlanMapper.selectOnlyMesProductPlans(queryProductPlan);
if(mesProductPlans==null || mesProductPlans.isEmpty()){
throw new ServiceException("没有派工信息");
}
mesProductPlan = mesProductPlans.get(0);
} else {
//五楼装配工序要扫码开始
mesProductPlan = mesProductPlanMapper.selectMesProductPlanByPlanId(mesProductPlanDetail.getPlanId());
if (startType.equals(MesConstants.MES_START_TYPE_FIFTH_FLOOR_ASSEMBLE)) {
this.start5thFloorAssemble(mesProductPlanDetail.getMaterialBarcode(), mesProductPlan.getDispatchCode(), planDetailCode, userName, currentDate);
}
}
// MesMaterialAssignInfo queryMaterialAssignInfo = new MesMaterialAssignInfo();
// queryMaterialAssignInfo.setMaterialBarcode(materialBarcode);
// List<MesMaterialAssignInfo> mesMaterialAssignInfoList = mesMaterialAssignInfoMapper.selectMesMaterialAssignInfoList(queryMaterialAssignInfo);
// if (mesMaterialAssignInfoList == null || mesMaterialAssignInfoList.isEmpty()) {
// throw new ServiceException("此物料条码还没下发到工位");
// }
if (mesProductPlan == null) {
throw new ServiceException("无派工信息");
}
mesBaseBarcodeInfo.setTransferredPlanDetailCode(planDetailCode);
mesBaseBarcodeInfo.setUpdateTime(currentDate);
mesBaseBarcodeInfo.setUpdateBy(userName);
mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo);
if(!mesProductPlan.getUserId().equals(SecurityUtils.getUserId())){
throw new ServiceException("此派工信息没有派工到您");
}
//判断生产计划的状态
String planStatus = mesProductPlan.getPlanStatus();
if (planStatus.equals(MesConstants.MES_PRODUCT_PLAN_STATUS_TO_DISPATCH)) {
throw new ServiceException("还未派工,不能开始");
} else if (planStatus.equals(MesConstants.MES_PRODUCT_PLAN_STATUS_FINISH)) {
throw new ServiceException("此生产派工已经结束");
}
@ -448,6 +469,7 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
mesProductPlanMapper.updateMesProductPlan(mesProductPlan);
}
mesProductPlanDetail.setPlanId(mesProductPlan.getPlanId());
mesProductPlanDetail.setPlanDetailStatus(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_STARTED);
mesProductPlanDetail.setPlanDetailCode(planDetailCode);
mesProductPlanDetail.setPlanCode(mesProductPlan.getPlanCode());
@ -465,6 +487,74 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
}
public void start5thFloorAssemble(String materialBarcode, String dispatchCode, String planDetailCode, String userName, Date currentDate) {
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(materialBarcode);
if (mesBaseBarcodeInfo == null) {
throw new ServiceException("条码有误");
}
if (!mesBaseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_BIND)) {
throw new ServiceException("请扫描背板或门板条码开始");
}
if (StringUtils.isEmpty(mesBaseBarcodeInfo.getBindBarcode())) {
throw new ServiceException("此条码有误,未绑定任何柜体");
}
if (StringUtils.isNotEmpty(mesBaseBarcodeInfo.getTransferredPlanDetailCode())) {
throw new ServiceException("此条码已经扫描使用过,不能再次使用");
}
//校验此条码是否是同一派工单
MesProductPlan barcodeProductPlan = mesProductPlanMapper.selectOnlyMesProductPlanByPlanCode(mesBaseBarcodeInfo.getPlanCode());
if (barcodeProductPlan == null) {
throw new ServiceException("条码有误,没有相关派工");
}
if (!barcodeProductPlan.getDispatchCode().equals(dispatchCode)) {
throw new ServiceException("此条码的派工单号为:" + barcodeProductPlan.getDispatchCode() + ",与此派工单号不符");
}
// MesMaterialAssignInfo queryMaterialAssignInfo = new MesMaterialAssignInfo();
// queryMaterialAssignInfo.setMaterialBarcode(materialBarcode);
// List<MesMaterialAssignInfo> mesMaterialAssignInfoList = mesMaterialAssignInfoMapper.selectMesMaterialAssignInfoList(queryMaterialAssignInfo);
// if (mesMaterialAssignInfoList == null || mesMaterialAssignInfoList.isEmpty()) {
// throw new ServiceException("此物料条码还没下发到工位");
// }
mesBaseBarcodeInfo.setTransferredPlanDetailCode(planDetailCode);
mesBaseBarcodeInfo.setUpdateTime(currentDate);
mesBaseBarcodeInfo.setUpdateBy(userName);
mesBaseBarcodeInfoMapper.updateMesBaseBarcodeInfo(mesBaseBarcodeInfo);
}
/**
* PDA
*
* @param materialBarcode
*/
public void start5thFloorInstall(String materialBarcode) {
//在拆分区拿柜体拆分时,需要打印配对码,然后跟柜体码绑定
//在从4楼到5楼接驳位时需要根据4楼的成品码重新打印原材料条码
MesBaseBarcodeInfo mesBaseBarcodeInfo = mesBaseBarcodeInfoMapper.selectMesBaseBarcodeInfoByBarcodeInfo(materialBarcode);
if (mesBaseBarcodeInfo == null) {
throw new ServiceException("无派工任务");
}
String planCode = mesBaseBarcodeInfo.getPlanCode();
if (StringUtils.isEmpty(planCode)) {
throw new ServiceException("无派工任务");
}
MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByMaterialBarcode(materialBarcode);
if (mesProductPlanDetail != null) {
throw new ServiceException("已经开始,无须重复开始");
}
}
public void startProductOrder(MesProductPlan productPlan, Date currentDate, String userName) {
MesProductOrder productOrder = mesProductOrderMapper.selectMesProductOrderByProductOrderId(productPlan.getProductOrderId());
if (productOrder == null) {
@ -488,4 +578,5 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer
}
}

@ -10,6 +10,8 @@
<result property="processName" column="process_name"/>
<result property="processType" column="process_type"/>
<result property="processFloor" column="process_floor"/>
<result property="finalProcessFlag" column="final_process_flag"/>
<result property="displayFlag" column="display_flag"/>
<result property="productionTime" column="production_time"/>
<result property="activeFlag" column="active_flag"/>
<result property="remark" column="remark"/>
@ -71,8 +73,11 @@
</if>
<if test="processType != null and processType != ''">and process_type = #{processType}</if>
<if test="productionTime != null ">and production_time = #{productionTime}</if>
<if test="displayFlag != null and displayFlag != ''">and display_flag = #{displayFlag}</if>
<if test="activeFlag != null and activeFlag != ''">and active_flag = #{activeFlag}</if>
<if test="remark != null and remark != ''">and remark = #{remark}</if>
</where>
</select>

@ -15,6 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="realEndTime" column="real_end_time" />
<result property="attachId" column="attach_id" />
<result property="planDetailStatus" column="plan_detail_status" />
<result property="materialBarcode" column="material_barcode" />
<result property="isFlag" column="is_flag" />
<result property="remark" column="remark" />
<result property="createBy" column="create_by" />
@ -63,6 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="attachId != null">attach_id,</if>
<if test="realEndTime != null">real_end_time,</if>
<if test="planDetailStatus != null and planDetailStatus != ''">plan_detail_status,</if>
<if test="materialBarcode != null and materialBarcode != ''">material_barcode,</if>
<if test="isFlag != null and isFlag != ''">is_flag,</if>
<if test="remark != null">remark,</if>
<if test="createBy != null">create_by,</if>
@ -80,6 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="realEndTime != null">#{realEndTime},</if>
<if test="attachId != null">#{attachId},</if>
<if test="planDetailStatus != null and planDetailStatus != ''">#{planDetailStatus},</if>
<if test="materialBarcode != null and materialBarcode != ''">#{materialBarcode},</if>
<if test="isFlag != null and isFlag != ''">#{isFlag},</if>
<if test="remark != null">#{remark},</if>
<if test="createBy != null">#{createBy},</if>
@ -156,4 +159,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectMesProductPlanDetailVo"/>
where plan_detail_code = #{planDetailCode}
</select>
<select id="selectMesProductPlanDetailByMaterialBarcode" parameterType="String" resultMap="MesProductPlanDetailResult">
<include refid="selectMesProductPlanDetailVo"/>
where material_barcode = #{materialBarcode}
</select>
</mapper>

@ -495,6 +495,7 @@
<where>
<if test="dispatchCode != null and dispatchCode != ''">and a.dispatch_code = #{dispatchCode}</if>
<if test="processId != null ">and a.process_id = #{processId}</if>
<if test="finalProcessFlag != null and finalProcessFlag != ''">and a.final_process_flag = #{finalProcessFlag}</if>
</where>
</select>

@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.hw.common.core.constant.Constants;
import com.hw.common.core.constant.MesConstants;
import com.hw.common.core.constant.SecurityConstants;
import com.hw.common.core.constant.WmsConstants;
@ -13,6 +14,7 @@ import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.RemoteMesService;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.api.domain.vo.MesPdaProductPlanVo;
import com.hw.wms.config.WmsConfig;
import com.hw.wms.domain.*;
import com.hw.wms.domain.vo.WmsProduceInstockVo;
@ -295,6 +297,7 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService {
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int fifthFloorProduceInstock(WmsProduceInstockVo wmsProduceInstockVo) {
Long warehouseId = wmsConfig.getFifthSemiWarehouseId();//五楼半成品库
String productType = WmsConstants.PRODUCT_STOCK_STOCK_TYPE_SEMI;
@ -359,10 +362,12 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService {
throw new ServiceException("物料条码有误");
}
if (baseBarcodeInfo.getBarcodeType().equals(WmsConstants.RWA_STOCK_STOCK_TYPE_RAW)) {
//按原材料入库的柜体原料码进行入库
if (!productType.equals(WmsConstants.PRODUCT_INSTOCK_STOCK_TYPE_SEMI) &&
baseBarcodeInfo.getBarcodeType().equals(WmsConstants.RWA_STOCK_STOCK_TYPE_RAW)) {
throw new ServiceException("此物料条码为原材料,非成品条码");
}
//按原材料入库的柜体原料码进行入库
if (baseBarcodeInfo.getPrintFlag().equals(MesConstants.MES_BARCODE_PRINT_FLAG_NO)) {
throw new ServiceException("此条码还未打印");
}
@ -403,7 +408,16 @@ public class WmsProductInstockServiceImpl implements IWmsProductInstockService {
if (executeStatus.equals(WmsConstants.WMS_EXECUTE_STATUS_FINISH)) {
updateProductStock(baseBarcodeInfo, "", warehouseId, warehouseFloor, userName, currentDate);
}
return wmsProductInstockMapper.insertWmsProductInstock(wmsProductInstock);
wmsProductInstockMapper.insertWmsProductInstock(wmsProductInstock);
MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo();
mesPdaProductPlanVo.setMaterialBarcode(materialBarcode);
R<?> tdReturnMsg = remoteMesService.complete5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER);
if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务
throw new RuntimeException(tdReturnMsg.getMsg());
}
return 1;
}

@ -1,6 +1,7 @@
package com.hw.wms.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.hw.common.core.constant.Constants;
import com.hw.common.core.constant.MesConstants;
import com.hw.common.core.constant.SecurityConstants;
import com.hw.common.core.constant.WmsConstants;
@ -14,6 +15,7 @@ import com.hw.mes.api.RemoteMesService;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo;
import com.hw.mes.api.domain.vo.MesPdaProductPlanVo;
import com.hw.wms.config.WmsConfig;
import com.hw.wms.domain.*;
import com.hw.wms.domain.vo.*;
@ -957,6 +959,7 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int assembleOutstock(WmsAssembleOutstockVo wmsAssembleOutstockVo) {
/**1wcs
* 2
@ -973,8 +976,12 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
throw new ServiceException("物料条码有误");
}
/**todo需要最终确认一下。在申请领柜体后wcs会调度agv将对应库位的柜体运输到柜体拆分区然后更新rawoutstock的materialbatch为其物料条码*/
String bindBarcode = baseBarcodeInfo.getBindBarcode();
if(!baseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_BIND)){
throw new ServiceException("请扫描配对码后进行组装出库");
}
/**在申请领柜体后wms插入wms_raw_outstock,wcs插入wms_raw_outstock_detail更新wms_raw_outstock*/
String bindBarcode = baseBarcodeInfo.getBindBarcode();//原柜体条码
if (StringUtils.isEmpty(bindBarcode)) {
throw new ServiceException("此柜体还未绑定");
}
@ -1029,6 +1036,13 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock);
MesPdaProductPlanVo mesPdaProductPlanVo = new MesPdaProductPlanVo();
mesPdaProductPlanVo.setMaterialBarcode(bindBarcode);
R<?> tdReturnMsg = remoteMesService.start5thFloorInstall(mesPdaProductPlanVo, SecurityConstants.INNER);
if (tdReturnMsg.getCode() != Constants.SUCCESS) {//抛出异常,回滚事务
throw new ServiceException(tdReturnMsg.getMsg());
}
return 1;
}

Loading…
Cancel
Save