|
|
|
|
@ -20,15 +20,19 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.feedingplan.FeedingRecordPlanD
|
|
|
|
|
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.itemrequisition.ItemRequisitionDetailDO;
|
|
|
|
|
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.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.ItemRequisitionDetailMapper;
|
|
|
|
|
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.organization.OrganizationService;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.service.plan.PlanService;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
|
|
|
import io.swagger.v3.oas.annotations.Parameter;
|
|
|
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
|
|
|
@ -46,6 +50,7 @@ import java.util.ArrayList;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
|
@ -70,6 +75,9 @@ public class FeedingRecordController {
|
|
|
|
|
@Resource
|
|
|
|
|
private FeedingRecordDetailMapper feedingRecordDetailMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private FeedingRecordPlanMapper feedingRecordPlanMapper;
|
|
|
|
|
|
|
|
|
|
@PostMapping("/create")
|
|
|
|
|
@Operation(summary = "创建投料记录")
|
|
|
|
|
@PreAuthorize("@ss.hasPermission('mes:feeding-record:create')")
|
|
|
|
|
@ -168,64 +176,122 @@ public class FeedingRecordController {
|
|
|
|
|
private PlanService planService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ItemRequisitionMapper itemRequisitionMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
private ItemRequisitionDetailMapper itemRequisitionDetailMapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@PutMapping("/update-status")
|
|
|
|
|
@Operation(summary = "提交状态")
|
|
|
|
|
public CommonResult<Boolean> updateStatus(@RequestParam("id") Long id,
|
|
|
|
|
@RequestParam("status") String status) {
|
|
|
|
|
LoginUser user = SecurityFrameworkUtils.getLoginUser();
|
|
|
|
|
if (user != null) {
|
|
|
|
|
// if (user != null) {
|
|
|
|
|
// FeedingRecordDO recordDO = feedingRecordMapper.selectById(id);
|
|
|
|
|
// if (recordDO == null) throw exception(FEEDING_RECORD_NOT_EXISTS);
|
|
|
|
|
// //后续步骤只处理领料投料的投料单,湿废品和干废品投料暂不处理
|
|
|
|
|
// //计划及计划物料需求
|
|
|
|
|
// List<Integer> statusList = new ArrayList<>();
|
|
|
|
|
// statusList.add(PlanStatusEnum.量产.getValue());
|
|
|
|
|
// //获取正在开工的计划,按照计划完工时间从小到大排序,优先分配给最近计划完工的计划。
|
|
|
|
|
// List<PlanDO> planDOList = planService.getPlanByStatusAndPipeline(statusList, String.valueOf(recordDO.getFeedingPipeline()));/** todo 这里改了 以前固定2 5立方制浆线*/
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// if (recordDO.getFeedingType().equals(FeedingTypeEnum.领料.getValue())) {
|
|
|
|
|
// List<FeedingRecordDetailDO> detailDOList = feedingRecordService.getFeedingRecordDetailListByRecordId(id);
|
|
|
|
|
// Map<Long, List<ItemRequisitionDetailRespVO>> planItemListMap = new HashMap<>();
|
|
|
|
|
// Map<String, ItemRequisitionDetailRespVO> planItemMap = new HashMap<>();
|
|
|
|
|
//
|
|
|
|
|
// for (int i = 0; i < planDOList.size(); i++) {
|
|
|
|
|
// //获取计划的物料需求
|
|
|
|
|
// List<ItemRequisitionDetailRespVO> list = itemRequisitionService.getItemRequisitionList(planDOList.get(i).getId());
|
|
|
|
|
// planItemListMap.put(planDOList.get(i).getId(), list);
|
|
|
|
|
//
|
|
|
|
|
// for (ItemRequisitionDetailRespVO respVO : list) {
|
|
|
|
|
// String key = getMapKey(planDOList.get(i).getId(), respVO.getProductId());
|
|
|
|
|
// planItemMap.put(key, respVO);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// //当只有一个计划在开工时,投料直接分配给该计划
|
|
|
|
|
// 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<>();
|
|
|
|
|
// if (recordPlanDOMap!=null && !recordPlanDOMap.isEmpty()) {
|
|
|
|
|
// 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());
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
//
|
|
|
|
|
// }
|
|
|
|
|
// 处理投料
|
|
|
|
|
List<FeedingRecordPlanDO> feedingRecordPlanDOS = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
// 获取投料记录
|
|
|
|
|
FeedingRecordDO recordDO = feedingRecordMapper.selectById(id);
|
|
|
|
|
if (recordDO == null) throw exception(FEEDING_RECORD_NOT_EXISTS);
|
|
|
|
|
//后续步骤只处理领料投料的投料单,湿废品和干废品投料暂不处理
|
|
|
|
|
//计划及计划物料需求
|
|
|
|
|
List<Integer> statusList = new ArrayList<>();
|
|
|
|
|
statusList.add(PlanStatusEnum.量产.getValue());
|
|
|
|
|
//获取正在开工的计划,按照计划完工时间从小到大排序,优先分配给最近计划完工的计划。
|
|
|
|
|
List<PlanDO> planDOList = planService.getPlanByStatusAndPipeline(statusList, String.valueOf(recordDO.getFeedingPipeline()));/** todo 这里改了 以前固定2 5立方制浆线*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (recordDO.getFeedingType().equals(FeedingTypeEnum.领料.getValue())) {
|
|
|
|
|
List<FeedingRecordDetailDO> detailDOList = feedingRecordService.getFeedingRecordDetailListByRecordId(id);
|
|
|
|
|
Map<Long, List<ItemRequisitionDetailRespVO>> planItemListMap = new HashMap<>();
|
|
|
|
|
Map<String, ItemRequisitionDetailRespVO> planItemMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < planDOList.size(); i++) {
|
|
|
|
|
//获取计划的物料需求
|
|
|
|
|
List<ItemRequisitionDetailRespVO> list = itemRequisitionService.getItemRequisitionList(planDOList.get(i).getId());
|
|
|
|
|
planItemListMap.put(planDOList.get(i).getId(), list);
|
|
|
|
|
|
|
|
|
|
for (ItemRequisitionDetailRespVO respVO : list) {
|
|
|
|
|
String key = getMapKey(planDOList.get(i).getId(), respVO.getProductId());
|
|
|
|
|
planItemMap.put(key, respVO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//当只有一个计划在开工时,投料直接分配给该计划
|
|
|
|
|
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<>();
|
|
|
|
|
if (recordPlanDOMap!=null && !recordPlanDOMap.isEmpty()) {
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Long planId = recordDO.getPlanId();
|
|
|
|
|
|
|
|
|
|
// 获取最新领料单
|
|
|
|
|
ItemRequisitionDO itemRequisitionDO = itemRequisitionMapper.selectOne(
|
|
|
|
|
Wrappers.<ItemRequisitionDO>lambdaQuery()
|
|
|
|
|
.eq(ItemRequisitionDO::getPlanId, planId)
|
|
|
|
|
.orderByDesc(ItemRequisitionDO::getCreateTime)
|
|
|
|
|
.last("limit 1"));
|
|
|
|
|
|
|
|
|
|
if (itemRequisitionDO != null) {
|
|
|
|
|
|
|
|
|
|
// 领料明细
|
|
|
|
|
List<ItemRequisitionDetailDO> itemRequisitionDetailDOS =
|
|
|
|
|
itemRequisitionDetailMapper.selectList(
|
|
|
|
|
Wrappers.<ItemRequisitionDetailDO>lambdaQuery()
|
|
|
|
|
.eq(ItemRequisitionDetailDO::getItemRequisitionId, itemRequisitionDO.getId()));
|
|
|
|
|
|
|
|
|
|
// 投料明细
|
|
|
|
|
List<FeedingRecordDetailDO> feedingRecordDetailDOS =
|
|
|
|
|
feedingRecordDetailMapper.selectListByRecordId(id);
|
|
|
|
|
|
|
|
|
|
// 转成 Map<ProductId, FeedingRecordDetailDO>
|
|
|
|
|
Map<Long, FeedingRecordDetailDO> detailMap = feedingRecordDetailDOS.stream()
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
FeedingRecordDetailDO::getProductId,
|
|
|
|
|
v -> v,
|
|
|
|
|
(a, b) -> a
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
for (ItemRequisitionDetailDO itemDetail : itemRequisitionDetailDOS) {
|
|
|
|
|
|
|
|
|
|
FeedingRecordPlanDO planDO = new FeedingRecordPlanDO();
|
|
|
|
|
planDO.setPlanId(planId);
|
|
|
|
|
planDO.setItemId(itemDetail.getProductId());
|
|
|
|
|
planDO.setUserId(user.getId());
|
|
|
|
|
FeedingRecordDetailDO detail = detailMap.get(itemDetail.getProductId());
|
|
|
|
|
if (detail != null) {
|
|
|
|
|
planDO.setWeight(detail.getWeight());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
feedingRecordPlanDOS.add(planDO);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 批量插入
|
|
|
|
|
if (!feedingRecordPlanDOS.isEmpty()) {
|
|
|
|
|
feedingRecordPlanMapper.insertBatch(feedingRecordPlanDOS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (recordDO.getWeight().compareTo(recordDO.getFeedingWeight()) == 0) {
|
|
|
|
|
// recordDO.setRecordStatus(FeedingStatusEnum.已完成.getValue());
|
|
|
|
|
// } else {
|
|
|
|
|
@ -238,9 +304,10 @@ public class FeedingRecordController {
|
|
|
|
|
// feedingRecordDetailMapper.insertBatch(list);
|
|
|
|
|
// }
|
|
|
|
|
recordDO.setRecordStatus(status);
|
|
|
|
|
recordDO.setActualFeedingTime(LocalDateTime.now());
|
|
|
|
|
feedingRecordMapper.updateById(recordDO);
|
|
|
|
|
return success(true);
|
|
|
|
|
} else return CommonResult.error(500, "无法获取操作用户!请检查!");
|
|
|
|
|
// } else return CommonResult.error(500, "无法获取操作用户!请检查!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|