jiaosong
2023-08-18 2b0e875855e781c16e32187aa5552ee12ddcefa0
server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -16,11 +16,15 @@
import doumeemes.core.utils.excel.EasyExcelUtil;
import doumeemes.core.utils.redis.RedisUtil;
import doumeemes.dao.business.PlansMapper;
import doumeemes.dao.business.UnqualifiedRecordMapper;
import doumeemes.dao.business.WorkorderMapper;
import doumeemes.dao.business.dto.*;
import doumeemes.dao.business.model.*;
import doumeemes.dao.ext.*;
import doumeemes.dao.ext.dto.*;
import doumeemes.dao.ext.vo.*;
import doumeemes.service.ext.*;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
@@ -32,9 +36,11 @@
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * 生产计划Service实现
@@ -61,7 +67,8 @@
    private WorkorderHistoryExtMapper workorderHistoryExtMapper;
    @Autowired
    private WorkorderRecordExtMapper workorderRecordExtMapper;
    @Autowired
    private WorkorderMapper workorderMapper;
    @Autowired
    private RouteProcedureExtMapper routeProcedureExtMapper;
    @Autowired
@@ -84,6 +91,10 @@
    private MaterialDistributeExtMapper materialDistributeExtMapper;
    @Autowired
    private WStockExtService  wStockExtService;
    @Autowired
    private WorkorderRecordStandardService workorderRecordStandardService;
    @Autowired
    private UnqualifiedRecordMapper unqualifiedRecordMapper;
    @Override
    public  PlansExtListVO findById(Integer id){
@@ -134,6 +145,19 @@
//        //统计已完工数量
//        param.setStatus(Constants.WORKORDER_STATUS.done);
//        plan.setDoneNum(workorderExtMapper.sumOrderNum(param));
        QueryBomExtDTO bb = new QueryBomExtDTO();
        bb.setDepartId(plan.getDepartId());
        bb.setDeleted(Constants.ZERO);
        bb.setRootDepartId(user.getRootDepartment().getId());
        bb.setMaterialId(plan.getMaterialId());
        bb.setProcedureId(plan.getProcedureId());
        BomExtListVO versionBom = bomExtMapper.selectByModel( bb);
        if(versionBom == null || StringUtils.isBlank(versionBom.getVersion()) || versionBom.getBomVersionId() == null){
            plan.setHasBom(Constants.ZERO);
        }else {
            plan.setBomType(Constants.formatIntegerNum(versionBom.getType()));
            plan.setHasBom(Constants.ONE);
        }
        return plan;
    }
@@ -192,6 +216,14 @@
//                p.setDistributNum(tp.getDistributNum());
//                p.setDoneNum(tp.getDoneNum());
                p.setIsStock(wStockExtService.isStockForPlan(p));
                p.setHasExpire(false);
                p.setStatus(Constants.formatIntegerNum(p.getStatus()));
                if ( !p.getStatus().equals(Constants.PLAN_STATUS.done) &&
                        !p.getStatus().equals(Constants.PLAN_STATUS.close)){
                    if (Objects.nonNull(p.getPlanDate())){
                        p.setHasExpire(DateUtil.toDateLocalDateTime(p.getWorkPlanPlanDate()).toLocalDate().isBefore(LocalDate.now()));
                    }
                }
            }
        }
        return PageData.from(new PageInfo<>(result));
@@ -565,7 +597,7 @@
        distributeDone(user, param,param.getPlanNum());
    }
    private void distributeDone(LoginUserInfo user,  Workorder param,int thisPlanNum) {
    private Workorder distributeDone(LoginUserInfo user,  Workorder param,int thisPlanNum) {
        if(param.getPlanId()== null
                ||param.getPlanDate() == null
                || param.getProGroupId()==null
@@ -587,7 +619,7 @@
        if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,计划已暂停!");
        }
        if(Constants.formatIntegerNum(mp.getDistributNum())+thisPlanNum > Constants.formatIntegerNum(mp.getNum())){
        if(Constants.formatIntegerNum(mp.getWorkorderDistributNum())+thisPlanNum > Constants.formatIntegerNum(mp.getNum())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,累计分配数量大于计划数量!");
        }
        if(!Constants.equalsInteger(mp.getStatus(),Constants.PLAN_STATUS.publish)&&!Constants.equalsInteger(mp.getStatus(),Constants.PLAN_STATUS.distribute)){
@@ -629,6 +661,8 @@
        order.setUrgent(mp.getUrgent());
        order.setFactoryId(mp.getFactoryId());
        order.setBackorderId(mp.getBackorderId());
        order.setUnqualifiedNum(param.getUnqualifiedNum());
        order.setQualifiedNum(param.getQualifiedNum());
        order.setOriginId(systemDictDataBiz.queryByCode(Constants.WORKORDER_SOURCE,Constants.WORKORDER_SOURCE_PLAN).getId());
        //工单编码
        order.setCode(workorderExtService.getNextCode(user.getCompany().getId()));
@@ -648,7 +682,7 @@
            //生产人员记录
            workorderUserExtMapper.insert(wu);
        }
        return order;
    }
    private void checkUserAndGroup(Workorder param, PlansExtListVO  model,LoginUserInfo user) throws BusinessException{
@@ -673,9 +707,9 @@
        if(ulist == null){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,生产人员信息不正确,请刷新页面重试!");
        }
        if(ulist.size() < param.getProUserList().size()){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,存在生产人员信息不正确,请刷新页面重试!");
        }
//        if(ulist.size() < param.getProUserList().size()){
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,存在生产人员信息不正确,请刷新页面重试!");
//        }
        List<WorkorderUser> userList = new ArrayList<>();
        for(UserDeviceExtListVO uModel : ulist){
            WorkorderUser u = new WorkorderUser();
@@ -1502,7 +1536,7 @@
    }
    /**
     * 恢复计划
     * @param p
     * @param
     */
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    @Override
@@ -1545,4 +1579,111 @@
    }
    /**
     * 一键报工
     * @param user
     */
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    @Override
    public void autoWorkReport(LoginUserInfo user, AutoWorkReportDTO autoWorkReportDTO){
        if(Objects.isNull(autoWorkReportDTO)
            || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())
            || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO
            || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        //查询工工序计划状态
        Plans plans = plansExtMapper.selectById(autoWorkReportDTO.getPlansId());
        if(Objects.isNull(plans)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工序计划数据");
        }
        if(!(plans.getStatus().equals(Constants.PLAN_STATUS.create)||plans.getStatus().equals(Constants.PLAN_STATUS.publish)||plans.getStatus().equals(Constants.PLAN_STATUS.distribute))){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工序计划已流转,无法操作");
        }
        if(plans.getPaused().equals(Constants.ONE)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工序计划已暂停,无法操作");
        }
        if(Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"参数错误:产出数据");
        }
        //查询工序计划已分配数量
        List<Workorder> workorderList = workorderMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId())
                .eq("STATUS",Constants.WORKORDER_STATUS.baogong));
        //本次产出数量
        BigDecimal num = autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum());
        if(num.compareTo(BigDecimal.ZERO)<=Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"参数错误:产出数据");
        }
        //工单已分配数量
        Integer produceNum = workorderList.stream().map(s -> s.getPlanNum()).reduce(Constants.ZERO, Integer::sum);
        Integer surplusNum = plans.getNum() - produceNum;
        if(num.compareTo(BigDecimal.valueOf(surplusNum))>0){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"超出当前工序计划可报工数量");
        }
        Workorder param = new Workorder();
        param.setPlanId(autoWorkReportDTO.getPlansId());
        param.setPlanDate(new Date());
        param.setProGroupId(autoWorkReportDTO.getProGroupId());
        param.setProUserList(autoWorkReportDTO.getProUserList());
        param.setPlanNum(num.intValue());
        //生成工单信息
        param.setUnqualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().intValue());
        param.setQualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().intValue());
        Workorder workorder = this.distributeDone(user,param,num.intValue());
        //工单投料记录
        CreateMaterialDTO createMaterialDTO = new CreateMaterialDTO();
        if(!Objects.isNull(autoWorkReportDTO.getRecordList())&&autoWorkReportDTO.getRecordList().size()>Constants.ZERO){
            createMaterialDTO.setId(workorder.getId());
            createMaterialDTO.setRecordList(autoWorkReportDTO.getRecordList());
            workorderRecordStandardService.createMaterialStandard(createMaterialDTO);
        }
        //工单产出记录
        autoWorkReportDTO.getCreateWorkorderRecordDTO().setWorkorderId(workorder.getId());
        WorkorderRecord workorderRecord = workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
        //工单报工
        workorderRecordStandardService.comfirmDone(workorder,false);
        //更新工单状态
        if(num.compareTo(BigDecimal.valueOf(surplusNum))==Constants.ZERO){
            plans.setStatus(Constants.PLAN_STATUS.done);
        }else{
            if(plans.getStatus().equals(Constants.PLAN_STATUS.create)){
                plans.setStatus(Constants.PLAN_STATUS.distribute);
            }
        }
        plansExtMapper.updateById(plans);
        //发送消息队列处理分享操作
        workorderExtService.statisticNum(workorder);
        //存储报工不良项数据
        if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
            if(!Objects.isNull(autoWorkReportDTO.getCreateUnqualifiedDTOList())&&autoWorkReportDTO.getCreateUnqualifiedDTOList().size()>Constants.ZERO){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"不良项错误:请检查不良项数据");
            }
        }else{
            List<CreateUnqualifiedDTO> createUnqualifiedDTOList = autoWorkReportDTO.getCreateUnqualifiedDTOList();
            BigDecimal unqualified = createUnqualifiedDTOList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add);
            if(unqualified.compareTo(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())!=Constants.ZERO){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"不良项错误:请检查不良项数据");
            }
            for (CreateUnqualifiedDTO createUnqualifiedDTO:createUnqualifiedDTOList) {
                if(createUnqualifiedDTO.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==Constants.ZERO
                ||Objects.isNull(createUnqualifiedDTO.getCategoryId())){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"不良项错误:请检查不良项数据");
                }
                UnqualifiedRecord unqualifiedRecord = new UnqualifiedRecord();
                unqualifiedRecord.setDeleted(Constants.ZERO);
                unqualifiedRecord.setCreateUser(user.getId());
                unqualifiedRecord.setCreateTime(new Date());
                unqualifiedRecord.setRootDepartId(plans.getRootDepartId());
                unqualifiedRecord.setDepartId(plans.getDepartId());
                unqualifiedRecord.setWorkorderId(workorder.getId());
                unqualifiedRecord.setRecordId(workorderRecord.getId());
                unqualifiedRecord.setCategoryId(createUnqualifiedDTO.getCategoryId());
                unqualifiedRecord.setUnqualifiedNum(createUnqualifiedDTO.getUnQualifiedNum());
                unqualifiedRecordMapper.insert(unqualifiedRecord);
            }
        }
    }
}