fix 生产流程

plp
chenshuichuan 2 years ago
parent 32a17f4303
commit 9cad2e1fce

@ -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<String, FeedingRecordPlanDO> recordPlanDOMap = feedingRecordService.updateStatus(recordDO, detailDOList, status, user.getId(), planDOList,
planItemListMap, planItemMap);
//更新计划对应的领料单投料时间
Map<Long, Long> 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<String, FeedingRecordPlanDO> recordPlanDOMap = feedingRecordService.updateStatus(recordDO, detailDOList, status, user.getId(), planDOList,
planItemListMap, planItemMap);
//更新计划对应的领料单投料时间
Map<Long, Long> 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;
}

@ -161,7 +161,12 @@ public class OrgWorkerController {
/**代替报工,用户列表**/
@GetMapping("/getOtherPersonalUser")
@Operation(summary = "获得用户列表")
public CommonResult<List<AdminUserRespDTO>> getOtherPersonalUser() {
public CommonResult<List<AdminUserRespDTO>> 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<WorkTeamDetailDO> detailDOList = workTeamService.getUserWorkTeamDetail(userId, WorkTeamUserRoleEnum..getValue());
//组长的话把这些组的工人列表都查上,其他人所有人都查

@ -148,7 +148,7 @@ public class PlanController {
public CommonResult<List<ErpProductRespVO>> getPlan() {
List<Integer> status = new ArrayList<>();
status.add(PlanStatusEnum..getValue());
status.add(PlanStatusEnum..getValue());
//status.add(PlanStatusEnum.完工.getValue());
List<ErpProductRespVO> proList = planService.getProductByPlanStatus(status);
return success(proList);
}

@ -98,10 +98,7 @@ public class ProduceReportDetailController {
@Operation(summary = "提交报工单")
public CommonResult<Boolean> 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);
}
}

@ -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<Long> createWorkReportPlan(@Valid @RequestBody WorkReportPlanSaveReqVO createReqVO) {
return success(workReportPlanService.createWorkReportPlan(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新报工分配计划")
@PreAuthorize("@ss.hasPermission('mes:work-report-plan:update')")
public CommonResult<Boolean> 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<Boolean> 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<WorkReportPlanRespVO> 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<PageResult<WorkReportPlanRespVO>> getWorkReportPlanPage(@Valid WorkReportPlanPageReqVO pageReqVO) {
PageResult<WorkReportPlanDO> 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<WorkReportPlanDO> list = workReportPlanService.getWorkReportPlanPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "报工分配计划.xls", "数据", WorkReportPlanRespVO.class,
BeanUtils.toBean(list, WorkReportPlanRespVO.class));
}
}

@ -80,9 +80,11 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.last("limit 1"));
}
default List<PlanDO> selectBy(List<Integer> statusList) {
default List<PlanDO> selectBy(Long productId,List<Integer> statusList) {
return selectList(new LambdaQueryWrapperX<PlanDO>()
.inIfPresent(PlanDO::getStatus, statusList));
.eqIfPresent(PlanDO::getProductId, productId)
.inIfPresent(PlanDO::getStatus, statusList)
.orderByDesc(PlanDO::getStartTime));
}
//根据产线和状态查询生产计划,按照实际开工时间升序排序,即更早开工的在前面

@ -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<ReportPlanViewDO> {
default PageResult<ReportPlanViewDO> selectPage(WorkReportPlanPageReqVO reqVO) {
default PageResult<ReportPlanViewDO> selectPage(ReportPlanViewReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ReportPlanViewDO>()
.eqIfPresent(ReportPlanViewDO::getReportId, reqVO.getReportId())
.eqIfPresent(ReportPlanViewDO::getPlanId, reqVO.getPlanId())
@ -23,9 +30,25 @@ public interface ReportPlanViewMapper extends BaseMapperX<ReportPlanViewDO> {
.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<Map<String, Object>> result = selectMaps(new QueryWrapper<ReportPlanViewDO>()
.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));
}
}

@ -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<PlanDO> planDOList);
void dealWithOnPlan(PlanDO plan, List<FeedingRecordDetailDO> detailDOList, Map<String, ItemRequisitionDetailRespVO> planItemMap,
LoginUser user,FeedingRecordDO recordDO);
}

@ -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<FeedingRecordDetailDO> detailDOList,
Map<String, ItemRequisitionDetailRespVO> 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;
}
}

@ -82,11 +82,13 @@ public interface PlanService {
}
List<PlanDO> getPlanByStatus(List<Integer> statusList);
List<PlanDO> getPlanByStatusAndProduct(List<Integer> statusList, Long productId);
List<PlanDO> getPlanByStatusAndPipeline(List<Integer> statusList, String pipeline);
void updateStatus( Long id,Integer status);
/**获取当前某些状态的计划的产品列表**/
List<ErpProductRespVO> getProductByPlanStatus(List<Integer> statusList);
}

@ -199,9 +199,13 @@ public class PlanServiceImpl implements PlanService {
@Override
public List<PlanDO> getPlanByStatus(List<Integer> statusList) {
return planMapper.selectBy(statusList);
return planMapper.selectBy(null,statusList);
}
@Override
public
List<PlanDO> getPlanByStatusAndProduct(List<Integer> statusList, Long productId){
return planMapper.selectBy(productId,statusList);
}
@Override
public List<PlanDO> getPlanByStatusAndPipeline(List<Integer> statusList, String pipeline) {
return planMapper.selectBy(statusList, pipeline);

@ -54,4 +54,6 @@ public interface ProduceReportDetailService {
*/
PageResult<ProduceReportDetailRespVO> getProduceReportDetailPage(ProduceReportDetailPageReqVO pageReqVO);
List<ProduceReportDetailRespVO> buildVOList(List<ProduceReportDetailDO> list);
void updateStatus(Long id, Integer status);
}

@ -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<ProduceReportDetailRespVO> buildVOList(List<ProduceReportDetailDO> 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<Integer> statusList = new ArrayList<>();
statusList.add(PlanStatusEnum..getValue());
List<PlanDO> 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<Long, Long> 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);
}
}
}

@ -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<WorkReportPlanDO> getWorkReportPlanPage(WorkReportPlanPageReqVO pageReqVO);
BigDecimal selectSumBy(Long planId, String orgType);
}

@ -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);
}
}
Loading…
Cancel
Save