From 9cad2e1fce88e3f56baddc41840cd2c0d93069e7 Mon Sep 17 00:00:00 2001 From: chenshuichuan <1154693969@qq.com> Date: Tue, 2 Jul 2024 19:49:18 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E7=94=9F=E4=BA=A7=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FeedingRecordController.java | 33 +++++--- .../admin/orgworker/OrgWorkerController.java | 7 +- .../controller/admin/plan/PlanController.java | 2 +- .../ProduceReportDetailController.java | 5 +- .../ReportPlanViewController.java | 75 +----------------- .../module/mes/dal/mysql/plan/PlanMapper.java | 6 +- .../workreportplan/ReportPlanViewMapper.java | 27 ++++++- .../feedingrecord/FeedingRecordService.java | 4 + .../FeedingRecordServiceImpl.java | 49 +++++++++++- .../module/mes/service/plan/PlanService.java | 4 +- .../mes/service/plan/PlanServiceImpl.java | 8 +- .../ProduceReportDetailService.java | 2 + .../ProduceReportDetailServiceImpl.java | 78 ++++++++++++++++++- .../workreportplan/WorkReportPlanService.java | 11 ++- .../WorkReportPlanServiceImpl.java | 10 ++- 15 files changed, 215 insertions(+), 106 deletions(-) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java index 08f4cb0cbc..59ccd071e8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/feedingrecord/FeedingRecordController.java @@ -17,6 +17,7 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDet import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.itemrequisition.ItemRequisitionMapper; import cn.iocoder.yudao.module.mes.service.feedingrecord.FeedingRecordService; import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemRequisitionService; import cn.iocoder.yudao.module.mes.service.plan.PlanService; @@ -122,6 +123,8 @@ public class FeedingRecordController { private ItemRequisitionService itemRequisitionService; @Resource private PlanService planService; + @Resource + private ItemRequisitionMapper itemRequisitionMapper; @PutMapping("/update-status") @Operation(summary = "提交状态") @@ -153,17 +156,24 @@ public class FeedingRecordController { planItemMap.put(key, respVO); } } - Map recordPlanDOMap = feedingRecordService.updateStatus(recordDO, detailDOList, status, user.getId(), planDOList, - planItemListMap, planItemMap); - //更新计划对应的领料单投料时间 - Map map = new HashMap<>(); - for (String key : recordPlanDOMap.keySet()) { - FeedingRecordPlanDO item = recordPlanDOMap.get(key); - if (!map.containsKey(item.getPlanId())) { - ItemRequisitionDO itemRequisitionDO = itemRequisitionService.getItemRequisitionByPlanId(item.getPlanId()); - if (itemRequisitionDO != null && itemRequisitionDO.getDeliveryDate() == null) { - itemRequisitionDO.setDeliveryDate(LocalDate.now()); - map.put(item.getPlanId(), item.getPlanId()); + //当只有一个计划在开工时,投料直接分配给该计划 + if(planDOList.size()==1){ + feedingRecordService.dealWithOnPlan( planDOList.get(0), detailDOList, planItemMap, user,recordDO); + } + else{ + Map recordPlanDOMap = feedingRecordService.updateStatus(recordDO, detailDOList, status, user.getId(), planDOList, + planItemListMap, planItemMap); + //更新计划对应的领料单投料时间 + Map map = new HashMap<>(); + for (String key : recordPlanDOMap.keySet()) { + FeedingRecordPlanDO item = recordPlanDOMap.get(key); + if (!map.containsKey(item.getPlanId())) { + ItemRequisitionDO itemRequisitionDO = itemRequisitionService.getItemRequisitionByPlanId(item.getPlanId()); + if (itemRequisitionDO != null && itemRequisitionDO.getDeliveryDate() == null &&!map.containsKey(item.getPlanId())) { + itemRequisitionDO.setDeliveryDate(LocalDate.now()); + itemRequisitionMapper.updateById(itemRequisitionDO); + map.put(item.getPlanId(), item.getPlanId()); + } } } } @@ -175,6 +185,7 @@ public class FeedingRecordController { } else return CommonResult.error(500, "无法获取操作用户!请检查!"); } + private String getMapKey(Long planId, Long itemId) { return planId + "-" + itemId; } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/orgworker/OrgWorkerController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/orgworker/OrgWorkerController.java index 3f637ae22a..6559ea540e 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/orgworker/OrgWorkerController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/orgworker/OrgWorkerController.java @@ -161,7 +161,12 @@ public class OrgWorkerController { /**代替报工,用户列表**/ @GetMapping("/getOtherPersonalUser") @Operation(summary = "获得用户列表") - public CommonResult> getOtherPersonalUser() { + public CommonResult> getOtherPersonalUser(@Valid ProduceReportDetailSaveReqVO reqVO) { + OrgWorkerPageReqVO pageReqVO = new OrgWorkerPageReqVO().setOrgType(reqVO.getOrgType()).setGroupType(reqVO.getGroupType()); + LocalDateTime[] localDateTimes = {reqVO.getReportDate(),reqVO.getReportDate()}; + pageReqVO.setWorkDate(localDateTimes); + pageReqVO.setWorkerId(reqVO.getUserId()); + Long userId = getLoginUserId(); List detailDOList = workTeamService.getUserWorkTeamDetail(userId, WorkTeamUserRoleEnum.组长.getValue()); //组长的话把这些组的工人列表都查上,其他人所有人都查 diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java index 9f78c0a87e..b351d7b29b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java @@ -148,7 +148,7 @@ public class PlanController { public CommonResult> getPlan() { List status = new ArrayList<>(); status.add(PlanStatusEnum.开工.getValue()); - status.add(PlanStatusEnum.完工.getValue()); + //status.add(PlanStatusEnum.完工.getValue()); List proList = planService.getProductByPlanStatus(status); return success(proList); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java index b66eb531d2..460cf4b02a 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereport/ProduceReportDetailController.java @@ -98,10 +98,7 @@ public class ProduceReportDetailController { @Operation(summary = "提交报工单") public CommonResult updateStatus(@RequestParam("id") Long id, @RequestParam("status") Integer status) { - ProduceReportDetailDO produceReportDetail = produceReportDetailService.getProduceReportDetail(id); - produceReportDetail.setReportStatus(status); - ProduceReportDetailSaveReqVO saveReqVO = BeanUtils.toBean(produceReportDetail, ProduceReportDetailSaveReqVO.class); - produceReportDetailService.updateProduceReportDetail(saveReqVO); + produceReportDetailService.updateStatus(id,status); return success(true); } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java index a492c8fa73..7d865d7abb 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/producereportplan/ReportPlanViewController.java @@ -1,31 +1,12 @@ package cn.iocoder.yudao.module.mes.controller.admin.producereportplan; -import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanRespVO; -import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; -import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; import cn.iocoder.yudao.module.mes.service.workreportplan.WorkReportPlanService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import java.io.IOException; -import java.util.List; - -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 报工分配计划") @RestController @@ -36,58 +17,6 @@ public class ReportPlanViewController { @Resource private WorkReportPlanService workReportPlanService; - @PostMapping("/create") - @Operation(summary = "创建报工分配计划") - @PreAuthorize("@ss.hasPermission('mes:work-report-plan:create')") - public CommonResult createWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO createReqVO) { - return success(workReportPlanService.createWorkReportPlan(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新报工分配计划") - @PreAuthorize("@ss.hasPermission('mes:work-report-plan:update')") - public CommonResult updateWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO updateReqVO) { - workReportPlanService.updateWorkReportPlan(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除报工分配计划") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('mes:work-report-plan:delete')") - public CommonResult deleteWorkReportPlan(@RequestParam("id") Long id) { - workReportPlanService.deleteWorkReportPlan(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得报工分配计划") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')") - public CommonResult getWorkReportPlan(@RequestParam("id") Long id) { - WorkReportPlanDO workReportPlan = workReportPlanService.getWorkReportPlan(id); - return success(BeanUtils.toBean(workReportPlan, WorkReportPlanRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得报工分配计划分页") - @PreAuthorize("@ss.hasPermission('mes:work-report-plan:query')") - public CommonResult> getWorkReportPlanPage(@Valid WorkReportPlanPageReqVO pageReqVO) { - PageResult pageResult = workReportPlanService.getWorkReportPlanPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, WorkReportPlanRespVO.class)); - } - @GetMapping("/export-excel") - @Operation(summary = "导出报工分配计划 Excel") - @PreAuthorize("@ss.hasPermission('mes:work-report-plan:export')") - @ApiAccessLog(operateType = EXPORT) - public void exportWorkReportPlanExcel(@Valid WorkReportPlanPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = workReportPlanService.getWorkReportPlanPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "报工分配计划.xls", "数据", WorkReportPlanRespVO.class, - BeanUtils.toBean(list, WorkReportPlanRespVO.class)); - } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java index 80d66c8105..81742d3717 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java @@ -80,9 +80,11 @@ public interface PlanMapper extends BaseMapperX { .last("limit 1")); } - default List selectBy(List statusList) { + default List selectBy(Long productId,List statusList) { return selectList(new LambdaQueryWrapperX() - .inIfPresent(PlanDO::getStatus, statusList)); + .eqIfPresent(PlanDO::getProductId, productId) + .inIfPresent(PlanDO::getStatus, statusList) + .orderByDesc(PlanDO::getStartTime)); } //根据产线和状态查询生产计划,按照实际开工时间升序排序,即更早开工的在前面 diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/ReportPlanViewMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/ReportPlanViewMapper.java index 8638e87f86..6b20719b2b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/ReportPlanViewMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/workreportplan/ReportPlanViewMapper.java @@ -1,12 +1,19 @@ package cn.iocoder.yudao.module.mes.dal.mysql.workreportplan; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.ReportPlanViewReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.ReportPlanViewDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Mapper; +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + /** * 报工分配计划 Mapper * @@ -15,7 +22,7 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ReportPlanViewMapper extends BaseMapperX { - default PageResult selectPage(WorkReportPlanPageReqVO reqVO) { + default PageResult selectPage(ReportPlanViewReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ReportPlanViewDO::getReportId, reqVO.getReportId()) .eqIfPresent(ReportPlanViewDO::getPlanId, reqVO.getPlanId()) @@ -23,9 +30,25 @@ public interface ReportPlanViewMapper extends BaseMapperX { .eqIfPresent(ReportPlanViewDO::getQualityNumberPlan, reqVO.getQualityNumberPlan()) .eqIfPresent(ReportPlanViewDO::getWasteNumberPlan, reqVO.getWasteNumberPlan()) .eqIfPresent(ReportPlanViewDO::getReportTimePlan, reqVO.getReportTimePlan()) + .eqIfPresent(ReportPlanViewDO::getOrgType, reqVO.getOrgType()) .eqIfPresent(ReportPlanViewDO::getTotalTimePlan, reqVO.getTotalTimePlan()) .betweenIfPresent(ReportPlanViewDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(ReportPlanViewDO::getId)); } + //查询计划某工序已经报工的总数 + default BigDecimal selectSumBy(Long planId, String orgType) { + + // SQL sum 查询 + List> result = selectMaps(new QueryWrapper() + .select("SUM(quality_number_plan) AS sumCount") + .eq("plan_id", planId) + .eq("org_type", orgType)); + // 获得数量 + if (CollUtil.isEmpty(result)) { + return BigDecimal.ZERO; + } + return BigDecimal.valueOf(MapUtil.getDouble(result.get(0), "sumCount", 0D)); + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java index 7de58aefb4..20cd2784b2 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.mes.service.feedingrecord; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.FeedingRecordDetailRespVO; import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.FeedingRecordPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.FeedingRecordSaveReqVO; @@ -89,4 +90,7 @@ public interface FeedingRecordService { //提交干废品和湿废品投料记录,分配给计划 void dealOtherRecord(FeedingRecordDO recordDO, String status, Long userId, List planDOList); + + void dealWithOnPlan(PlanDO plan, List detailDOList, Map planItemMap, + LoginUser user,FeedingRecordDO recordDO); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java index 9961e1cd25..628f0b1d30 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/feedingrecord/FeedingRecordServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.erp.framework.bean.ProductUnitEnum; @@ -15,13 +16,16 @@ import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.StockWorkSh import cn.iocoder.yudao.module.mes.dal.dataobject.feedingplan.FeedingRecordPlanDO; import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO; import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDetailDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO; import cn.iocoder.yudao.module.mes.dal.mysql.feedingplan.FeedingRecordPlanMapper; import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordDetailMapper; import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.itemrequisition.ItemRequisitionMapper; import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO; import cn.iocoder.yudao.module.mes.service.feedingplan.FeedingRecordPlanService; +import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemRequisitionService; import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; @@ -33,6 +37,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; +import java.time.LocalDate; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -66,7 +71,10 @@ public class FeedingRecordServiceImpl implements FeedingRecordService { private FeedingRecordPlanMapper recordPlanMapper; @Resource private StockWorkshopService workshopService; - + @Resource + private ItemRequisitionService itemRequisitionService; + @Resource + private ItemRequisitionMapper itemRequisitionMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -307,6 +315,10 @@ public class FeedingRecordServiceImpl implements FeedingRecordService { for (Long itemId : detailDOMap.keySet()) { //原料有未分配数量 if (detailDOMap.get(itemId).getWeight().compareTo(BigDecimal.ZERO) <= 0) continue; + if(!totalPlanNeedItem.containsKey(itemId)){ + System.out.println("~~~~~~~计算出错!~~~~~~"); + continue; + } BigDecimal factor = detailDOMap.get(itemId).getWeight().divide(totalPlanNeedItem.get(itemId), mc); for (PlanDO plan : planDOList) { ItemRequisitionDetailRespVO detailRespVO = planItemMap.get(getMapKey(plan.getId(), itemId)); @@ -382,4 +394,39 @@ public class FeedingRecordServiceImpl implements FeedingRecordService { recordDO.getId(), recordDO.getFeedingRecordCode()); return; } + + + + @Override + @Transactional(rollbackFor = Exception.class) + public void dealWithOnPlan(PlanDO plan, List detailDOList, + Map planItemMap, LoginUser user,FeedingRecordDO recordDO){ + + for (FeedingRecordDetailDO detail : detailDOList) { + //车间仓投料出库 + StockWorkshopDO workshopDO = new StockWorkshopDO() + .setItemId(detail.getItemId()).setUnitId(detail.getUnitId()) + .setCount(detail.getWeight().multiply(BigDecimal.valueOf(-1))) + .setCategoryId(1L); + workshopService.updateStock(workshopDO, StockWorkShopTypeEnum.投料出库.getValue(), + recordDO.getId(), recordDO.getFeedingRecordCode()); + + //分配给计划 + FeedingRecordPlanDO recordPlanDO = new FeedingRecordPlanDO() + .setPlanId(plan.getId()) + .setItemId(plan.getProductId()) + .setRecordId(detail.getRecordId()).setUserId(user.getId()).setUnitId(detail.getUnitId()) + .setRecordDetailId(detail.getId()).setFeedingTime(detail.getFeedingTime()) + .setWeight(detail.getWeight()); + + recordPlanMapper.insert(recordPlanDO); + } + //更新对应投料单投料时间 + ItemRequisitionDO itemRequisitionDO = itemRequisitionService.getItemRequisitionByPlanId(plan.getId()); + if (itemRequisitionDO != null && itemRequisitionDO.getDeliveryDate()==null) { + itemRequisitionDO.setDeliveryDate(LocalDate.now()); + itemRequisitionMapper.updateById(itemRequisitionDO); + } + return; + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java index 7f408559a9..b6da89cd8a 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java @@ -82,11 +82,13 @@ public interface PlanService { } List getPlanByStatus(List statusList); - + List getPlanByStatusAndProduct(List statusList, Long productId); List getPlanByStatusAndPipeline(List statusList, String pipeline); void updateStatus( Long id,Integer status); /**获取当前某些状态的计划的产品列表**/ List getProductByPlanStatus(List statusList); + + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java index 0eacdf9a5d..9e4a9a3797 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java @@ -199,9 +199,13 @@ public class PlanServiceImpl implements PlanService { @Override public List getPlanByStatus(List statusList) { - return planMapper.selectBy(statusList); + return planMapper.selectBy(null,statusList); + } + @Override + public + List getPlanByStatusAndProduct(List statusList, Long productId){ + return planMapper.selectBy(productId,statusList); } - @Override public List getPlanByStatusAndPipeline(List statusList, String pipeline) { return planMapper.selectBy(statusList, pipeline); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java index 3bda1071c5..15f3abe820 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailService.java @@ -54,4 +54,6 @@ public interface ProduceReportDetailService { */ PageResult getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO); List buildVOList(List list); + + void updateStatus(Long id, Integer status); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java index f9cdea739f..8a899c5cfb 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/producereport/ProduceReportDetailServiceImpl.java @@ -6,26 +6,34 @@ import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; +import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanStatusEnum; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailRespVO; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ProduceReportDetailSaveReqVO; import cn.iocoder.yudao.module.mes.controller.admin.producereport.vo.ReportStatusEnum; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.organization.OrganizationDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.mes.dal.dataobject.producereport.ProduceReportDetailDO; import cn.iocoder.yudao.module.mes.dal.mysql.producereport.ProduceReportDetailMapper; import cn.iocoder.yudao.module.mes.service.organization.OrganizationService; +import cn.iocoder.yudao.module.mes.service.plan.PlanService; +import cn.iocoder.yudao.module.mes.service.workreportplan.WorkReportPlanService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PLAN_NOT_EXISTS; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRODUCE_REPORT_DETAIL_NOT_EXISTS; /** @@ -91,6 +99,10 @@ public class ProduceReportDetailServiceImpl implements ProduceReportDetailServic private ErpProductService productService; @Resource private ProduceReportService reportService; + @Resource + private PlanService planService; + @Resource + private WorkReportPlanService workReportPlanService; @Override public List buildVOList(List list){ @@ -116,4 +128,64 @@ public class ProduceReportDetailServiceImpl implements ProduceReportDetailServic pro -> item.setProductName(pro.getName())); }); } + + /**更改报工单状态***/ + + @Override + @Transactional + public void updateStatus(Long id, Integer status) { + ProduceReportDetailDO reportDetailDO = produceReportDetailMapper.selectById(id); + reportDetailDO.setReportStatus(status); + produceReportDetailMapper.updateById(reportDetailDO); + + if(status.equals(ReportStatusEnum.通过.getValue())){ + //分配给开工中的计划 + List statusList = new ArrayList<>(); + statusList.add(PlanStatusEnum.开工.getValue()); + List planList = planService.getPlanByStatusAndProduct(statusList,reportDetailDO.getProductId()); + if(planList!=null && planList.size()>0){ + //该种产品只有一个计划在开工 + if(planList.size()==1){ + WorkReportPlanSaveReqVO saveReqVO = new WorkReportPlanSaveReqVO() + .setReportId(id).setPlanId(planList.get(0).getId()) + .setProductId(reportDetailDO.getProductId()) + .setQualityNumberPlan(reportDetailDO.getQualityNumber()) + .setWasteNumberPlan(reportDetailDO.getWasteNumber()) + .setReportTimePlan(reportDetailDO.getReportTime()) + .setTotalTimePlan(reportDetailDO.getTotalTime()); + workReportPlanService.createWorkReportPlan(saveReqVO); + } + else{ + MathContext mc = new MathContext(0, RoundingMode.HALF_UP); + long totalNeed = 0; + Map planDOMap = new HashMap<>(); + for (PlanDO plan : planList) { + BigDecimal finishNumber = workReportPlanService.selectSumBy(plan.getId(),reportDetailDO.getOrgType()); + long planNeed = plan.getPlanNumber() > finishNumber.longValue() ? plan.getPlanNumber() - finishNumber.longValue(): 0; + totalNeed += planNeed; + planDOMap.put(plan.getId(), planNeed); + } + //根据计划各自的需求比例分配给计划 + for (Long planId : planDOMap.keySet()) { + Long planNeed = planDOMap.get(planId); + if(planNeed>0){ + BigDecimal planNumber = reportDetailDO.getQualityNumber().multiply(BigDecimal.valueOf(planNeed/totalNeed),mc); + BigDecimal wasteNumber = reportDetailDO.getWasteNumber().multiply(BigDecimal.valueOf(planNeed/totalNeed),mc); + BigDecimal totalTime = reportDetailDO.getTotalTime().multiply(BigDecimal.valueOf(planNeed/totalNeed),mc); + + WorkReportPlanSaveReqVO saveReqVO = new WorkReportPlanSaveReqVO() + .setReportId(id).setPlanId(planId) + .setProductId(reportDetailDO.getProductId()) + .setQualityNumberPlan(planNumber) + .setWasteNumberPlan(wasteNumber) + .setReportTimePlan(reportDetailDO.getReportTime()) + .setTotalTimePlan(totalTime); + workReportPlanService.createWorkReportPlan(saveReqVO); + } + } + } + } + else throw exception(PLAN_NOT_EXISTS); + } + } } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanService.java index 997771a414..23fac458c4 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanService.java @@ -1,9 +1,12 @@ package cn.iocoder.yudao.module.mes.service.workreportplan; -import javax.validation.*; -import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.*; -import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; + +import javax.validation.Valid; +import java.math.BigDecimal; /** * 报工分配计划 Service 接口 @@ -49,5 +52,5 @@ public interface WorkReportPlanService { * @return 报工分配计划分页 */ PageResult getWorkReportPlanPage(WorkReportPlanPageReqVO pageReqVO); - + BigDecimal selectSumBy(Long planId, String orgType); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImpl.java index 29d421a467..8ad1e22b3b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/workreportplan/WorkReportPlanServiceImpl.java @@ -5,12 +5,15 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.producereportplan.vo.WorkReportPlanSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.workreportplan.WorkReportPlanDO; +import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.ReportPlanViewMapper; import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.WorkReportPlanMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WORK_REPORT_PLAN_NOT_EXISTS; @@ -25,7 +28,8 @@ public class WorkReportPlanServiceImpl implements WorkReportPlanService { @Resource private WorkReportPlanMapper workReportPlanMapper; - + @Resource + private ReportPlanViewMapper reportPlanViewMapper; @Override public Long createWorkReportPlan(WorkReportPlanSaveReqVO createReqVO) { // 插入 @@ -68,4 +72,8 @@ public class WorkReportPlanServiceImpl implements WorkReportPlanService { return workReportPlanMapper.selectPage(pageReqVO); } + @Override + public BigDecimal selectSumBy(Long planId, String orgType){ + return reportPlanViewMapper.selectSumBy(planId, orgType); + } } \ No newline at end of file