From 9d3ebba11633c05c1be1e5f0951ef477b2abccbe Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 12 Oct 2023 09:29:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=AD=E7=9F=A9=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i3plus-ext-mes.iml | 12 - modules/i3plus-ext-mes-api/i3plus-ext-mes-api.iml | 325 ---------------- .../mes/api/base/jx/IJxShiftProdCenterService.java | 63 +++ .../ext/mes/api/base/jx/ITorqueManageService.java | 86 ++++ .../i3plus-ext-mes-apiservice.iml | 432 --------------------- .../base/jx/JxShiftProdCenterController.java | 138 +++++++ .../controller/base/jx/TorqueManageController.java | 148 +++++++ .../schedulejob/ProjectTourConfirmCreate.java | 2 - .../base/jx/JxShiftProdCenterService.java | 408 +++++++++++++++++++ .../serviceimpl/base/jx/TorqueManageService.java | 211 ++++++++++ .../excel/jx/TorqueManageExcelService.java | 356 +++++++++++++++++ .../i3plus-ext-mes-icloud.iml | 325 ---------------- .../i3plus-ext-mes-pojo/i3plus-ext-mes-pojo.iml | 88 ----- .../ext/mes/pojo/bean/MesProcessTorqueManage.java | 67 ++++ .../bean/MesProcessTorqueManageTaskDetail.java | 207 ++++++++++ .../mes/pojo/bean/MesShiftProdCenterRecord.java | 62 ++- .../ext/mes/pojo/model/UnWorkTimeDetailModel.java | 39 ++ .../mes/pojo/model/bu/BuWorkTimeDetailModel.java | 40 ++ .../MesProcessTorqueManageRepository.java | 16 + ...MesProcessTorqueManageTaskDetailRepository.java | 16 + .../i3plus/ext/mes/pojo/sqlpack/MesExtHqlPack.java | 30 +- .../i3plus/ext/mes/pojo/util/MesExtConstWords.java | 8 + .../i3plus/ext/mes/pojo/util/MesExtEnumUtil.java | 61 ++- 23 files changed, 1946 insertions(+), 1194 deletions(-) delete mode 100644 i3plus-ext-mes.iml delete mode 100644 modules/i3plus-ext-mes-api/i3plus-ext-mes-api.iml create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxShiftProdCenterService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/ITorqueManageService.java delete mode 100644 modules/i3plus-ext-mes-apiservice/i3plus-ext-mes-apiservice.iml create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxShiftProdCenterController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/TorqueManageController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxShiftProdCenterService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/TorqueManageService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/TorqueManageExcelService.java delete mode 100644 modules/i3plus-ext-mes-icloud/i3plus-ext-mes-icloud.iml delete mode 100644 modules/i3plus-ext-mes-pojo/i3plus-ext-mes-pojo.iml create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManage.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManageTaskDetail.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageRepository.java create mode 100644 modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageTaskDetailRepository.java diff --git a/i3plus-ext-mes.iml b/i3plus-ext-mes.iml deleted file mode 100644 index f409c0e..0000000 --- a/i3plus-ext-mes.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/i3plus-ext-mes-api/i3plus-ext-mes-api.iml b/modules/i3plus-ext-mes-api/i3plus-ext-mes-api.iml deleted file mode 100644 index 58bf5d7..0000000 --- a/modules/i3plus-ext-mes-api/i3plus-ext-mes-api.iml +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxShiftProdCenterService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxShiftProdCenterService.java new file mode 100644 index 0000000..8c9bc16 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxShiftProdCenterService.java @@ -0,0 +1,63 @@ +package cn.estsh.i3plus.ext.mes.api.base.jx; + +import cn.estsh.i3plus.ext.mes.pojo.bean.MesShiftProdCenter; +import cn.estsh.i3plus.ext.mes.pojo.model.ShiftProdCenterModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; + +/** + * @Author: wangjie + * @CreateDate: 2021/01/19 15:06 下午 + * @Description: + **/ +public interface IJxShiftProdCenterService { + + /** + * 按条件分页查询产线班次固定作业内容信息 + * + * @param shiftProdCenterModel 查询条件 + * @param pager 分页条件 + * @return 产线班次固定作业内容分页数据 + */ + @ApiOperation(value = "按条件分页查询产线班次固定作业内容信息", notes = "按条件分页查询产线班次固定作业内容信息") + ListPager queryShiftProdCenterByPager(ShiftProdCenterModel shiftProdCenterModel, Pager pager); + + /** + * 新增产线班次固定作业内容信息 + * @param shiftProdCenterModel 产线班次固定作业内容信息 + * @return 产线班次固定作业内容数据 + */ + @ApiOperation(value = "新增产线班次固定作业内容信息", notes = "新增产线班次固定作业内容信息") + MesShiftProdCenter insertShiftProdCenter(ShiftProdCenterModel shiftProdCenterModel); + + /** + * 更新产线班次固定作业内容信息 + * @param shiftProdCenterModel 产线班次固定作业内容信息 + * @return 产线班次固定作业内容数据 + */ + @ApiOperation(value = "更新产线班次固定作业内容信息", notes = "更新产线班次固定作业内容信息") + MesShiftProdCenter updateShiftProdCenter(ShiftProdCenterModel shiftProdCenterModel); + + /** + * 根据id启用或禁用产线班次固定作业内容信息 + * @param id 产线班次固定作业内容信息ID + * @param status 状态 + * @param organizeCode 组织代码 + * @param userName 操作人 + * @return 结果 + */ + @ApiOperation(value = "根据id启用或禁用产线班次固定作业内容信息", notes = "根据id启用或禁用产线班次固定作业内容信息") + int updateShiftProdCenterValidById(Long id, Integer status, String organizeCode, String userName); + + /** + * 根据id删除产线班次固定作业内容信息 + * @param id 产线班次固定作业内容信息ID + * @param organizeCode 组织代码 + * @param userName 操作人 + * @return 结果 + */ + @ApiOperation(value = "根据id删除产线班次固定作业内容信息", notes = "根据id删除产线班次固定作业内容信息") + int deleteShiftProdCenterById(Long id, String organizeCode, String userName); + +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/ITorqueManageService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/ITorqueManageService.java new file mode 100644 index 0000000..3c9ed86 --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/ITorqueManageService.java @@ -0,0 +1,86 @@ +package cn.estsh.i3plus.ext.mes.api.base.jx; + +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManage; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManageTaskDetail; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description:MES_工序扭矩管理接口 + * @Reference: + * @Author: jessica.chen + * @CreateDate: 2019\11\13 13:56 + * @Modify: + **/ +public interface ITorqueManageService { + + /** + * 添加MES_工序扭矩管理 + * + * @param mesProcessTorqueManage 工序扭矩管理 + * @return 插入后的mesProcessTorqueManage对象 + */ + @ApiOperation(value = "添加MES_工序扭矩管理信息", notes = "传入MES_工序扭矩管理对象") + MesProcessTorqueManage insertMesProcessTorqueManage(MesProcessTorqueManage mesProcessTorqueManage); + + /** + * 更新MES_工序扭矩管理 + * + * @param mesProcessTorqueManage 工序扭矩管理 + * @param userName 操作人 + */ + @ApiOperation(value = "更新MES_工序扭矩管理", notes = "更新MES_工序扭矩管理") + void updateMesProcessTorqueManage(MesProcessTorqueManage mesProcessTorqueManage, String userName); + + /** + * 按条件分页查询MES_工序扭矩管理信息 + * + * @param mesProcessTorqueManage 工序扭矩管理 + * @param pager 分页条件 + * @return 分页数据 + */ + @ApiOperation(value = "按条件分页查询MES_工序扭矩管理信息", notes = "按条件分页查询MES_工序扭矩管理信息") + ListPager queryMesProcessTorqueManageByPager(MesProcessTorqueManage mesProcessTorqueManage, Pager pager); + + /** + * 软删扭矩管理信息 + * + * @param ids id数组 + * @param userName 操作人 + */ + @ApiOperation("软删扭矩管理信息") + void deleteWeaklyMesProcessTorqueManageByIds(Long[] ids, String userName); + + /** + * 批量禁用/启用详情 + * + * @param ids id数组 + * @param status 更新状态 + * @param userName 操作人 + * @return 操作行数 + */ + @ApiOperation(value = "批量禁用/启用详情") + int updateMesProcessTorqueManageStatus(String[] ids, int status, String userName); + + /** + * Q管理查询报表 + * + * @param mesTorqueManageTaskDetail 工序扭矩管理 + * @param pager 分页条件 + * @return 分页数据 + */ + @ApiOperation(value = "按条件分页查询MES_工序扭矩管理信息", notes = "按条件分页查询MES_工序扭矩管理信息") + ListPager queryTorqueManageTaskDetailReportByPager(MesProcessTorqueManageTaskDetail mesTorqueManageTaskDetail, Pager pager); + + /** + * 更新MES_Q管理作业明细 + * + * @param mesTorqueManageTaskDetailList Q管理作业明细 + * @param userName 操作人 + */ + @ApiOperation(value = "更新MES_Q管理作业明细", notes = "更新MES_Q管理作业明细") + void doConfirmTorqueManageList(List mesTorqueManageTaskDetailList, String userName); +} diff --git a/modules/i3plus-ext-mes-apiservice/i3plus-ext-mes-apiservice.iml b/modules/i3plus-ext-mes-apiservice/i3plus-ext-mes-apiservice.iml deleted file mode 100644 index 142654a..0000000 --- a/modules/i3plus-ext-mes-apiservice/i3plus-ext-mes-apiservice.iml +++ /dev/null @@ -1,432 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxShiftProdCenterController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxShiftProdCenterController.java new file mode 100644 index 0000000..429ee32 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/JxShiftProdCenterController.java @@ -0,0 +1,138 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx; + +import cn.estsh.i3plus.ext.mes.api.base.IShiftProdCenterService; +import cn.estsh.i3plus.ext.mes.pojo.model.ShiftProdCenterModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.impp.framework.base.controller.MesBaseController; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: wangjie + * @CreateDate: 2021/01/19 15:37 + * @Description: + **/ +@RestController +@RequestMapping(CommonConstWords.BASE_URL_MES + "/jx") +@Api(tags = "产线班次固定作业内容控制层") +public class JxShiftProdCenterController extends MesBaseController { + + @Autowired + private IShiftProdCenterService shiftProdCenterService; + + @GetMapping(value = "/shift-prod-center/query") + @ApiOperation(value = "按条件分页查询产线班次固定作业内容信息") + public ResultBean queryShiftProdCenterByPager(ShiftProdCenterModel shiftProdCenterModel, Pager pager) { + try { + shiftProdCenterModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setListPager(shiftProdCenterService.queryShiftProdCenterByPager(shiftProdCenterModel, pager)); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/shift-prod-center/insert") + @ApiOperation(value = "新增产线班次固定作业内容信息") + public ResultBean insertShiftProdCenter(ShiftProdCenterModel shiftProdCenterModel) { + try { + ValidatorBean.beginValid(shiftProdCenterModel) + .notNull(MesExtConstWords.WORK_CENTER_CODE, shiftProdCenterModel.getWorkCenterCode()) + .notNull(MesExtConstWords.SHIFT_CODE, shiftProdCenterModel.getShiftCode()) + .notNull(MesExtConstWords.SHIFT_NAME, shiftProdCenterModel.getShiftName()) + .notNull(MesExtConstWords.PROD_CODE, shiftProdCenterModel.getProdCode()) + .notNull(MesExtConstWords.PROD_TYPE, shiftProdCenterModel.getProdType()) + .notNull(MesExtConstWords.START_TIME, shiftProdCenterModel.getStartTime()) + .notNull(MesExtConstWords.END_TIME, shiftProdCenterModel.getEndTime()); + + shiftProdCenterModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + shiftProdCenterModel.setCreateUser(AuthUtil.getSessionUser().getUserName()); + shiftProdCenterService.insertShiftProdCenter(shiftProdCenterModel); + + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/shift-prod-center/update") + @ApiOperation(value = "更新产线班次固定作业内容信息") + public ResultBean updateShiftProdCenter(ShiftProdCenterModel shiftProdCenterModel) { + try { + ValidatorBean.beginValid(shiftProdCenterModel) + .notNull(MesExtConstWords.ID, shiftProdCenterModel.getId()) + .notNull(MesExtConstWords.WORK_CENTER_CODE, shiftProdCenterModel.getWorkCenterCode()) + .notNull(MesExtConstWords.SHIFT_CODE, shiftProdCenterModel.getShiftCode()) + .notNull(MesExtConstWords.PROD_TYPE, shiftProdCenterModel.getProdType()) + .notNull(MesExtConstWords.START_TIME, shiftProdCenterModel.getStartTime()) + .notNull(MesExtConstWords.END_TIME, shiftProdCenterModel.getEndTime()); + + shiftProdCenterModel.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + shiftProdCenterModel.setModifyUser(AuthUtil.getSessionUser().getUserName()); + shiftProdCenterService.updateShiftProdCenter(shiftProdCenterModel); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/shift-prod-center/status-update") + @ApiOperation(value = "根据id启用或禁用产线班次固定作业内容信息") + public ResultBean updateShiftProdCenterValidById(Long id, Integer status) { + try { + if (StringUtils.isEmpty(id)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要操作的资源。") + .build(); + } + shiftProdCenterService.updateShiftProdCenterValidById(id, status, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/shift-prod-center/delete") + @ApiOperation(value = "根据id删除产线班次固定作业内容信息") + public ResultBean deleteShiftProdCenterById(Long id) { + try { + if (null == id) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要操作的资源。") + .build(); + } + shiftProdCenterService.deleteShiftProdCenterById(id, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("删除成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/TorqueManageController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/TorqueManageController.java new file mode 100644 index 0000000..1a4c698 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/jx/TorqueManageController.java @@ -0,0 +1,148 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base.jx; + +import cn.estsh.i3plus.ext.mes.api.base.jx.ITorqueManageService; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManage; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManageTaskDetail; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Author: xinwang.yi + * @CreateDate: 2021/01/18 13:33 下午 + * @Description: + **/ +@RestController +@Api(tags = "扭矩管理") +@RequestMapping(CommonConstWords.BASE_URL_MES + "/mes-process-torque-manage") +public class TorqueManageController { + public static final Logger LOGGER = LoggerFactory.getLogger(TorqueManageController.class); + + @Autowired + private ITorqueManageService torqueManageService; + + @PostMapping(value = "/insert") + @ApiOperation(value = "添加MES_工序扭矩管理项目信息") + public ResultBean insertMesProcessTorqueManage(MesProcessTorqueManage mesProcessTorqueManage) { + try { + //条件验证 + ValidatorBean.beginValid(mesProcessTorqueManage) + .notNull(MesExtConstWords.PART_NO,mesProcessTorqueManage.getPartNo()) + .notNull(MesExtConstWords.PROCESS_CODE,mesProcessTorqueManage.getProcessCode()) + .notNull(MesExtConstWords.FASTENING_POSITION, mesProcessTorqueManage.getFasteningPosition()); + mesProcessTorqueManage.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + torqueManageService.insertMesProcessTorqueManage(mesProcessTorqueManage); + return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException imppException) { + LOGGER.error(imppException.getErrorMsg() + ":{}", imppException.getErrorDetail(), imppException); + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update") + @ApiOperation(value = "更新MES_工序扭矩管理项目") + public ResultBean updateMesProcessTorqueManage(MesProcessTorqueManage mesProcessTorqueManage) { + try { + //条件验证 + ValidatorBean.beginValid(mesProcessTorqueManage) + .notNull(MesExtConstWords.PART_NO,mesProcessTorqueManage.getPartNo()) + .notNull(MesExtConstWords.PROCESS_CODE,mesProcessTorqueManage.getProcessCode()) + .notNull(MesExtConstWords.FASTENING_POSITION, mesProcessTorqueManage.getFasteningPosition()); + + if (mesProcessTorqueManage.getId() == null || mesProcessTorqueManage.getId().longValue() < 1) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("请选择需要操作的资源。") + .build(); + } + + torqueManageService.updateMesProcessTorqueManage(mesProcessTorqueManage, AuthUtil.getSessionUser().getUserName()); + + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/query") + @ApiOperation(value = "按条件分页查询MES_工序扭矩管理项目信息", notes = "按条件分页查询MES_工序扭矩管理项目信息") + public ResultBean queryMesProcessTorqueManageByPager(MesProcessTorqueManage mesProcessTorqueManage, Pager pager) { + try { + mesProcessTorqueManage.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + return ResultBean.success().setListPager(torqueManageService.queryMesProcessTorqueManageByPager(mesProcessTorqueManage, pager)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/update-status-batch") + @ApiOperation(value = "批量禁用/启用详情", notes = "批量禁用/启用详情") + public ResultBean updateMesProcessTorqueManageStatus(String[] idsStr, int status) { + try { + ConvertBean.modelSafeArrayNumber(idsStr, true); + //登陆用户 + SessionUser user = AuthUtil.getSessionUser(); + + torqueManageService.updateMesProcessTorqueManageStatus(idsStr, status, user.getUserName()); + return ResultBean.success("修改成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/detail/report-query") + @ApiOperation(value = "扭矩管理查询报表", notes = "扭矩管理查询报表") + public ResultBean queryTorqueManageTaskDetailReportByPager(MesProcessTorqueManageTaskDetail torqueManageTaskDetail, Pager pager) { + try { + torqueManageTaskDetail.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); + return ResultBean.success("查询成功").setListPager(torqueManageService.queryTorqueManageTaskDetailReportByPager(torqueManageTaskDetail, pager)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/detail/confirm") + @ApiOperation(value = "点击扭矩管理明细报表中的班组确认按钮") + public ResultBean updateMesQManageTaskDetailById(@RequestBody List torqueManageTaskDetails) { + try { + torqueManageService.doConfirmTorqueManageList(torqueManageTaskDetails, AuthUtil.getSessionUser().getUserName()); + + return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/ProjectTourConfirmCreate.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/ProjectTourConfirmCreate.java index b9e27bd..d47ef3c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/ProjectTourConfirmCreate.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/ProjectTourConfirmCreate.java @@ -6,7 +6,6 @@ import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.apiservice.util.DateUtil; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; @@ -16,7 +15,6 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.impp.framework.base.schedule.BaseImppScheduleJob; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.init.ApplicationProperties; import com.alibaba.fastjson.JSONObject; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxShiftProdCenterService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxShiftProdCenterService.java new file mode 100644 index 0000000..90e0114 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxShiftProdCenterService.java @@ -0,0 +1,408 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.jx; + +import cn.estsh.i3plus.ext.mes.api.base.IShiftProdCenterService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.IShiftProdCenterDao; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesShiftExt; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesShiftProd; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesShiftProdCenter; +import cn.estsh.i3plus.ext.mes.pojo.model.ShiftProdCenterModel; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesShiftExtRepository; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesShiftProdCenterRepository; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesShiftProdRepository; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author wangjie + * @version 1.0 + * @date 2021/1/13 9:28 + **/ +@Slf4j +@Service +public class JxShiftProdCenterService implements IShiftProdCenterService { + + @Autowired + private IShiftProdCenterDao shiftProdCenterDao; + + @Autowired + private MesShiftExtRepository shiftExtRepository; + + @Autowired + private MesShiftProdRepository shiftProdRepository; + + @Autowired + private MesShiftProdCenterRepository shiftProdCenterRepository; + + @Override + public ListPager queryShiftProdCenterByPager(ShiftProdCenterModel shiftProdCenterModel, Pager pager) { + pager = PagerHelper.getPager(pager, shiftProdCenterDao.queryShiftProdCenterByPagerCount(shiftProdCenterModel)); + List shiftProdCenterModelList = shiftProdCenterDao.queryShiftProdCenterByPager(shiftProdCenterModel , pager); + if (!CollectionUtils.isEmpty(shiftProdCenterModelList)) { + for (ShiftProdCenterModel prodCenterModel : shiftProdCenterModelList) { + if (null == prodCenterModel) { + continue; + } + prodCenterModel.setProdCategoryName(StringUtils.isEmpty(prodCenterModel.getProdCategory()) ? + null : MesExtEnumUtil.SHIFT_PROD_CATEGORY.valueOfDescription(prodCenterModel.getProdCategory())); + prodCenterModel.setProdTypeName(StringUtils.isEmpty(prodCenterModel.getProdType()) ? + null : MesExtEnumUtil.SHIFT_PROD_TYPE.valueOfDescription(prodCenterModel.getProdType())); + prodCenterModel.setIsProdTimeName(StringUtils.isEmpty(prodCenterModel.getIsProdTime()) ? + null : MesExtEnumUtil.SHIFT_PROD_IS_PROD_TIME.valueOfDescription(prodCenterModel.getIsProdTime())); + } + } + + return new ListPager(shiftProdCenterModelList, pager); + } + + @Override + public MesShiftProdCenter insertShiftProdCenter(ShiftProdCenterModel shiftProdCenterModel) { + //获取当前选择的班次信息 + MesShiftExt shiftExt = getShiftByCenterAndShiftCode(shiftProdCenterModel); + + //校验[开始时间+结束时间] 在班次时间范围内 + checkTimeIsInShiftTime(shiftProdCenterModel, shiftExt); + + //[生产线代码+班次代码+作业类型(停机跟生产两个类型)] 校验 [开始时间+结束时间] 重叠 + checkTimeIsOverlap(shiftProdCenterModel, shiftExt); + + MesShiftProdCenter shiftProdCenter = new MesShiftProdCenter(); + BeanUtils.copyProperties(shiftProdCenterModel, shiftProdCenter, MesExtConstWords.ID); + ConvertBean.serviceModelInitialize(shiftProdCenter, shiftProdCenterModel.getCreateUser()); + return shiftProdCenterRepository.insert(shiftProdCenter); + } + + private MesShiftExt getShiftByCenterAndShiftCode(ShiftProdCenterModel shiftProdCenterModel) { + MesShiftExt shiftExt = shiftExtRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, + MesExtConstWords.WORK_CENTER_CODE, MesExtConstWords.SHIFT_CODE}, + new Object[]{shiftProdCenterModel.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), + shiftProdCenterModel.getWorkCenterCode(), shiftProdCenterModel.getShiftCode()}); + if (null == shiftExt) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("生产线代码[%s]班次代码[%s]记录不存在", + shiftProdCenterModel.getShiftCode(), shiftProdCenterModel.getWorkCenterCode()) + .build(); + } + return shiftExt; + } + + private void checkTimeIsOverlap(ShiftProdCenterModel shiftProdCenterModel, MesShiftExt shiftExt) { + //获取[生产线代码+班次代码+作业类型(停机跟生产两个类型)] 维度的数据 + List shiftProdCenterList = getShiftProdCenterList(shiftProdCenterModel); + + //遍历并判断重叠的情况 + String msg = checkTimeIsOverlapMethod(shiftProdCenterList, shiftProdCenterModel, shiftExt); + + if (!StringUtils.isEmpty(msg)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail(msg) + .build(); + } + } + + public String checkTimeIsOverlapMethod(List shiftProdCenterList, ShiftProdCenterModel shiftProdCenterModel, MesShiftExt shiftExt) { + if (CollectionUtils.isEmpty(shiftProdCenterList)) { + return null; + } + for (MesShiftProdCenter shiftProdCenter : shiftProdCenterList) { + if (null == shiftProdCenter || + (!StringUtils.isEmpty(shiftProdCenterModel.getId()) && shiftProdCenterModel.getId().compareTo(shiftProdCenter.getId()) == 0)) { + continue; + } + + //db实际开始跟结束时间(YYYY-MM-dd HH:mm:ss) + ShiftProdCenterModel dbDateTimeModel = new ShiftProdCenterModel(); + dbDateTimeModel.setStartTime(shiftProdCenter.getStartTime()); + dbDateTimeModel.setEndTime(shiftProdCenter.getEndTime()); + checkTimeIsInShiftTime(dbDateTimeModel, shiftExt); + + //存在三种时间重叠的情况 + //if 当前 实际开始时间 大于等于db数据的 实际开始时间 并小于db数据的 实际结束时间 + //if 当前 实际结束时间 大于db数据的 实际开始时间 并小于等于db数据的 实际结束时间 + //if 当前 实际开始时间 小于等于db数据的 实际开始时间 并 当前 实际结束时间 大于等于db数据的 实际结束时间 + if ((TimeTool.stringParseToDate(shiftProdCenterModel.getStartDateTime()).compareTo(TimeTool.stringParseToDate(dbDateTimeModel.getStartDateTime())) >= 0 && + TimeTool.stringParseToDate(shiftProdCenterModel.getStartDateTime()).compareTo(TimeTool.stringParseToDate(dbDateTimeModel.getEndDateTime())) < 0) || + (TimeTool.stringParseToDate(shiftProdCenterModel.getEndDateTime()).compareTo(TimeTool.stringParseToDate(dbDateTimeModel.getStartDateTime())) > 0 && + TimeTool.stringParseToDate(shiftProdCenterModel.getEndDateTime()).compareTo(TimeTool.stringParseToDate(dbDateTimeModel.getEndDateTime())) <= 0) || + (TimeTool.stringParseToDate(shiftProdCenterModel.getStartDateTime()).compareTo(TimeTool.stringParseToDate(dbDateTimeModel.getStartDateTime())) <= 0 && + TimeTool.stringParseToDate(shiftProdCenterModel.getEndDateTime()).compareTo(TimeTool.stringParseToDate(dbDateTimeModel.getEndDateTime())) >= 0)) { + return String.format("选择的时间[%s - %s]与已存在的数据存在时间重叠", shiftProdCenterModel.getStartTime(), shiftProdCenterModel.getEndTime()); + } + } + return null; + } + + private List getShiftProdCenterList(ShiftProdCenterModel shiftProdCenterModel) { + //获取作业类型的大类,停机或生产 + List prodTypeList = getProdTypeList(shiftProdCenterModel.getProdType()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(shiftProdCenterModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(shiftProdCenterModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(shiftProdCenterModel.getShiftCode(), MesExtConstWords.SHIFT_CODE, packBean); + List shiftProdCenterList = shiftProdCenterRepository.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(shiftProdCenterList)) { + List prodCodeList = (shiftProdCenterList.stream().filter(o -> null != o) + .map(MesShiftProdCenter::getProdCode).collect(Collectors.toList())).stream().distinct().collect(Collectors.toList()); + List shiftProdList = CollectionUtils.isEmpty(prodCodeList) ? null : + getShiftProdList(shiftProdCenterModel.getOrganizeCode(), prodCodeList, prodTypeList); + if (!CollectionUtils.isEmpty(shiftProdList)) { + prodCodeList = (shiftProdList.stream().filter(o -> null != o) + .map(MesShiftProd::getProdCode).collect(Collectors.toList())).stream().distinct().collect(Collectors.toList()); + } + List finalProdCodeList = prodCodeList; + shiftProdCenterList = shiftProdCenterList.stream() + .filter(o -> (null != o && !CollectionUtils.isEmpty(finalProdCodeList) && finalProdCodeList.contains(o.getProdCode()))).collect(Collectors.toList()); + } + return shiftProdCenterList; + } + + private List getShiftProdList(String organizeCode, List prodCodeList, List prodTypeList) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(prodCodeList, MesExtConstWords.PROD_CODE, ddlPackBean); + DdlPreparedPack.getInPackList(prodTypeList, MesExtConstWords.PROD_TYPE, ddlPackBean); + return shiftProdRepository.findByHqlWhere(ddlPackBean); + } + + private List getProdTypeList(Integer prodType) { + List prodTypeList = new ArrayList<>(); + if (MesExtEnumUtil.SHIFT_PROD_TYPE.NORMAL_STOP_CENTER.getValue() == prodType || + MesExtEnumUtil.SHIFT_PROD_TYPE.UNNORMAL_STOP_CENTER.getValue() == prodType) { + prodTypeList.add(MesExtEnumUtil.SHIFT_PROD_TYPE.NORMAL_STOP_CENTER.getValue()); + prodTypeList.add(MesExtEnumUtil.SHIFT_PROD_TYPE.UNNORMAL_STOP_CENTER.getValue()); + } else { + prodTypeList.add(MesExtEnumUtil.SHIFT_PROD_TYPE.NORMAL_PROD.getValue()); + prodTypeList.add(MesExtEnumUtil.SHIFT_PROD_TYPE.UNNORMAL_PROD.getValue()); + } + return prodTypeList; + } + + private void checkTimeIsInShiftTime(ShiftProdCenterModel shiftProdCenterModel, MesShiftExt shiftExt) { + String msg = checkTimeIsInShiftTimeComm(shiftProdCenterModel, shiftExt); + if (!StringUtils.isEmpty(msg)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail(msg) + .build(); + } + } + + public String checkTimeIsInShiftTimeComm(ShiftProdCenterModel shiftProdCenterModel, MesShiftExt shiftExt) { + //当前时间(YYYY-MM-dd) + String currentTimeYmd = TimeTool.getToday(); + //判断当前班次时间是否跨天,结束时间小于等于开始时间即跨天,否则当天 + Boolean isNextDayFlagShift = compareHms(shiftExt.getStartTime(), shiftExt.getEndTime()); + //判断当前选择的时间是否跨天,结束时间小于等于开始时间即跨天,否则当天 + Boolean isNextDayFlagCurr = compareHms(shiftProdCenterModel.getStartTime(), shiftProdCenterModel.getEndTime()); + + //班次实际开始时间(YYYY-MM-dd HH:mm:ss) [当前年月日 + 班次开始时间] + String shiftStartYmdHms = currentTimeYmd + MesExtConstWords.ONE_SPACE + shiftExt.getStartTime(); + //班次实际结束时间(YYYY-MM-dd HH:mm:ss) [if 当天: 当前年月日 + 班次结束时间][else : 明天年月 + 班次结束时间] + String shiftEndYmdHms = getDateTimeByFlag(isNextDayFlagShift, currentTimeYmd, shiftExt.getEndTime()); + String currStartYmdHms; + String currEndYmdHms; + + //当前班次时间不跨天 + if (!isNextDayFlagShift) { + if (isNextDayFlagCurr) { //当前选择的时间跨天 + return String.format("选择的时间[%s - %s]不在班次时间[%s - %s]的范围内", + shiftProdCenterModel.getStartTime(), shiftProdCenterModel.getEndTime(), shiftExt.getStartTime(), shiftExt.getEndTime()); + } else { //当前选择的时间不跨天 + //当前选择的实际开始时间(YYYY-MM-dd HH:mm:ss) [当前年月日 + 当前开始时间] + currStartYmdHms = currentTimeYmd + MesExtConstWords.ONE_SPACE + shiftProdCenterModel.getStartTime(); + //当前选择的实际结束时间(YYYY-MM-dd HH:mm:ss) [当前年月日 + 当前结束时间] + currEndYmdHms = currentTimeYmd + MesExtConstWords.ONE_SPACE + shiftProdCenterModel.getEndTime(); + } + } else { //当前班次时间跨天 + if (isNextDayFlagCurr) { //当前选择的时间跨天 + //当前选择的实际开始时间(YYYY-MM-dd HH:mm:ss) [当前年月日 + 当前开始时间] + currStartYmdHms = currentTimeYmd + MesExtConstWords.ONE_SPACE + shiftProdCenterModel.getStartTime(); + //当前选择的实际结束时间(YYYY-MM-dd HH:mm:ss) [明天年月 + 当前结束时间] + currEndYmdHms = getDateTimeByFlag(isNextDayFlagCurr, currentTimeYmd, shiftProdCenterModel.getEndTime()); + } else { //当前选择的时间不跨天 + //当前选择的开始时间小于当前班次的开始时间则当前选择的开始跟结束时间均跨天 + if (TimeTool.stringParseToDate(shiftProdCenterModel.getStartTime()).compareTo(TimeTool.stringParseToDate(shiftExt.getStartTime())) < 0) { + //当前选择的实际开始时间(YYYY-MM-dd HH:mm:ss) [明天年月 + 当前开始时间] + currStartYmdHms = getDateTimeByFlag(true, currentTimeYmd, shiftProdCenterModel.getStartTime()); + //当前选择的实际结束时间(YYYY-MM-dd HH:mm:ss) [明天年月 + 当前结束时间] + currEndYmdHms = getDateTimeByFlag(true, currentTimeYmd, shiftProdCenterModel.getEndTime()); + } else { //当前选择的开始时间大于等于当前班次的开始时间则当前选择的开始跟结束时间均为当天 + //当前选择的实际开始时间(YYYY-MM-dd HH:mm:ss) [当前年月日 + 当前开始时间] + currStartYmdHms = currentTimeYmd + MesExtConstWords.ONE_SPACE + shiftProdCenterModel.getStartTime(); + //当前选择的实际结束时间(YYYY-MM-dd HH:mm:ss) [当前年月日 + 当前结束时间] + currEndYmdHms = currentTimeYmd + MesExtConstWords.ONE_SPACE + shiftProdCenterModel.getEndTime(); + } + } + } + + //判断是否在班次时间范围内 [当前 实际开始时间 小于 班次的 实际开始时间 或者 当前 实际结束时间 大于 班次的 实际结束时间] + if (TimeTool.stringParseToDate(currStartYmdHms).compareTo(TimeTool.stringParseToDate(shiftStartYmdHms)) < 0 || + TimeTool.stringParseToDate(currEndYmdHms).compareTo(TimeTool.stringParseToDate(shiftEndYmdHms)) > 0) { + return String.format("选择的时间[%s - %s]不在班次时间[%s - %s]的范围内", + shiftProdCenterModel.getStartTime(), shiftProdCenterModel.getEndTime(), shiftExt.getStartTime(), shiftExt.getEndTime()); + } + shiftProdCenterModel.setStartDateTime(currStartYmdHms); + shiftProdCenterModel.setEndDateTime(currEndYmdHms); + return null; + } + + private Boolean compareHms(String startDate, String endDate) { + Boolean flag; + DateFormat sdf = new SimpleDateFormat(MesExtConstWords.TIME_FORMAT); + try { + if (sdf.parse(startDate).compareTo(sdf.parse(endDate)) >= 0) { + flag = true; + } else { + flag = false; + } + } catch (Exception e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("时间比较出错") + .build(); + } + return flag; + } + + private String getDateTimeByFlag(Boolean isNextDayFlag, String currentTimeYmd, String time) { + return !isNextDayFlag ? (currentTimeYmd + MesExtConstWords.ONE_SPACE + time) : + (calcDay(currentTimeYmd, 1) + MesExtConstWords.ONE_SPACE + time); + } + + private String calcDay(String day, int amount) { + try { + DateFormat sdf = new SimpleDateFormat(MesExtConstWords.DATE_FORMAT); + return TimeTool.timeCalc(sdf.parse(day), Calendar.DATE, amount, MesExtConstWords.DATE_FORMAT); + } catch (ParseException e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("时间计算失败") + .build(); + } + } + + @Override + public MesShiftProdCenter updateShiftProdCenter(ShiftProdCenterModel shiftProdCenterModel) { + MesShiftProdCenter shiftProdCenterDb = getShiftProdCenterById(shiftProdCenterModel.getId()); + if (CommonEnumUtil.IS_VAILD.INVAILD.getValue() == shiftProdCenterDb.getIsValid()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("ID[%s]记录已被禁用,不能修改", shiftProdCenterModel.getId()) + .build(); + } + if (shiftProdCenterDb.getStartTime().equals(shiftProdCenterModel.getStartTime()) && + shiftProdCenterDb.getEndTime().equals(shiftProdCenterModel.getEndTime())) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("ID[%s]记录未进行任何修改", shiftProdCenterModel.getId()) + .build(); + } + + //获取当前选择的班次信息 + MesShiftExt shiftExt = getShiftByCenterAndShiftCode(shiftProdCenterModel); + + //校验[开始时间+结束时间] 在班次时间范围内 + checkTimeIsInShiftTime(shiftProdCenterModel, shiftExt); + + //[生产线代码+班次代码+作业类型(停机跟生产两个类型)] 校验 [开始时间+结束时间] 重叠 + checkTimeIsOverlap(shiftProdCenterModel, shiftExt); + + shiftProdCenterDb.setStartTime(shiftProdCenterModel.getStartTime()); + shiftProdCenterDb.setEndTime(shiftProdCenterModel.getEndTime()); + ConvertBean.serviceModelUpdate(shiftProdCenterDb, shiftProdCenterModel.getModifyUser()); + return shiftProdCenterRepository.save(shiftProdCenterDb); + } + + private MesShiftProdCenter getShiftProdCenterById(Long id) { + MesShiftProdCenter shiftProdCenterDb = shiftProdCenterRepository.getById(id); + if (null == shiftProdCenterDb || CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == shiftProdCenterDb.getIsDeleted()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("ID[%s]记录不存在", id) + .build(); + } + return shiftProdCenterDb; + } + + @Override + public int updateShiftProdCenterValidById(Long id, Integer status, String organizeCode, String userName) { + MesShiftProdCenter shiftProdCenterDb = getShiftProdCenterById(id); + if (CommonEnumUtil.IS_VAILD.VAILD.getValue() == status) { + //封装校验需要的入参 + ShiftProdCenterModel shiftProdCenterModel = packShiftProdCenterModel(id, organizeCode, shiftProdCenterDb); + //获取当前选择的班次信息 + MesShiftExt shiftExt = getShiftByCenterAndShiftCode(shiftProdCenterModel); + + //校验[开始时间+结束时间] 在班次时间范围内 + checkTimeIsInShiftTime(shiftProdCenterModel, shiftExt); + + //[生产线代码+班次代码+作业类型(停机跟生产两个类型)] 校验 [开始时间+结束时间] 重叠 + checkTimeIsOverlap(shiftProdCenterModel, shiftExt); + } + + return shiftProdCenterRepository.updateByProperties(new String[]{MesExtConstWords.ID}, new Object[]{id}, + new String[]{MesExtConstWords.IS_VALID, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME}, + new Object[]{status, userName, TimeTool.getNowTime(true)}); + } + + private ShiftProdCenterModel packShiftProdCenterModel(Long id, String organizeCode, MesShiftProdCenter shiftProdCenterDb) { + ShiftProdCenterModel shiftProdCenterModel = new ShiftProdCenterModel(); + shiftProdCenterModel.setWorkCenterCode(shiftProdCenterDb.getWorkCenterCode()); + shiftProdCenterModel.setShiftCode(shiftProdCenterDb.getShiftCode()); + shiftProdCenterModel.setStartTime(shiftProdCenterDb.getStartTime()); + shiftProdCenterModel.setEndTime(shiftProdCenterDb.getEndTime()); + MesShiftProd shiftProd = shiftProdRepository.getByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.PROD_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), shiftProdCenterDb.getProdCode()}); + if (null == shiftProd) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("ID[%s]记录关联的班次作业内容信息已不存在", id) + .build(); + } + shiftProdCenterModel.setProdType(shiftProd.getProdType()); + return shiftProdCenterModel; + } + + + @Override + public int deleteShiftProdCenterById(Long id, String organizeCode, String userName) { + return shiftProdCenterRepository.updateByProperties(new String[]{MesExtConstWords.ID}, new Object[]{id}, + new String[]{MesExtConstWords.IS_DELETED, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME}, + new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), userName, TimeTool.getNowTime(true)}); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/TorqueManageService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/TorqueManageService.java new file mode 100644 index 0000000..001d746 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/TorqueManageService.java @@ -0,0 +1,211 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.jx; + +import cn.estsh.i3plus.ext.mes.api.base.jx.ITorqueManageService; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManage; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManageTaskDetail; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesProcessTorqueManageRepository; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesProcessTorqueManageTaskDetailRepository; +import cn.estsh.i3plus.ext.mes.pojo.sqlpack.MesExtHqlPack; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellRepository; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author: xinwang.yi + * @CreateDate: 2023/10/09 11:41 上午 + * @Description: + **/ +@Service +public class TorqueManageService implements ITorqueManageService { + + @Autowired + private MesProcessTorqueManageRepository mesProcessTorqueManageRDao; + + @Autowired + private MesProcessTorqueManageTaskDetailRepository mesTorqueManageTaskDetailRDao; + + @Autowired + private MesWorkCellRepository workCellRepository; + + @Override + public MesProcessTorqueManage insertMesProcessTorqueManage(MesProcessTorqueManage mesProcessTorqueManage) { + //数据唯一性校验 + StringBuffer whereStr = new StringBuffer(); + + // 封装唯一校验查询条件 + HqlPack.getStringEqualPack(mesProcessTorqueManage.getOrganizeCode(), MesExtConstWords.ORGANIZE_CODE, whereStr); + HqlPack.getStringEqualPack(mesProcessTorqueManage.getPartNo(), MesExtConstWords.PART_NO, whereStr); + HqlPack.getStringEqualPack(mesProcessTorqueManage.getProcessCode(), MesExtConstWords.PROCESS_CODE, whereStr); + HqlPack.getStringEqualPack(mesProcessTorqueManage.getFasteningPosition(), MesExtConstWords.FASTENING_POSITION, whereStr); + + if (mesProcessTorqueManageRDao.isExitByHqlWhere(whereStr.toString())) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("物料编码【%s】、工序编号【%s】、紧固部位【%s】在扭矩管理信息中已存在" + , mesProcessTorqueManage.getPartNo(), mesProcessTorqueManage.getProcessCode(), mesProcessTorqueManage.getFasteningPosition()) + .setErrorSolution("请更换新增参数") + .build(); + } + + ConvertBean.serviceModelInitialize(mesProcessTorqueManage, AuthUtil.getSessionUser().getUserName()); + return mesProcessTorqueManageRDao.insert(mesProcessTorqueManage); + } + + @Override + public void updateMesProcessTorqueManage(MesProcessTorqueManage mesProcessTorqueManage, String userName) { + MesProcessTorqueManage processTorqueManageDb = mesProcessTorqueManageRDao.getById(mesProcessTorqueManage.getId()); + + if (null == processTorqueManageDb) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("ID[%s]记录不存在", processTorqueManageDb.getId()) + .build(); + + // 封装唯一校验查询条件 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProcessTorqueManage.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesProcessTorqueManage.getOrganizeCode(), MesExtConstWords.ORGANIZE_CODE, packBean); + DdlPreparedPack.getStringEqualPack(mesProcessTorqueManage.getPartNo(), MesExtConstWords.PART_NO, packBean); + DdlPreparedPack.getStringEqualPack(mesProcessTorqueManage.getProcessCode(), MesExtConstWords.PROCESS_CODE, packBean); + DdlPreparedPack.getStringEqualPack(mesProcessTorqueManage.getFasteningPosition(), MesExtConstWords.FASTENING_POSITION, packBean); + MesProcessTorqueManage processTorqueManageDbIsExist = mesProcessTorqueManageRDao.getByProperty(packBean); + + if (null != processTorqueManageDbIsExist && processTorqueManageDbIsExist.getId().compareTo(processTorqueManageDbIsExist.getId()) != 0) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("物料编码【%s】、工序编号【%s】、紧固部位【%s】在扭矩管理信息启用或禁用数据中已存在" + , mesProcessTorqueManage.getPartNo(), mesProcessTorqueManage.getProcessCode(), mesProcessTorqueManage.getFasteningPosition()) + .setErrorSolution("请更换新增参数") + .build(); + } + + processTorqueManageDb.setPartNo(mesProcessTorqueManage.getPartNo()); + processTorqueManageDb.setProcessCode(mesProcessTorqueManage.getProcessCode()); + processTorqueManageDb.setProcessName(mesProcessTorqueManage.getProcessName()); + processTorqueManageDb.setSpecification(mesProcessTorqueManage.getSpecification()); + processTorqueManageDb.setFasteningPosition(mesProcessTorqueManage.getFasteningPosition()); + processTorqueManageDb.setUpLimit(mesProcessTorqueManage.getUpLimit()); + processTorqueManageDb.setDownLimit(mesProcessTorqueManage.getDownLimit()); + + ConvertBean.serviceModelUpdate(processTorqueManageDb, userName); + mesProcessTorqueManageRDao.save(processTorqueManageDb); + } + + @Override + public ListPager queryMesProcessTorqueManageByPager(MesProcessTorqueManage mesProcessTorqueManage, Pager pager) { + if (mesProcessTorqueManage == null) { + pager = PagerHelper.getPager(pager, mesProcessTorqueManageRDao.listCount()); + return new ListPager(mesProcessTorqueManageRDao.listPager(pager), pager); + } else { + DdlPackBean hqlPack = MesExtHqlPack.getMesProcessTorqueManage(mesProcessTorqueManage); + hqlPack.setOrderByStr(mesProcessTorqueManage.orderBy()); + pager = PagerHelper.getPager(pager, mesProcessTorqueManageRDao.findByHqlWhereCount(hqlPack)); + List byHqlWherePage = mesProcessTorqueManageRDao.findByHqlWherePage(hqlPack, pager); + return new ListPager(byHqlWherePage, pager); + } + } + + @Override + public void deleteWeaklyMesProcessTorqueManageByIds(Long[] ids, String userName) { + mesProcessTorqueManageRDao.deleteWeaklyByIds(ids, userName); + } + + @Override + public int updateMesProcessTorqueManageStatus(String[] ids, int status, String userName) { + StringBuffer wheres = new StringBuffer(); + HqlPack.getInPack(String.join(",", ids), MesExtConstWords.ID, wheres); + + int num = mesProcessTorqueManageRDao.updateByHqlWhere( + wheres.toString(), + new String[]{MesExtConstWords.IS_VALID, MesExtConstWords.MODIFY_USER, MesExtConstWords.MODIFY_DATE_TIME}, + new Object[]{status, userName, TimeTool.getNowTime(true)} + ); + return num; + } + + @Override + public ListPager queryTorqueManageTaskDetailReportByPager(MesProcessTorqueManageTaskDetail mesTorqueManageTaskDetail, Pager pager) { + DdlPackBean packBean = MesExtHqlPack.getMesProcessTorqueManageTaskDetail(mesTorqueManageTaskDetail); + + pager = PagerHelper.getPager(pager, mesTorqueManageTaskDetailRDao.findByHqlWhereCount(packBean)); + List torqueManageTaskDetailList = mesTorqueManageTaskDetailRDao.findByHqlWhere(packBean); + + if (!CollectionUtils.isEmpty(torqueManageTaskDetailList)) { + + for (MesProcessTorqueManageTaskDetail torqueManageTaskDetail : torqueManageTaskDetailList) { + if (torqueManageTaskDetail != null) { + if (!StringUtils.isEmpty(torqueManageTaskDetail.getTorqueSpecValue())) { + List torqueSpecValueList = Arrays.stream(torqueManageTaskDetail.getTorqueSpecValue().split(MesExtConstWords.COMMA)).collect(Collectors.toList()); + StringBuffer torqueSpecValueDesc = new StringBuffer(); + for (String torqueSpecValue : torqueSpecValueList) { + torqueSpecValueDesc.append(MesExtEnumUtil.TORQUE_SPEC_VALUE.valueOfDescription(torqueSpecValue)); + torqueSpecValueDesc.append(MesExtConstWords.COMMA); + } + torqueSpecValueDesc.deleteCharAt(torqueSpecValueDesc.length() - 1); + torqueManageTaskDetail.setTorqueSpecValueDesc(torqueSpecValueDesc.toString()); + } + + if (!StringUtils.isEmpty(torqueManageTaskDetail.getTorqueManageNo1())) torqueManageTaskDetail.setTorqueManageNo1Full("M60-"+ torqueManageTaskDetail.getTorqueManageNo1() +"-Q0"); + if (!StringUtils.isEmpty(torqueManageTaskDetail.getTorqueManageNo2())) torqueManageTaskDetail.setTorqueManageNo2Full("M60-"+ torqueManageTaskDetail.getTorqueManageNo2() +"-Q0"); + if (!StringUtils.isEmpty(torqueManageTaskDetail.getTorqueManageNo3())) torqueManageTaskDetail.setTorqueManageNo3Full("M60-"+ torqueManageTaskDetail.getTorqueManageNo3() +"-Q0"); + } + } + } + return new ListPager(torqueManageTaskDetailList, pager); + } + + private Map getWorkCenterCodeByWorkCellCodeMap(MesProcessTorqueManageTaskDetail mesTorqueManageTaskDetail, List qmanageTaskDetails) { + List workCellCodeList = qmanageTaskDetails.stream().map(MesProcessTorqueManageTaskDetail::getWorkCellCode).distinct().collect(Collectors.toList()); + if(CollectionUtils.isEmpty(workCellCodeList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesTorqueManageTaskDetail.getOrganizeCode()); + DdlPreparedPack.getInPackList(workCellCodeList, MesExtConstWords.WORK_CELL_CODE, packBean); + List mesWorkCellDbList = workCellRepository.findByHqlWhere(packBean); + return CollectionUtils.isEmpty(mesWorkCellDbList) ? null : mesWorkCellDbList.stream().collect(Collectors.toMap(MesWorkCell::getWorkCellCode, MesWorkCell::getWorkCenterCode)); + } + + @Override + public void doConfirmTorqueManageList(List mesTorqueManageTaskDetailList, String userName) { + for (MesProcessTorqueManageTaskDetail mesTorqueManageTaskDetail : mesTorqueManageTaskDetailList) { + MesProcessTorqueManageTaskDetail torqueManageTaskDetail = mesTorqueManageTaskDetailRDao.getById(mesTorqueManageTaskDetail.getId()); + if (torqueManageTaskDetail == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("当前Q管理任务明细数据不存在") + .build(); + } + + torqueManageTaskDetail.setTeamConfirmUser(mesTorqueManageTaskDetail.getTeamConfirmUser()); + torqueManageTaskDetail.setTeamConfirmTime(mesTorqueManageTaskDetail.getTeamConfirmTime()); + torqueManageTaskDetail.setIsTeamConfirm(mesTorqueManageTaskDetail.getIsTeamConfirm()); + ConvertBean.serviceModelUpdate(torqueManageTaskDetail, torqueManageTaskDetail.getTeamConfirmUser()); + + } + + mesTorqueManageTaskDetailRDao.saveAll(mesTorqueManageTaskDetailList); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/TorqueManageExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/TorqueManageExcelService.java new file mode 100644 index 0000000..be3aec8 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/TorqueManageExcelService.java @@ -0,0 +1,356 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.jx; + +import cn.estsh.i3plus.ext.mes.api.base.IExcelImportExtService; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.CommonExtService; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManage; +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManage; +import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportErrorExtModel; +import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportResultExtModel; +import cn.estsh.i3plus.ext.mes.pojo.repository.MesProcessTorqueManageRepository; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.mes.apiservice.util.MesCommonUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.platform.common.util.MesConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProcess; +import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProcessRepository; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : Q管理项目导入 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-04-23 + * @Modify: + **/ +@Service +public class TorqueManageExcelService implements IExcelImportExtService { + + @Autowired + private MesProcessTorqueManageRepository mesProcessTorqueManageRDao; + + @Autowired + private MesProcessRepository mesProcessRDao; + + @Autowired + private MesPartRepository mesPartRDao; + + @Autowired + private CommonExtService commonExtService; + + /** + * 扭矩管理配置导入 + * + * @param workbook + * @param organizeCode + * @param userName + * @return + */ + @Override + public ExcelImportResultExtModel insertDataByExcel(Workbook workbook, String organizeCode, String userName) { + //读取表格 + ExcelImportResultExtModel excelImportResultExtModel = this.sheetExtractMesProcessTorqueManage(workbook.getSheetAt(0), organizeCode, userName); + //数据入库 + this.insertExcelMesProcessTorqueManage(excelImportResultExtModel); + return excelImportResultExtModel; + } + + /** + * 扭矩管理配置导入-读取表格 + * + * @param sheetAt + * @param organizeCode + * @param userName + * @return + */ + private ExcelImportResultExtModel sheetExtractMesProcessTorqueManage(Sheet sheetAt, String organizeCode, String userName) { + //从0行开始读取 + int totalNumberOfRows = sheetAt.getLastRowNum() + 1; + + //MesProcessTorqueManage集合 + List processTorqueManageExtList = new ArrayList<>(); + + //成功数量 + Integer successRowNum = 0; + //失败数量 + Integer failRowNum = 0; + //错误的行号 + String errorRows = ""; + + //错误行信息集合 + List excelImportErrorExtModels = new ArrayList<>(); + + //用于EXCEL表中的 partNo+工序编号+紧固位置 唯一校验 + Map torqueManageByOnlyMap = new HashMap<>(); + + //根据零件号、工序代码、管理项目、管理内容、检查内容 查询替代料中是否存在数据 + List processTorqueManageList = mesProcessTorqueManageRDao.findByProperty( + new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}); + Map> processTorqueManageMap = CollectionUtils.isEmpty(processTorqueManageList) ? null : + processTorqueManageList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> new StringJoiner(MesExtConstWords.AND).add(o.getProcessCode()).add(o.getPartNo()).add(o.getFasteningPosition()).toString())); + + // 查询物料表 + Map partNoEntityMap; + try { + partNoEntityMap = MesCommonUtil.getCodeEntityMap(mesPartRDao, MesExtConstWords.PART_NO, organizeCode, "物料表"); + } catch (Exception e) { + partNoEntityMap = null; + } + + // 查询工序表 + Map processCodeEntityMap; + try { + processCodeEntityMap = MesCommonUtil.getCodeEntityMap(mesProcessRDao, MesExtConstWords.PROCESS_CODE, organizeCode, "工序表"); + } catch (Exception e) { + processCodeEntityMap = null; + } + + //从excel表的第5行数据开始导入,getFirstRowNum是从0行开始读取 + for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i++) { + Row row = sheetAt.getRow(i); + //空行跳过 + if (null == row) { + continue; + } + //获取总列数 + Short lastCellNum = row.getLastCellNum(); + if (lastCellNum > 0) { + + int rowNum = i + 1; //当前行号 + int errorNum = 0; //错误数量 + String cellNum = ""; //错误列号 + String errorInfo = ""; //错误信息 + + //工序编号 + try { + //第一列必须有值,否则跳过 + row.getCell(0).setCellType(CellType.STRING); + } catch (Exception e) { + continue; + } + String processCode = row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + String processName = null; + + //零件编号 + String partNo = null; + try { + row.getCell(1).setCellType(CellType.STRING); + partNo = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + //紧固部位 + String fasteningPosition = null; + try { + row.getCell(2).setCellType(CellType.STRING); + fasteningPosition = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + //规格 + String specification = null; + try { + row.getCell(3).setCellType(CellType.STRING); + specification = row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + //上限值 + String upLimit = null; + try { + row.getCell(4).setCellType(CellType.STRING); + upLimit = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + //下限值 + String downLimit = null; + try { + row.getCell(5).setCellType(CellType.STRING); + downLimit = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + + //校验工序编号 + if (StringUtils.isEmpty(processCode)) { + errorNum++; + cellNum += "A;"; + errorInfo += "第A列数据必填;"; + } else if (!processCodeEntityMap.containsKey(processCode)) { + errorNum++; + cellNum += "A;"; + errorInfo += "第A列数据无效;"; + } else { + processName = ((MesProcess) processCodeEntityMap.get(processCode)).getProcessName(); + } + + //校验零件编号 + if (!StringUtils.isEmpty(partNo)) { + if (!partNoEntityMap.containsKey(partNo)) { + errorNum++; + cellNum += "A;"; + errorInfo += "第A列数据无效;"; + } + } + + //校验紧固部位 + if (StringUtils.isEmpty(fasteningPosition)) { + errorNum++; + cellNum += "C;"; + errorInfo += "第C列数据必填;"; + } + + //校验规格 + if(StringUtils.isEmpty(specification)){ + errorNum ++; + cellNum += "D;"; + errorInfo += "第D列数据必填;"; + } + + String key = new StringJoiner(MesExtConstWords.AND).add(processCode).add(partNo).add(fasteningPosition).toString(); + + Boolean isExist = false; + + //校验唯一性 不重复 + if (!torqueManageByOnlyMap.containsKey(key)) { + torqueManageByOnlyMap.put(key, String.valueOf(rowNum)); + //根据零件号、工序代码、紧固部位查询替代料中是否存在数据 + + if (StringUtils.isEmpty(errorInfo) && !CollectionUtils.isEmpty(processTorqueManageMap) && processTorqueManageMap.containsKey(key)) { + errorNum++; + cellNum += "A+B+C;"; + errorInfo += "第A+B+C列数据已经存在数据库;"; + } + + //校验是否已经存在数据库 + if (!CollectionUtils.isEmpty(processTorqueManageMap) && processTorqueManageMap.containsKey(key)) isExist = true; + } else { + errorNum++; + cellNum += "A+B+C;"; + errorInfo += "第A+B+C列数据跟第" + torqueManageByOnlyMap.get(key) + + "行的第A+B+C列数据重复;"; + } + + //校验上限值 + if (!StringUtils.isEmpty(upLimit)) { + try { + Double.parseDouble(upLimit); + } catch (NumberFormatException e) { + errorNum++; + cellNum += "E;"; + errorInfo += "第E列数据无效;"; + } + String[] upLimitArr = upLimit.split(MesExtConstWords.DECIMAL_POINT); + if (null != upLimitArr && upLimitArr.length == 2 && upLimitArr[1].length() > 2) { + errorNum++; + cellNum += "E;"; + errorInfo += "第E列数据无效,最多2位小数;"; + } + + if (StringUtils.isEmpty(downLimit)) { + errorNum++; + cellNum += "E+F;"; + errorInfo += "第E列跟第F列数据不能只填写其中一个;"; + } + } + + //校验下限值 + if (!StringUtils.isEmpty(downLimit)) { + try { + Double.parseDouble(downLimit); + } catch (NumberFormatException e) { + errorNum++; + cellNum += "F;"; + errorInfo += "第F列数据无效;"; + } + String[] downLimitArr = downLimit.split(MesExtConstWords.DECIMAL_POINT); + if (null != downLimitArr && downLimitArr.length == 2 && downLimitArr[1].length() > 2) { + errorNum++; + cellNum += "F;"; + errorInfo += "第F列数据无效,最多2位小数;"; + } + if (StringUtils.isEmpty(upLimit)) { + errorNum++; + cellNum += "E+F;"; + errorInfo += "第E列跟第F列数据不能只填写其中一个;"; + } + } + + if (StringUtils.isEmpty(errorInfo) && !StringUtils.isEmpty(upLimit) && !StringUtils.isEmpty(downLimit)) { + if (MathOperation.compareTo(Double.parseDouble(upLimit), Double.parseDouble(downLimit)) < 0) { + errorNum++; + cellNum += "E+F;"; + errorInfo += "第E列数据只能大于等于第F列数据;"; + } + } + + //没有错误的时候,封装MesProcessTorqueManage + if (errorNum == 0) { + MesProcessTorqueManage mesProcessTorqueManage; + if (isExist) { + mesProcessTorqueManage = processTorqueManageMap.get(key).get(0); + ConvertBean.serviceModelUpdate(mesProcessTorqueManage, userName); + + } else { + mesProcessTorqueManage = new MesProcessTorqueManage(); + ConvertBean.serviceModelInitialize(mesProcessTorqueManage, userName); + mesProcessTorqueManage.setPartNo(partNo); + mesProcessTorqueManage.setProcessCode(processCode); + } + + mesProcessTorqueManage.setProcessName(processName); + mesProcessTorqueManage.setFasteningPosition(fasteningPosition); + mesProcessTorqueManage.setSpecification(specification); + mesProcessTorqueManage.setOrganizeCode(organizeCode); + mesProcessTorqueManage.setUpLimit(upLimit); + mesProcessTorqueManage.setDownLimit(downLimit); + + processTorqueManageExtList.add(mesProcessTorqueManage); + + successRowNum++; + } else { + //封装错误行信息ExcelImportErrorExtModel + excelImportErrorExtModels = commonExtService.getExcelImportErrorModels(excelImportErrorExtModels, rowNum, errorNum, cellNum, errorInfo); + + errorRows += rowNum + ";"; + failRowNum++; + } + } + } + + //校验EXCEL数据 + commonExtService.checkExcelData(failRowNum, successRowNum, errorRows); + + //封装返回结果 + ExcelImportResultExtModel excelImportResultExtModel = commonExtService.getExcelImportResultModel(failRowNum, successRowNum, excelImportErrorExtModels, errorRows); + excelImportResultExtModel.setExcelList((failRowNum > 0) ? null : processTorqueManageExtList); + return excelImportResultExtModel; + } + + /** + * 扭矩管理导入-数据入库 + * + * @param excelImportResultExtModel + */ + private void insertExcelMesProcessTorqueManage(ExcelImportResultExtModel excelImportResultExtModel) { + //导入数据 + if (null != excelImportResultExtModel) { + List processTorqueManageList = excelImportResultExtModel.getExcelList(); + if (!CollectionUtils.isEmpty(processTorqueManageList)) mesProcessTorqueManageRDao.saveAll(processTorqueManageList); + } + } +} diff --git a/modules/i3plus-ext-mes-icloud/i3plus-ext-mes-icloud.iml b/modules/i3plus-ext-mes-icloud/i3plus-ext-mes-icloud.iml deleted file mode 100644 index 721009e..0000000 --- a/modules/i3plus-ext-mes-icloud/i3plus-ext-mes-icloud.iml +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pojo/i3plus-ext-mes-pojo.iml b/modules/i3plus-ext-mes-pojo/i3plus-ext-mes-pojo.iml deleted file mode 100644 index eec1465..0000000 --- a/modules/i3plus-ext-mes-pojo/i3plus-ext-mes-pojo.iml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManage.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManage.java new file mode 100644 index 0000000..8dc61fd --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManage.java @@ -0,0 +1,67 @@ +package cn.estsh.i3plus.ext.mes.pojo.bean; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Index; +import javax.persistence.Table; +import java.io.Serializable; + +/** + * @Description: + * @Author: xiangming.liao + * @Date: 2021/01/18 15:44 + * @Modify: + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@EqualsAndHashCode(callSuper = true) +@Table(name = "MES_PROCESS_TORQUE_MANAGE", indexes = { + @Index(columnList = "PART_NO"), + @Index(columnList = "PROCESS_CODE"), + @Index(columnList = "PART_NO, PROCESS_CODE") + +}) +@Api("MES_工序扭矩管理") +public class MesProcessTorqueManage extends BaseBean implements Serializable { + + private static final long serialVersionUID = -5545553227344055268L; + + @Column(name="PART_NO") + @ApiParam("零件编号") + private String partNo; + + @Column(name = "PROCESS_CODE") + @ApiParam(value = "工序编号") + public String processCode; + + @Column(name="PROCESS_NAME") + @ApiParam(value ="工序名称") + private String processName; + + @Column(name = "FASTENING_POSITION") + @ApiParam("紧固部位") + private String fasteningPosition; + + @Column(name = "SPECIFICATION") + @ApiParam("规格") + private String specification; + + @Column(name = "UP_LIMIT") + @ApiParam("上限值") + private String upLimit; + + @Column(name = "DOWN_LIMIT") + @ApiParam("下限值") + private String downLimit; + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManageTaskDetail.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManageTaskDetail.java new file mode 100644 index 0000000..2fae926 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesProcessTorqueManageTaskDetail.java @@ -0,0 +1,207 @@ +package cn.estsh.i3plus.ext.mes.pojo.bean; + +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: + * @Author: xiangming.liao + * @Date: 2021/01/18 15:44 + * @Modify: + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@EqualsAndHashCode(callSuper = true) +@Table(name = "MES_PROCESS_TORQUE_MANAGE_TASK_DETAIL", indexes = { + @Index(columnList = "ORDER_JOB_NO") +}) +@Api("MES_工序扭矩管理任务明细") +public class MesProcessTorqueManageTaskDetail extends BaseBean implements Serializable { + + private static final long serialVersionUID = -5545553227344055268L; + + @Column(name="ORDER_JOB_NO") + @ApiParam("作业单据号") + private String orderJobNo; + + @Column(name="WORK_ORDER_NO") + @ApiParam("工单号") + private String workOrderNo; + + @Column(name="WORK_CENTER_CODE") + @ApiParam("产线代码") + private String workCenterCode; + + @Column(name="WORK_CELL_CODE") + @ApiParam("工位代码") + private String workCellCode; + + @Column(name="WORK_CELL_NAME") + @ApiParam("工位名称") + private String workCellName; + + @Column(name="SHIFT_CODE") + @ApiParam("班次代码") + private String shiftCode; + + @Column(name="SHIFT_NAME") + @ApiParam("班次名称") + private String shiftName; + + @Column(name="PART_NO") + @ApiParam("零件编号") + private String partNo; + + @Column(name = "PROCESS_CODE") + @ApiParam(value = "工序编号") + public String processCode; + + @Column(name="PROCESS_NAME") + @ApiParam(value ="工序名称") + private String processName; + + @Column(name = "FASTENING_POSITION") + @ApiParam("紧固部位") + private String fasteningPosition; + + @Column(name = "SPECIFICATION") + @ApiParam("规格") + private String specification; + + @Column(name = "UP_LIMIT") + @ApiParam("上限值") + private String upLimit; + + @Column(name = "DOWN_LIMIT") + @ApiParam("下限值") + private String downLimit; + + @Column(name = "SCREWDRIVER_NO") + @ApiParam("螺丝刀NO") + private String screwdriverNo; + + @Column(name = "TORQUE_VALUE1") + @ApiParam("扭矩值1") + private String torqueValue1; + + @Column(name = "TORQUE_VALUE2") + @ApiParam("扭矩值2") + private String torqueValue2; + + @Column(name = "TORQUE_VALUE3") + @ApiParam("扭矩值3") + private String torqueValue3; + + @Column(name = "TORQUE_VALUE4") + @ApiParam("扭矩值4") + private String torqueValue4; + + @Column(name = "TORQUE_VALUE5") + @ApiParam("扭矩值5") + private String torqueValue5; + + @Column(name = "ROTATION_NO_ABNORMAL") + @ApiParam("回转时是否有异常声、振动和发热") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CHECK_RESULT.class, refForeignKey = "value", value = "description") + private Integer rotationNoAbnormal; + + @Column(name = "FASTENING_NO_ABNORMAL") + @ApiParam("紧固后状态确认:浮起、歪斜等") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CHECK_RESULT.class, refForeignKey = "value", value = "description") + private Integer fasteningNoAbnormal; + + @Column(name = "FASTENING_IS_STC") + @ApiParam("紧固后是否有圆滑感") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CHECK_RESULT.class, refForeignKey = "value", value = "description") + private Integer fasteningIsStc; + + @Column(name = "TOOL_HEAD_NO_WEAR") + @ApiParam("刀头是否无磨损") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CHECK_RESULT.class, refForeignKey = "value", value = "description") + private Integer toolHeadNoWear; + + @Column(name = "CHECK_RESULT") + @ApiParam("点检结果") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CHECK_RESULT.class, refForeignKey = "value", value = "description") + private Integer checkResult; + + @Column(name = "CHECK_USER") + @ApiParam("点检人员") + private String checkUser; + + @Column(name = "CHECK_TIME") + @ApiParam("点检时间") + private String checkTime; + + @Column(name = "IS_TEAM_CONFIRM") + @ApiParam("是否班组确认") + @AnnoOutputColumn(refClass = MesExtEnumUtil.CONFIRM_TYPE.class, refForeignKey = "value", value = "description") + private Integer isTeamConfirm = 20; + + @Column(name = "TEAM_CONFIRM_USER") + @ApiParam("班组确认人") + private String teamConfirmUser; + + @Column(name = "TEAM_CONFIRM_TIME") + @ApiParam("班组确认时间") + private String teamConfirmTime; + + @Column(name = "TORQUE_SPEC_VALUE") + @ApiParam("扭矩规格值") + private String torqueSpecValue; + + @Transient + @ApiParam("扭矩规格值") + private String torqueSpecValueDesc; + + @Transient + @ApiParam("扭矩规格值") + private List torqueSpecValueList = new ArrayList<>(); + + @Column(name = "TORQUE_MANAGE_NO1") + @ApiParam("扭矩螺丝刀-扭矩管理NO1") + private String torqueManageNo1; + + @Transient + @ApiParam("扭矩螺丝刀-扭矩管理NO1") + private String torqueManageNo1Full; + + @Column(name = "TORQUE_MANAGE_NO2") + @ApiParam("扭矩螺丝刀-扭矩管理NO2") + private String torqueManageNo2; + + @Transient + @ApiParam("全称扭矩螺丝刀-扭矩管理NO2") + private String torqueManageNo2Full; + + @Column(name = "TORQUE_MANAGE_NO3") + @ApiParam("扭矩螺丝刀-扭矩管理NO3") + private String torqueManageNo3; + + @Transient + @ApiParam("全称扭矩螺丝刀-扭矩管理NO3") + private String torqueManageNo3Full; + + @Transient + @ApiParam("点检时间开始") + private String checkTimeStart; + + @Transient + @ApiParam("点检时间结束") + private String checkTimeEnd; + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesShiftProdCenterRecord.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesShiftProdCenterRecord.java index 37eff1e..a2142ac 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesShiftProdCenterRecord.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesShiftProdCenterRecord.java @@ -109,11 +109,6 @@ public class MesShiftProdCenterRecord extends BaseBean implements Serializable { @ApiParam("单号") private String orderNo; - @Column(name="AT_HOME_NUM", columnDefinition = "decimal(18,8)") - @ApiParam(value = "在籍人数") - @ColumnDefault("0") - public Double atHomeNum; - @Column(name = "CATEGORY_CODE") @ApiParam(value = "产品类别代码") public String categoryCode; @@ -122,4 +117,61 @@ public class MesShiftProdCenterRecord extends BaseBean implements Serializable { @ApiParam("事业别") private String careerCode; + @Column(name = "WORK_START_TIME") + @ApiParam("作业开始时间") + private String workStartTime; + + @Column(name = "WORK_END_TIME") + @ApiParam("作业结束时间") + private String workEndTime; + + @Column(name = "PART_CUT_COUNT") + @ApiParam("机种切换次数") + private Integer partCutCount; + + @Column(name="AT_HOME_NUM") + @ApiParam(value = "在籍人数") + @ColumnDefault("0") + public Integer atHomeNum; + + @Column(name="ABSENTEEISM_NUM") + @ApiParam(value = "缺勤人数") + @ColumnDefault("0") + public Integer absenteeismNum; + + @Column(name="OVERTIME_NUM") + @ApiParam(value = "加班人数") + @ColumnDefault("0") + public Integer overtimeNum; + + @Column(name="NEW_WORK_NUM") + @ApiParam(value = "新上班人数") + @ColumnDefault("0") + public Integer newWorkNum; + + @Column(name="QUIT_WORK_NUM") + @ApiParam(value = "退职人数") + @ColumnDefault("0") + public Integer quitWorkNum; + + @Column(name = "MAIN_REASON") + @ApiParam("主要原因") + private String mainReason; + + @Column(name = "OWNER_DEPARTMENT") + @ApiParam(value = "责任部门") + private String ownerDepartment; + + @Column(name = "COUNTERMEASURE") + @ApiParam("对策") + private String countermeasure; + + @Column(name = "IMPL_DATE") + @ApiParam("实施日") + private String implDate; + + @Column(name = "DECISION_MAKER") + @ApiParam("决策者") + private String decisionMaker; + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/UnWorkTimeDetailModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/UnWorkTimeDetailModel.java index ca751dc..cf0cebc 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/UnWorkTimeDetailModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/UnWorkTimeDetailModel.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pojo.model; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; +import org.hibernate.annotations.ColumnDefault; import java.io.Serializable; @@ -83,4 +84,42 @@ public class UnWorkTimeDetailModel implements Serializable { @ApiParam("损失工时") private Double lossHour; + @ApiParam("机种切换次数") + private Integer partCutCount; + + @ApiParam(value = "在籍人数") + @ColumnDefault("0") + public Integer atHomeNum; + + @ApiParam(value = "缺勤人数") + @ColumnDefault("0") + public Integer absenteeismNum; + + @ApiParam(value = "加班人数") + @ColumnDefault("0") + public Integer overtimeNum; + + @ApiParam(value = "新上班人数") + @ColumnDefault("0") + public Integer newWorkNum; + + @ApiParam(value = "退职人数") + @ColumnDefault("0") + public Integer quitWorkNum; + + @ApiParam("主要原因") + private String mainReason; + + @ApiParam(value = "责任部门") + private String ownerDepartment; + + @ApiParam("对策") + private String countermeasure; + + @ApiParam("实施日") + private String implDate; + + @ApiParam("决策者") + private String decisionMaker; + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/bu/BuWorkTimeDetailModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/bu/BuWorkTimeDetailModel.java index d989e67..318b4e7 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/bu/BuWorkTimeDetailModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/bu/BuWorkTimeDetailModel.java @@ -5,7 +5,9 @@ import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; +import org.hibernate.annotations.ColumnDefault; +import javax.persistence.Column; import java.io.Serializable; /** @@ -126,4 +128,42 @@ public class BuWorkTimeDetailModel implements Serializable { @ApiParam("事业别") private String careerName; + @ApiParam("机种切换次数") + private Integer partCutCount; + + @ApiParam(value = "在籍人数") + @ColumnDefault("0") + public Integer atHomeNum; + + @ApiParam(value = "缺勤人数") + @ColumnDefault("0") + public Integer absenteeismNum; + + @ApiParam(value = "加班人数") + @ColumnDefault("0") + public Integer overtimeNum; + + @ApiParam(value = "新上班人数") + @ColumnDefault("0") + public Integer newWorkNum; + + @ApiParam(value = "退职人数") + @ColumnDefault("0") + public Integer quitWorkNum; + + @ApiParam("主要原因") + private String mainReason; + + @ApiParam(value = "责任部门") + private String ownerDepartment; + + @ApiParam("对策") + private String countermeasure; + + @ApiParam("实施日") + private String implDate; + + @ApiParam("决策者") + private String decisionMaker; + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageRepository.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageRepository.java new file mode 100644 index 0000000..030d9d3 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageRepository.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.pojo.repository; + +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManage; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import org.springframework.stereotype.Repository; + +/** + * @author yxw + * @desc 扭矩管理 + * @version 1.0 + * @date 2023/10/09 9:17 + **/ +@Repository +public interface MesProcessTorqueManageRepository extends BaseRepository { + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageTaskDetailRepository.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageTaskDetailRepository.java new file mode 100644 index 0000000..2f968f5 --- /dev/null +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/repository/MesProcessTorqueManageTaskDetailRepository.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.pojo.repository; + +import cn.estsh.i3plus.ext.mes.pojo.bean.MesProcessTorqueManageTaskDetail; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import org.springframework.stereotype.Repository; + +/** + * @author yxw + * @desc 扭矩管理 + * @version 1.0 + * @date 2023/10/09 9:17 + **/ +@Repository +public interface MesProcessTorqueManageTaskDetailRepository extends BaseRepository { + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/sqlpack/MesExtHqlPack.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/sqlpack/MesExtHqlPack.java index c8dc4d7..e335fb9 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/sqlpack/MesExtHqlPack.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/sqlpack/MesExtHqlPack.java @@ -546,7 +546,12 @@ public class MesExtHqlPack { DdlPackBean packBean = getAllValidData(model.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(model.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getStringEqualPack(model.getShiftCode(), MesExtConstWords.SHIFT_CODE, packBean); - DdlPreparedPack.getNumEqualPack(model.getProdType(), MesExtConstWords.PROD_TYPE, packBean); + if (model.getProdType() == null || model.getProdType() == 0) { + DdlPreparedPack.getNumNOEqualPack(MesExtEnumUtil.SHIFT_PROD_TYPE.START_OR_END_SHIFT_TIME.getValue(), MesExtConstWords.PROD_TYPE, packBean); + } else { + DdlPreparedPack.getNumEqualPack(model.getProdType(), MesExtConstWords.PROD_TYPE, packBean); + } + DdlPreparedPack.getStringEqualPack(model.getProdCode(), MesExtConstWords.PROD_CODE, packBean); if (!StringUtils.isEmpty(model.getWorkTimeStart()) || !StringUtils.isEmpty(model.getWorkTimeEnd())) { DdlPreparedPack.timeBuilder(model.getWorkTimeStart(), model.getWorkTimeEnd(), MesExtConstWords.WORK_TIME, packBean, false); @@ -776,4 +781,27 @@ public class MesExtHqlPack { return packBean; } + public static DdlPackBean getMesProcessTorqueManage(MesProcessTorqueManage torqueManage) { + DdlPackBean packBean = getAllBaseData(torqueManage.getOrganizeCode()); + DdlPreparedPack.getStringLikerPack(torqueManage.getPartNo(), MesExtConstWords.PART_NO, packBean); + DdlPreparedPack.getStringLikerPack(torqueManage.getProcessCode(), MesExtConstWords.PROCESS_CODE, packBean); + DdlPreparedPack.getStringLikerPack(torqueManage.getFasteningPosition(), MesExtConstWords.FASTENING_POSITION, packBean); + DdlPreparedPack.getNumEqualPack(torqueManage.getIsValid(), MesExtConstWords.IS_VALID, packBean); + return packBean; + } + + public static DdlPackBean getMesProcessTorqueManageTaskDetail(MesProcessTorqueManageTaskDetail torqueManageTaskDetail) { + DdlPackBean packBean = getAllBaseData(torqueManageTaskDetail.getOrganizeCode()); + DdlPreparedPack.getStringLikerPack(torqueManageTaskDetail.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean); + DdlPreparedPack.getStringLikerPack(torqueManageTaskDetail.getProcessCode(), MesExtConstWords.PROCESS_CODE, packBean); + DdlPreparedPack.getStringLikerPack(torqueManageTaskDetail.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(torqueManageTaskDetail.getShiftCode(), MesExtConstWords.SHIFT_CODE, packBean); + DdlPreparedPack.getNumEqualPack(torqueManageTaskDetail.getCheckResult(), MesExtConstWords.CHECK_RESULT, packBean); + if (!StringUtils.isEmpty(torqueManageTaskDetail.getCheckTimeStart()) || !StringUtils.isEmpty(torqueManageTaskDetail.getCheckTimeEnd())) { + DdlPreparedPack.timeBuilder(torqueManageTaskDetail.getCheckTimeStart(), torqueManageTaskDetail.getCheckTimeEnd(), MesExtConstWords.CHECK_TIME, packBean, true); + } + DdlPreparedPack.getNumEqualPack(torqueManageTaskDetail.getIsTeamConfirm(), MesExtConstWords.IS_TEAM_CONFIRM, packBean); + return packBean; + } + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 00d1fbe..7cdd8d4 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -14,6 +14,8 @@ public class MesExtConstWords { public static final String CK = "CK"; //松下EP public static final String CJ = "CJ"; + //嘉兴松下 + public static final String JX = "JX"; //JOB public static final String JOB = "JOB"; //MES_REDIS @@ -792,4 +794,10 @@ public class MesExtConstWords { //数据维度 public static final String DATA_DIMENSION = "dataDimension"; + //紧固部位 + public static final String FASTENING_POSITION = "fasteningPosition"; + + //规格 + public static final String SPECIFICATION = "specification"; + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java index 927b8f8..15fc48b 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java @@ -79,7 +79,8 @@ public class MesExtEnumUtil { MES_CAREER_CORRELATION_CFG(870, "sxCareerCorrelationCfgExcelService", "事业别相关配置"), MES_OFFICIAL_LOSS_DETAIL_RECORD(880, "sxOfficialLossDetailRecordExcelService", "仕损明细记录"), MES_WORK_BIND_UNBIND_SN(890, "sxWorkOrderBindUnbindSnExcelService", "条码绑定导入"), - MES_CAREER_CATEGORY_WORK_CENTER_CORRELATION_CFG(900, "sxCareerAndCategoryAndWorkCenterCfgExcelService", "综合能率目标导入"); + MES_CAREER_CATEGORY_WORK_CENTER_CORRELATION_CFG(900, "sxCareerAndCategoryAndWorkCenterCfgExcelService", "综合能率目标导入"), + MES_PROCESS_TORQUE_MANAGE(910, "torqueManageExcelService", "扭矩管理项目导入"); private int value; private String service; @@ -801,7 +802,7 @@ public class MesExtEnumUtil { PART_CHECK(10, "物料点检"), PERSON_CHECK(20, "上岗证点检"), - //Q_MANAGE(30, "Q管理"), + TORQUE_MANAGE(30, "扭矩管理点检"), EQU_CHECK(40, "设备点检"), ESD_CHECK(50, "防静电点检"), WORK_ORDER_FIRST(60, "Q管理"), @@ -813,6 +814,7 @@ public class MesExtEnumUtil { PROJECT_TOUR_CONTRIM(120, "工程巡回确认"), WEIGHING_MANAGEMENT_TABLE(130, "称重管理表"); + private int value; private String description; @@ -1064,7 +1066,8 @@ public class MesExtEnumUtil { NORMAL_STOP_CENTER(10, "常规停机"), UNNORMAL_STOP_CENTER(20, "非常规停机"), NORMAL_PROD(30, "常规生产"), - UNNORMAL_PROD(40, "非常规生产"); + UNNORMAL_PROD(40, "非常规生产"), + START_OR_END_SHIFT_TIME(50, "开始/结束班次时间"); private int value; private String description; @@ -3424,7 +3427,11 @@ public class MesExtEnumUtil { public enum CT_TYPE { TRAY(10, "托盘"), - CARD(20, "卡片"); + TOOLING_PLATE(20, "工装板"), + PASS_BOX(30, "工装板"), + TROLLEY(40, "台车"), + IRON_FRAME(50, "铁框"), + MANAGE_CODE(60, "管理码"); private Integer value; private String description; @@ -4579,4 +4586,50 @@ public class MesExtEnumUtil { } } + /** + * 扭矩规格值 + */ + public static enum TORQUE_SPEC_VALUE { + ZERO_TO_TWENTY("10", "0~20 kgf cm"), + TWENTY_TO_FORTY("20", "20~40 kgf cm"), + FORTY_TO_SIXTY_NINE("30", "40~69 kgf cm") + ; + + private String value; + private String description; + + TORQUE_SPEC_VALUE(String value, String description) { + this.value = value; + this.description = description; + } + + public String getValue() { + return value; + } + + public String getDescription() { + return description; + } + + public static String valueOfDescription(String val) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value.equals(val)) { + tmp = values()[i].description; + } + } + return tmp; + } + + public static String descriptionOfValue(String description) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].description.equals(description)) { + tmp = values()[i].value; + } + } + return tmp; + } + } + }