|
|
|
|
@ -1,54 +1,43 @@
|
|
|
|
|
package cn.iocoder.yudao.module.mes.service.feedingrecord;
|
|
|
|
|
|
|
|
|
|
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.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;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
|
|
|
|
|
import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.feedingplan.vo.FeedingRecordPlanRespVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionDetailRespVO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanStatusEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.StockWorkShopTypeEnum;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingplan.FeedingRecordPlanDO;
|
|
|
|
|
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.feedingrecord.FeedingRecordDO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDetailDO;
|
|
|
|
|
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.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.plan.PlanService;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopDetailService;
|
|
|
|
|
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;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.MathContext;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDetailDO;
|
|
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
|
|
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordDetailMapper;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
|
|
|
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
|
|
|
|
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.FEEDING_RECORD_NOT_EXISTS;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 投料记录 Service 实现类
|
|
|
|
|
@ -79,7 +68,6 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
private StockWorkshopService workshopService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Long createFeedingRecord(FeedingRecordSaveReqVO createReqVO) {
|
|
|
|
|
@ -113,6 +101,7 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
updateFeedingRecordDetailList(updateReqVO.getId(), updateReqVO.getFeedingRecordDetails());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//将单位转到kg
|
|
|
|
|
private List<FeedingRecordDetailDO> transfer(List<FeedingRecordDetailDO> list) {
|
|
|
|
|
if (list != null) {
|
|
|
|
|
@ -130,6 +119,7 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void deleteFeedingRecord(Long id) {
|
|
|
|
|
@ -181,6 +171,7 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
private void deleteFeedingRecordDetailByRecordId(Long recordId) {
|
|
|
|
|
feedingRecordDetailMapper.deleteByRecordId(recordId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<FeedingRecordDetailRespVO> buildVOList(List<FeedingRecordDetailDO> list) {
|
|
|
|
|
if (CollUtil.isEmpty(list)) {
|
|
|
|
|
@ -203,16 +194,18 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
user -> item.setUnitName(user.getNickname()));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<FeedingRecordDO> getFeedingRecordList(Collection<Long> ids) {
|
|
|
|
|
return feedingRecordMapper.selectBatchIds(ids);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**提交,反提交投料记录
|
|
|
|
|
/**
|
|
|
|
|
* 提交,反提交投料记录
|
|
|
|
|
* 按照投料明细扣减车间仓库存
|
|
|
|
|
* //投料明细按照当前正在开工的计划需求比例进行分配,生成投料分配计划记录FeedingRecordPlanDO
|
|
|
|
|
* (投料明细按照当前正在开工的计划进行分配,如果计划都满足了,再按需求比例分配剩余投料)
|
|
|
|
|
* **/
|
|
|
|
|
**/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Map<String, FeedingRecordPlanDO> updateStatus(FeedingRecordDO recordDO, List<FeedingRecordDetailDO> detailDOList, String status, Long userId
|
|
|
|
|
@ -250,6 +243,7 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, FeedingRecordPlanDO> dealPlan(Map<Long, FeedingRecordDetailDO> detailDOMap, FeedingRecordDO recordDO, Long userId,
|
|
|
|
|
List<PlanDO> planDOList, Map<Long, List<ItemRequisitionDetailRespVO>> planItemListMap,
|
|
|
|
|
Map<String, ItemRequisitionDetailRespVO> planItemMap) {
|
|
|
|
|
@ -303,6 +297,7 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
recordPlanMapper.insertBatch(recordPlanDOMap.values());
|
|
|
|
|
return recordPlanDOMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//处理剩余未分配原料,按照totalPlanNeedItem 比例分配到每个计划
|
|
|
|
|
private Map<String, FeedingRecordPlanDO> dealLast(Map<Long, FeedingRecordDetailDO> detailDOMap, Long recordId, Long userId
|
|
|
|
|
, List<PlanDO> planDOList, Map<Long, BigDecimal> totalPlanNeedItem, Map<String, FeedingRecordPlanDO> recordPlanDOMap,
|
|
|
|
|
@ -338,6 +333,7 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
|
|
|
|
|
}
|
|
|
|
|
return recordPlanDOMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getMapKey(Long planId, Long itemId) {
|
|
|
|
|
return planId + "-" + itemId;
|
|
|
|
|
}
|
|
|
|
|
|