diff --git a/common/src/main/java/com/foreverwin/mesnac/common/dto/LabelPrintDto.java b/common/src/main/java/com/foreverwin/mesnac/common/dto/LabelPrintDto.java new file mode 100644 index 00000000..0376f294 --- /dev/null +++ b/common/src/main/java/com/foreverwin/mesnac/common/dto/LabelPrintDto.java @@ -0,0 +1,151 @@ +package com.foreverwin.mesnac.common.dto; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 标签打印参数类 + * + */ +public class LabelPrintDto implements Serializable { + + private String site; + private String user; + //打印机 + private String printer; + //打印模板名称 + private String printTemplate; + //物料编码 + private String item; + //物料描述 + private String itemDescription; + //供应商 + private String supplier; + //批次号 + private String batch; + + //工作指令 + private String workOrder; + //图纸版本号 + private String drawingVersion; + //产品条码 + private String sfc; + //数量 + private BigDecimal qty; + //下料尺寸 + private String blankingSize; + //下道工序 + private String operation; + + public String getSite() { + return site; + } + + public void setSite(String site) { + this.site = site; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPrinter() { + return printer; + } + + public void setPrinter(String printer) { + this.printer = printer; + } + + public String getPrintTemplate() { + return printTemplate; + } + + public void setPrintTemplate(String printTemplate) { + this.printTemplate = printTemplate; + } + + public String getItem() { + return item; + } + + public void setItem(String item) { + this.item = item; + } + + public String getItemDescription() { + return itemDescription; + } + + public void setItemDescription(String itemDescription) { + this.itemDescription = itemDescription; + } + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getBatch() { + return batch; + } + + public void setBatch(String batch) { + this.batch = batch; + } + + public String getWorkOrder() { + return workOrder; + } + + public void setWorkOrder(String workOrder) { + this.workOrder = workOrder; + } + + public String getDrawingVersion() { + return drawingVersion; + } + + public void setDrawingVersion(String drawingVersion) { + this.drawingVersion = drawingVersion; + } + + public String getSfc() { + return sfc; + } + + public void setSfc(String sfc) { + this.sfc = sfc; + } + + public BigDecimal getQty() { + return qty; + } + + public void setQty(BigDecimal qty) { + this.qty = qty; + } + + public String getBlankingSize() { + return blankingSize; + } + + public void setBlankingSize(String blankingSize) { + this.blankingSize = blankingSize; + } + + public String getOperation() { + return operation; + } + + public void setOperation(String operation) { + this.operation = operation; + } +} diff --git a/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java b/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java index fe15c86e..bae4abb6 100644 --- a/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java +++ b/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java @@ -87,6 +87,9 @@ public enum HandleEnum { /**设备检验任务**/ RESOURCE_INSPECT_TASK("ResourceInspectTaskBo","ResourceInspectTaskBo:{0},{1}"), + /**设备检验任务**/ + SPLIT_SFC("SplitSfcBo","SplitSfcBo:{0},{1}"), + /**设备检验任务**/ RESOURCE_REPAIR_TASK("ResourceRepairTaskBo","ResourceRepairTaskBo:{0},{1}"), diff --git a/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java b/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java index f95ef7b3..2f1b3648 100644 --- a/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java +++ b/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java @@ -218,9 +218,9 @@ public class InspectionTaskServiceImpl extends ServiceImpl i return; } - - JSONArray jsonArray = new JSONArray(); + List labelPrintDtoList = new ArrayList<>(); for (PrintLog printLog : printList) { - JSONObject _json = new JSONObject(); - _json.put("PRINTER", printLog.getPrintName()); - _json.put("PRINT_TEMPLATE", printLog.getPrintTemplate()); - _json.put("PRINT_PARAM", printLog.getPrintParam()); - jsonArray.add(_json); + LabelPrintDto labelPrintDto = new LabelPrintDto(); + labelPrintDto.setPrinter(printLog.getPrintName()); + labelPrintDto.setPrintTemplate(printLog.getPrintTemplate()); + labelPrintDto.setItem(printLog.getItem()); + labelPrintDto.setItemDescription(printLog.getItemDescription()); + labelPrintDtoList.add(labelPrintDto); } - HttpUtil.post(printServer, jsonArray.toJSONString(), 30000); + HttpUtil.post(printServer, JSON.toJSONString(labelPrintDtoList), 30000); } } \ No newline at end of file diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/controller/CallItemController.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/controller/CallItemController.java index 11f668f7..df56abf3 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/controller/CallItemController.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/controller/CallItemController.java @@ -69,6 +69,12 @@ public class CallItemController { List result; try { callItem.setSite(CommonMethods.getSite()); + if (callItem.getRequireFromDate_S() != null) { + callItem.setRequireFromDate(DateUtil.parse(callItem.getRequireFromDate_S())); + } + if (callItem.getRequireToDate_S() != null) { + callItem.setRequireToDate(DateUtil.parse(callItem.getRequireToDate_S())); + } if (callItem.getStartFromDate_S() != null) { callItem.setStartFromDate(DateUtil.parse(callItem.getStartFromDate_S())); } diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/CallItemServiceImpl.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/CallItemServiceImpl.java index 06adb248..856b1f63 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/CallItemServiceImpl.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/CallItemServiceImpl.java @@ -95,7 +95,7 @@ public class CallItemServiceImpl extends ServiceImpl i for (int i = 0; i< callItemList.size(); i++) { CallItem callItem = callItemList.get(i); String component = StringUtil.trimHandle(callItem.getComponentBo()); - String callItemNo = callItem.getSfc() + component; + String callItemNo = callItem.getSfc() + callItem.getStepId() + component; callItem.setCallItemNo(callItemNo); callItem.setHandle(HandleEnum.CALL_ITEM.getHandle(site, callItemNo)); diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/IssueItemServiceImpl.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/IssueItemServiceImpl.java index cc09551b..9a7f9a18 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/IssueItemServiceImpl.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/IssueItemServiceImpl.java @@ -145,7 +145,7 @@ public class IssueItemServiceImpl extends ServiceImpl list = callItemService.findIssueMatchCallItemList(site, workOrder, blankingSize, resource, item); if (list == null || list.size() <= 0) { - throw BusinessException.build("根据发料数据未找到发料记录!"); + throw BusinessException.build("未找到当前物料对应的叫料记录!"); } BigDecimal remainQty = new BigDecimal(qty); diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java index bb7ab6b0..5aa8cb75 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java @@ -316,8 +316,6 @@ public class SfcDispatchServiceImpl extends ServiceImpl + AND ZSD.DISPATCH_NO = #{dispatchNo} + AND ZSD.WORK_CENTER = #{workCenter} @@ -815,16 +818,16 @@ ORDER BY ZSD.SFC, ZSD.STEP_ID, ZCI.CALL_TYPE - - MODIFY Z_CALL_ITEM SET STATUS = #{status}, MODIFY_USER = #{user}, MODIFIED_DATE_TIME = #{dateTime} + + UPDATE Z_CALL_ITEM SET STATUS = #{status}, MODIFY_USER = #{user}, MODIFIED_DATE_TIME = #{dateTime} WHERE STATUS != '804' AND SFC_DISPATCH_BO IN #{item.sfcDispatchBo} - - MODIFY Z_CALL_ITEM SET STATUS = #{status}, MODIFY_USER = #{user}, MODIFIED_DATE_TIME = #{dateTime} + + UPDATE Z_CALL_ITEM SET STATUS = #{status}, MODIFY_USER = #{user}, MODIFIED_DATE_TIME = #{dateTime} WHERE STATUS != '804' AND CALL_ITEM_NO IN #{item} @@ -832,7 +835,7 @@ - MODIFY Z_CALL_ITEM SET MODIFY_USER = #{user}, MODIFIED_DATE_TIME = #{dateTime}, REQUIRED_DATE_TIME = ( + UPDATE Z_CALL_ITEM SET MODIFY_USER = #{user}, MODIFIED_DATE_TIME = #{dateTime}, REQUIRED_DATE_TIME = ( SELECT ZSD.PLANNED_START_DATE FROM Z_SFC_DISPATCH ZSD WHERE Z_CALL_ITEM.SFC_DISPATCH_BO = ZSD.HANDLE @@ -850,8 +853,11 @@ INNER JOIN ITEM M ON B.COMPONENT_BO = M.HANDLE INNER JOIN SHOP_ORDER Z ON Z.SITE = B.SITE AND Z.SHOP_ORDER = B.SHOP_ORDER LEFT JOIN CUSTOM_FIELDS CF ON CF.HANDLE = Z.HANDLE AND CF."ATTRIBUTE" = 'WORK_ORDER' - WHERE B.SITE = #{site} AND M.ITEM = #{item} AND P.BLANKING_SIZE = #{blankingSize} + WHERE B.SITE = #{site} AND M.ITEM = #{item} AND (B.ISSUE_QTY IS NULL OR B.ISSUE_QTY < B.REQUIRED_QTY) + + AND P.BLANKING_SIZE = #{blankingSize} + AND CF.VALUE = #{workOrder} diff --git a/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java b/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java index 42c35bc0..a4b9a04e 100644 --- a/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java +++ b/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java @@ -17,8 +17,17 @@ public class SfcDto extends Sfc { private String stepId; private String plannedStartDate; private String plannedCompDate; + //工作令号 private String workOrder; + public String getWorkOrder() { + return workOrder; + } + + public void setWorkOrder(String workOrder) { + this.workOrder = workOrder; + } + public String getStepId() { return stepId; } @@ -123,11 +132,4 @@ public class SfcDto extends Sfc { this.plannedCompDate = plannedCompDate; } - public String getWorkOrder() { - return workOrder; - } - - public void setWorkOrder(String workOrder) { - this.workOrder = workOrder; - } } diff --git a/meapi/src/main/resources/mapper/SfcMapper.xml b/meapi/src/main/resources/mapper/SfcMapper.xml index 454a9683..47cda5a3 100644 --- a/meapi/src/main/resources/mapper/SfcMapper.xml +++ b/meapi/src/main/resources/mapper/SfcMapper.xml @@ -656,7 +656,7 @@ LEFT JOIN ITEM_T IT ON IT.ITEM_BO = IM.HANDLE AND IT.LOCALE = 'zh' INNER JOIN SFC_ROUTING SG ON SG.SFC_BO = SC.HANDLE INNER JOIN SFC_ROUTER SR ON SR.SFC_ROUTING_BO = SG.HANDLE AND SR.IN_USE = 'true' - INNER JOIN SFC_STEP SP ON SP.SFC_ROUTER_BO = SR.HANDLE + INNER JOIN SFC_STEP SP ON SP.SFC_ROUTER_BO = SR.HANDLE AND (SP.QTY_IN_QUEUE > 0 OR SP.QTY_IN_WORK > 0) INNER JOIN OPERATION OP ON SP.OPERATION_BO = 'OperationBO:'||OP.SITE||','||OP.OPERATION||',#' AND OP.CURRENT_REVISION = 'true' LEFT JOIN OPERATION_T OT ON OT.OPERATION_BO = OP.HANDLE AND OT.LOCALE = 'zh' LEFT JOIN Z_SFC_DISPATCH ZSD ON ZSD.SITE = SC.SITE AND ZSD.SFC = SC.SFC AND ZSD.OPERATION = OP.OPERATION AND ZSD.STEP_ID = SP.STEP_ID diff --git a/production/src/main/java/com/foreverwin/mesnac/production/controller/SplitSfcController.java b/production/src/main/java/com/foreverwin/mesnac/production/controller/SplitSfcController.java new file mode 100644 index 00000000..d63abafb --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/controller/SplitSfcController.java @@ -0,0 +1,136 @@ +package com.foreverwin.mesnac.production.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.model.SplitSfc; +import com.foreverwin.mesnac.production.service.SplitSfcService; +import com.foreverwin.modular.core.util.FrontPage; +import com.foreverwin.modular.core.util.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * + * @author Philip + * @since 2021-07-20 + */ +@RestController +@RequestMapping("/Z-SPLIT-SFC") +public class SplitSfcController { + + @Autowired + public SplitSfcService splitSfcService; + + @ResponseBody + @GetMapping("/getSfcData") + public R getSfcData(String sfc){ + SfcDto result; + result = splitSfcService.getSfcData(sfc); + return R.ok(result); + } + + @ResponseBody + @GetMapping("/splitSfc") + public R getSfcData(SfcDto sfcDto){ + return R.ok( splitSfcService.splitSfc(sfcDto)); + } + + /** + * 根据id查询 + * + * @param id 主键 + * @return + */ + @ResponseBody + @GetMapping("/{id:.+}") + public R getSplitSfcById(@PathVariable String id) { + return R.ok( splitSfcService.getById(id)); + } + + /** + * 查询所有数据 + * + * @return + */ + @ResponseBody + @GetMapping("") + public R getSplitSfcList(SplitSfc splitSfc){ + List result; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + result = splitSfcService.list(queryWrapper); + return R.ok(result); + } + + /** + * 分页查询数据 + * + * @param frontPage 分页信息 + * @return + */ + @ResponseBody + @GetMapping("/page") + public R page(FrontPage frontPage, SplitSfc splitSfc){ + IPage result; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + if (frontPage.getGlobalQuery() != null && !"".equals(frontPage.getGlobalQuery().trim())) { + //TODO modify global query + queryWrapper.lambda().and(wrapper -> wrapper + .like(SplitSfc::getHandle, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getSite, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getSfc, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getSplitSfc, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getRouter, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getCreateUser, frontPage.getGlobalQuery()) + ); + } + result = splitSfcService.page(frontPage.getPagePlus(), queryWrapper); + return R.ok(result); + } + + /** + * 新增 + * @param splitSfc 传递的实体 + * @return null 失败 实体成功 + */ + @PostMapping + public R save(@RequestBody SplitSfc splitSfc) { + return R.ok(splitSfcService.save(splitSfc)); + } + + /** + * 修改 + * @param splitSfc 传递的实体 + * @return null 失败 实体成功 + */ + @PutMapping + public R updateById(@RequestBody SplitSfc splitSfc) { + return R.ok(splitSfcService.updateById(splitSfc)); + } + + /** + * 根据id删除对象 + * @param id 实体ID + * @return 0 失败 1 成功 + */ + @ResponseBody + @RequestMapping(method = RequestMethod.DELETE, value = "/{id:.+}") + public R removeById(@PathVariable("id") String id){ + return R.ok(splitSfcService.removeById(id)); + } + + /** + * 批量删除对象 + * @param ids 实体集合ID + * @return 0 失败 1 成功 + */ + @ResponseBody + @RequestMapping(method = RequestMethod.POST, value = "/delete-batch") + public R removeByIds(List ids){ + return R.ok(splitSfcService.removeByIds(ids)); + } +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/dto/SplitSfcDto.java b/production/src/main/java/com/foreverwin/mesnac/production/dto/SplitSfcDto.java new file mode 100644 index 00000000..e17af61a --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/dto/SplitSfcDto.java @@ -0,0 +1,33 @@ +package com.foreverwin.mesnac.production.dto; + +import com.foreverwin.mesnac.production.model.SplitSfc; + +public class SplitSfcDto extends SplitSfc { + private String ncCode; + private String routerBo; + private String ncQty; + + public String getNcCode() { + return ncCode; + } + + public void setNcCode(String ncCode) { + this.ncCode = ncCode; + } + + public String getRouterBo() { + return routerBo; + } + + public void setRouterBo(String routerBo) { + this.routerBo = routerBo; + } + + public String getNcQty() { + return ncQty; + } + + public void setNcQty(String ncQty) { + this.ncQty = ncQty; + } +} diff --git a/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java index 78cc80b9..59a92ee6 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java @@ -69,7 +69,7 @@ public interface SfcCrossMapper extends BaseMapper { List getSfcListByResrce(@Param("site") String site, @Param("resrce") String resrce,@Param("locale") String locale); - Integer resourceCheck(@Param("resrceBO")String resrceBO, @Param("dateTime")LocalDateTime dateTime); - SfcDto getInfoBySfc(@Param("sfc")Sfc sfc); + + Integer resourceCheck(@Param("site")String site,@Param("resrce")String resrce, @Param("dateTime")LocalDateTime dateTime); } diff --git a/production/src/main/java/com/foreverwin/mesnac/production/mapper/SplitSfcMapper.java b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SplitSfcMapper.java new file mode 100644 index 00000000..3ac0c6a3 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SplitSfcMapper.java @@ -0,0 +1,24 @@ +package com.foreverwin.mesnac.production.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.dto.SplitSfcDto; +import com.foreverwin.mesnac.production.model.SplitSfc; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + *

+ * 产品条码拆分表 Mapper 接口 + *

+ * + * @author Philip + * @since 2021-07-20 + */ +@Repository +public interface SplitSfcMapper extends BaseMapper { + + SfcDto getSfcData(@Param("handle") String handle); + + SplitSfcDto getAbnormalQty(@Param("site")String site, @Param("sfc")String sfc, @Param("operation") String operation); +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/model/SplitSfc.java b/production/src/main/java/com/foreverwin/mesnac/production/model/SplitSfc.java new file mode 100644 index 00000000..c02c7e03 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/model/SplitSfc.java @@ -0,0 +1,169 @@ +package com.foreverwin.mesnac.production.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * 产品条码拆分表 + *

+ * + * @author Philip + * @since 2021-07-20 + */ + +@TableName("Z_SPLIT_SFC") + +public class SplitSfc extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "HANDLE", type = IdType.INPUT) + private String handle; + /** + * 站点 + */ + @TableField("SITE") + private String site; + /** + * 产品条码 + */ + @TableField("SFC") + private String sfc; + /** + * 拆出的产品条码 + */ + @TableField("SPLIT_SFC") + private String splitSfc; + /** + * 拆分数量 + */ + @TableField("SPLIT_QTY") + private BigDecimal splitQty; + /** + * 处置工艺路线 + */ + @TableField("ROUTER") + private String router; + /** + * 创建人 + */ + @TableField("CREATE_USER") + private String createUser; + /** + * 创建时间 + */ + @TableField("CREATED_DATE_TIME") + private LocalDateTime createdDateTime; + + + public String getHandle() { + return handle; + } + + public void setHandle(String handle) { + this.handle = handle; + } + + public String getSite() { + return site; + } + + public void setSite(String site) { + this.site = site; + } + + public String getSfc() { + return sfc; + } + + public void setSfc(String sfc) { + this.sfc = sfc; + } + + public String getSplitSfc() { + return splitSfc; + } + + public void setSplitSfc(String splitSfc) { + this.splitSfc = splitSfc; + } + + public BigDecimal getSplitQty() { + return splitQty; + } + + public void setSplitQty(BigDecimal splitQty) { + this.splitQty = splitQty; + } + + public String getRouter() { + return router; + } + + public void setRouter(String router) { + this.router = router; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public LocalDateTime getCreatedDateTime() { + return createdDateTime; + } + + public void setCreatedDateTime(LocalDateTime createdDateTime) { + this.createdDateTime = createdDateTime; + } + +public static final String HANDLE = "HANDLE"; + +public static final String SITE = "SITE"; + +public static final String SFC = "SFC"; + +public static final String SPLIT_SFC = "SPLIT_SFC"; + +public static final String SPLIT_QTY = "SPLIT_QTY"; + +public static final String ROUTER = "ROUTER"; + +public static final String CREATE_USER = "CREATE_USER"; + +public static final String CREATED_DATE_TIME = "CREATED_DATE_TIME"; + + + @Override + protected Serializable pkVal() { + return this.handle; + } + + @Override + public String toString() { + return "SplitSfc{" + + "handle = " + handle + + ", site = " + site + + ", sfc = " + sfc + + ", splitSfc = " + splitSfc + + ", splitQty = " + splitQty + + ", router = " + router + + ", createUser = " + createUser + + ", createdDateTime = " + createdDateTime + + "}"; + } +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/SplitSfcService.java b/production/src/main/java/com/foreverwin/mesnac/production/service/SplitSfcService.java new file mode 100644 index 00000000..4e8e4c27 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/SplitSfcService.java @@ -0,0 +1,33 @@ +package com.foreverwin.mesnac.production.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.model.SplitSfc; +import com.foreverwin.modular.core.util.FrontPage; + +import java.util.List; + +/** + *

+ * 产品条码拆分表 服务类 + *

+ * + * @author Philip + * @since 2021-07-20 + */ +public interface SplitSfcService extends IService { + + /** + * 分页查询 + * @param frontPage + * @return + */ + IPage selectPage(FrontPage frontPage, SplitSfc splitSfc); + + List selectList(SplitSfc splitSfc); + + SfcDto getSfcData(String sfc); + + SplitSfc splitSfc(SfcDto sfcDto); +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java index 74cd6428..ba2b07e1 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java @@ -173,7 +173,7 @@ public class PodTemplateServiceImpl implements PodTemplateService { throw new BaseException("资源不能为空"); } //是否设备点检 - sfcCrossService.resourceCheck(HandleEnum.RESOURCE.getHandle(site,resrce)); + sfcCrossService.resourceCheck(resrce); sfcDtoList.forEach(sfcDto -> { String operation = sfcDto.getOperation(); Operation currentRevisionRef = operationService.getCurrentRevisionRef(site, operation); diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java index 96443454..97e4c234 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java @@ -77,10 +77,11 @@ public class SfcCrossServiceImpl implements SfcCrossService { } @Override - public void resourceCheck(String resrceBO) { + public void resourceCheck(String resrce) { LocalDateTime now = LocalDateTime.now(); + String site = CommonMethods.getSite(); LocalDateTime dateTime = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 0, 0, 0); - Integer integer = sfcCrossMapper.resourceCheck(resrceBO, dateTime); + Integer integer = sfcCrossMapper.resourceCheck(site,resrce, dateTime); if (integer<1){ throw new BaseException("当前设备点检未完成"); } diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SplitSfcServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SplitSfcServiceImpl.java new file mode 100644 index 00000000..ea8dd3e8 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SplitSfcServiceImpl.java @@ -0,0 +1,166 @@ +package com.foreverwin.mesnac.production.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.foreverwin.mesnac.common.enums.HandleEnum; +import com.foreverwin.mesnac.common.util.ExceptionUtil; +import com.foreverwin.mesnac.common.util.StringUtil; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.dto.SplitSfcDto; +import com.foreverwin.mesnac.production.mapper.SplitSfcMapper; +import com.foreverwin.mesnac.production.model.SplitSfc; +import com.foreverwin.mesnac.production.service.SplitSfcService; +import com.foreverwin.modular.core.exception.BaseException; +import com.foreverwin.modular.core.meext.MEServices; +import com.foreverwin.modular.core.util.CommonMethods; +import com.foreverwin.modular.core.util.FrontPage; +import com.sap.me.nonconformance.*; +import com.sap.me.production.SplitSerializeServiceInterface; +import com.sap.me.production.SplitSfcDetail; +import com.sap.me.production.SplitSfcRequest; +import com.sap.me.production.SplitSfcResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +/** + *

+ * 产品条码拆分表 服务实现类 + *

+ * + * @author Philip + * @since 2021-07-20 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class SplitSfcServiceImpl extends ServiceImpl implements SplitSfcService { + + + @Autowired + private SplitSfcMapper splitSfcMapper; + + @Override + public IPage selectPage(FrontPage frontPage, SplitSfc splitSfc) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + return super.page(frontPage.getPagePlus(), queryWrapper); + } + + @Override + public List selectList(SplitSfc splitSfc) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + return super.list(queryWrapper); + } + + @Override + public SfcDto getSfcData(String sfc) { + String site = CommonMethods.getSite(); + String handle = HandleEnum.SFC.getHandle(site, sfc); + //根据sfc找工单等信息 + SfcDto sfcData = splitSfcMapper.getSfcData(handle); + if (sfcData==null){ + throw new BaseException("未找到产品条码信息"); + } + String operation = sfcData.getOperation(); + //查询质量异常记录数量 + SplitSfcDto sfcDto=splitSfcMapper.getAbnormalQty(site,sfc,operation); + if (sfcDto==null){ + throw new BaseException("未找到方案确认的质量异常"); + } + sfcData.setQty(Double.valueOf(sfcDto.getNcQty())); + return sfcData; + } + @Override + public SplitSfc splitSfc(SfcDto sfcDto){ + String site = CommonMethods.getSite(); + String sfc = sfcDto.getSfc(); + String handle = HandleEnum.SFC.getHandle(site, sfc); + BigDecimal splitQty = new BigDecimal(sfcDto.getQty()); + + //根据sfc找工单等信息 + SfcDto sfcData = splitSfcMapper.getSfcData(handle); + String operation = sfcData.getOperation(); + if (sfcData==null){ + throw new BaseException("未找到产品条码信息"); + } + //查询质量异常记录数量 处置工艺路线及不良代码 + SplitSfcDto splitSfcDto=splitSfcMapper.getAbnormalQty(site,sfc,operation); + String routerBo = splitSfcDto.getRouterBo(); + String ncCode = splitSfcDto.getNcCode(); + if (StringUtil.isBlank(routerBo)){ + throw new BaseException("异常处置未选择处置工艺路线"); + } + if (StringUtil.isBlank(ncCode)){ + throw new BaseException("异常处置未选择不良代码"); + } + BigDecimal sfcQty = new BigDecimal(sfcData.getQty()); + if (new BigDecimal(splitSfcDto.getNcQty()).compareTo(sfcQty)>=0){ + throw new BaseException("质量异常数量不小于于产品条码的数量,不能拆分"); + } + if (splitQty.compareTo(new BigDecimal(splitSfcDto.getNcQty()))>0){ + throw new BaseException("拆分数量大于质量异常数量的数量,不能拆分"); + } + String[] splitNcCode = ncCode.split(","); + + SplitSfcRequest splitSfcRequest=new SplitSfcRequest(); + try { + SplitSerializeServiceInterface splitService = MEServices.create("com.sap.me.production", "SplitSerializeService",site); + NCProductionServiceInterface ncProductionService = MEServices.create("com.sap.me.nonconformance", "NCProductionService",site); + //拆sfc + List newList=new ArrayList<>(); + SplitSfcDetail splitDetail=new SplitSfcDetail(); + splitDetail.setQuantity(splitQty); + newList.add(splitDetail); + splitSfcRequest.setNewSfcList(newList); + splitSfcRequest.setSfcRef(HandleEnum.SFC.getHandle(site,sfc)); + Collection splitSfcResponses = splitService.splitSfc(splitSfcRequest); + SplitSfcResponse splitSfcResponse = splitSfcResponses.iterator().next(); + String newSfcRef = splitSfcResponse.getNewSfcRef(); + //记录不合格 + CreateNCRequest createNCRequest=new CreateNCRequest(); + createNCRequest.setQty(splitQty); + createNCRequest.setSfcRef(newSfcRef); + ProductionContext productionContext=new ProductionContext(); + StepIdentifier stepIdentifier=new StepIdentifier(); + stepIdentifier.setStepId(sfcData.getStepId()); + stepIdentifier.setOperationId(sfcData.getOperation()); + productionContext.setStepIdentifier(stepIdentifier); + createNCRequest.setProdCtx(productionContext); + createNCRequest.setNcCodeRef(HandleEnum.NC_CODE.getHandle(site,splitNcCode[0])); + ncProductionService.createNC(createNCRequest); + //不合格处置特殊工艺路线 + DispositionMultipleSfcsRequest dispositionSfcsRequest=new DispositionMultipleSfcsRequest(); + List sfcs=new ArrayList<>(); + sfcs.add(newSfcRef); + dispositionSfcsRequest.setSfcs(sfcs); + dispositionSfcsRequest.setBypassStepValidation(true); + DispositionSelection dispositionSelection=new DispositionSelection(); + dispositionSelection.setRouterRef(routerBo); + dispositionSfcsRequest.setDispositionSelection(dispositionSelection); + ncProductionService.dispositionMultipleSfcs(dispositionSfcsRequest); + SplitSfc splitSfc=new SplitSfc(); + String newSfc = StringUtil.trimHandle(newSfcRef); + splitSfc.setHandle(HandleEnum.SPLIT_SFC.getHandle(site,newSfc)); + splitSfc.setSite(site); + splitSfc.setSfc(sfc); + splitSfc.setSplitSfc(newSfc); + splitSfc.setSplitQty(splitQty); + splitSfc.setRouter(StringUtil.trimHandle(routerBo)); + splitSfc.setCreateUser(CommonMethods.getUser()); + splitSfc.setCreatedDateTime(LocalDateTime.now()); + save(splitSfc); + return splitSfc; + } catch (Exception e) { + ExceptionUtil.throwException(e); + } + return null; + } + +} \ No newline at end of file diff --git a/production/src/main/resources/mapper/SfcCrossMapper.xml b/production/src/main/resources/mapper/SfcCrossMapper.xml index 17fd4678..787b3224 100644 --- a/production/src/main/resources/mapper/SfcCrossMapper.xml +++ b/production/src/main/resources/mapper/SfcCrossMapper.xml @@ -160,7 +160,7 @@ WHERE sfc.site = #{site} and + SELECT FROM Z_SPLIT_SFC WHERE HANDLE=#{handle} + + + + + + + + + + + + + + + + + + + + + + INSERT INTO Z_SPLIT_SFC + + HANDLE, + SITE, + SFC, + SPLIT_SFC, + SPLIT_QTY, + ROUTER, + CREATE_USER, + CREATED_DATE_TIME, + VALUES + + #{handle}, + #{site}, + #{sfc}, + #{splitSfc}, + #{splitQty}, + #{router}, + #{createUser}, + #{createdDateTime}, + + + + + INSERT INTO Z_SPLIT_SFC + + + VALUES + + #{handle}, + #{site}, + #{sfc}, + #{splitSfc}, + #{splitQty}, + #{router}, + #{createUser}, + #{createdDateTime}, + + + + + + UPDATE Z_SPLIT_SFC + SITE=#{et.site}, + SFC=#{et.sfc}, + SPLIT_SFC=#{et.splitSfc}, + SPLIT_QTY=#{et.splitQty}, + ROUTER=#{et.router}, + CREATE_USER=#{et.createUser}, + CREATED_DATE_TIME=#{et.createdDateTime}, + WHERE HANDLE=#{et.handle} and ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL} + + + + + UPDATE Z_SPLIT_SFC + SITE=#{et.site}, + SFC=#{et.sfc}, + SPLIT_SFC=#{et.splitSfc}, + SPLIT_QTY=#{et.splitQty}, + ROUTER=#{et.router}, + CREATE_USER=#{et.createUser}, + CREATED_DATE_TIME=#{et.createdDateTime}, + WHERE HANDLE=#{et.handle} and ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL} + + + + + UPDATE Z_SPLIT_SFC + SITE=#{et.site}, + SFC=#{et.sfc}, + SPLIT_SFC=#{et.splitSfc}, + SPLIT_QTY=#{et.splitQty}, + ROUTER=#{et.router}, + CREATE_USER=#{et.createUser}, + CREATED_DATE_TIME=#{et.createdDateTime}, + + + + + HANDLE=#{ew.entity.handle} + AND SITE=#{ew.entity.site} + AND SFC=#{ew.entity.sfc} + AND SPLIT_SFC=#{ew.entity.splitSfc} + AND SPLIT_QTY=#{ew.entity.splitQty} + AND ROUTER=#{ew.entity.router} + AND CREATE_USER=#{ew.entity.createUser} + AND CREATED_DATE_TIME=#{ew.entity.createdDateTime} + + + ${ew.sqlSegment} + + + + + ${ew.sqlSegment} + + + + + DELETE FROM Z_SPLIT_SFC WHERE HANDLE=#{handle} + + + + DELETE FROM Z_SPLIT_SFC + + + + + ${k} = #{cm[${k}]} + + + + + + + + DELETE FROM Z_SPLIT_SFC + + + + + HANDLE=#{ew.entity.handle} + + AND SITE=#{ew.entity.site} + AND SFC=#{ew.entity.sfc} + AND SPLIT_SFC=#{ew.entity.splitSfc} + AND SPLIT_QTY=#{ew.entity.splitQty} + AND ROUTER=#{ew.entity.router} + AND CREATE_USER=#{ew.entity.createUser} + AND CREATED_DATE_TIME=#{ew.entity.createdDateTime} + + + ${ew.sqlSegment} + + + + + ${ew.sqlSegment} + + + + + DELETE FROM Z_SPLIT_SFC WHERE HANDLE IN ( + #{item} + ) + + + + + +