111
k94314517
2023-08-14 70a0df1acc71a0ae4731fde6d595979d15a9ec94
111
已添加2个文件
已修改6个文件
238 ■■■■■ 文件已修改
server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/CreateWorkorderRecordDTO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/model/SalaryParam.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/ext/PlansExtService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package doumeemes.dao.business.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/8/14 18:35
 */
@Data
public class AutoWorkReportDTO {
    @ApiModelProperty(value = "工序计划主键")
    private Integer plansId;
    @ApiModelProperty(value = "投料记录")
    private List<MaterialListDTO> recordList ;
    @ApiModelProperty(value = "产出记录")
    private CreateWorkorderRecordDTO createWorkorderRecordDTO;
}
server/src/main/java/doumeemes/dao/business/dto/CreateWorkorderRecordDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package doumeemes.dao.business.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2022/05/12 10:18
 */
@Data
public class CreateWorkorderRecordDTO {
    @ApiModelProperty(value = "工单主键")
    private Integer workorderId;
    @ApiModelProperty(value = "合格数量")
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "不合格数量")
    private BigDecimal unQualifiedNum;
    @ApiModelProperty(value = "报工时长(秒)"  )
    private Integer duration;
}
server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
@@ -11,6 +11,8 @@
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.math.BigDecimal;
import java.util.Date;
/**
@@ -77,7 +79,7 @@
    @ApiModelProperty(value = "标准数量")
    @ExcelColumn(name="标准数量")
    private Integer num;
    private BigDecimal num;
    @ApiModelProperty(value = "标准时长(秒)")
    @ExcelColumn(name="标准时长(秒)")
server/src/main/java/doumeemes/dao/business/model/WorkorderRecord.java
@@ -129,11 +129,11 @@
    @ApiModelProperty(value = "检验合格数量", example = "1")
    @ExcelColumn(name="检验合格数量")
    private Integer qualifiedNum;
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "检验不合格数量", example = "1")
    @ExcelColumn(name="检验不合格数量")
    private Integer unqualifiedNum;
    private BigDecimal unqualifiedNum;
    @ApiModelProperty(value = "检验日期")
    @ExcelColumn(name="检验日期")
@@ -167,6 +167,24 @@
    @ApiModelProperty(value = "关联票据类型 0工单 1篮筐更换单记录"  )
    private Integer relobjType;
    //MATERIAL_DONETYPE,MATERIAL_PROCEDURE_ID,RELOBJ_ID、RELOBJ_TYPE
    @ApiModelProperty(value = "报工时长(秒)"  )
    private Integer duration;
    @ApiModelProperty(value = "工资单价(分)"  )
    private BigDecimal salaryPrice;
    @ApiModelProperty(value = "标准数量"  )
    private BigDecimal salaryNum;
    @ApiModelProperty(value = "标准时长(秒)"  )
    private Integer salaryTimes;
    @ApiModelProperty(value = "不良品是否计入 0否 1是"  )
    private Integer salaryUnqualified;
    @ApiModelProperty(value = "计价方式 0计件 1计时"  )
    private Integer salaryType;
    @ApiModelProperty(value = "工资结果(分)"  )
    private BigDecimal salary;
}
server/src/main/java/doumeemes/service/ext/PlansExtService.java
@@ -5,6 +5,7 @@
import doumeemes.core.model.LoginUserInfo;
import doumeemes.core.model.PageData;
import doumeemes.core.model.PageWrap;
import doumeemes.dao.business.dto.AutoWorkReportDTO;
import doumeemes.dao.business.model.Plans;
import doumeemes.dao.business.model.Workorder;
import doumeemes.dao.ext.vo.PlansExtListCountVO;
@@ -76,4 +77,11 @@
    void pauseByIdForStandard(Plans model,LoginUserInfo userInfo);
    void regainByIdForStandard(Plans model, LoginUserInfo userInfo);
    List<PlansExtListVO> getListByWorkPlan(Integer workPlanId);
    /**
     * ä¸€é”®æŠ¥å·¥
     * @param user
     * @param autoWorkReportDTO
     */
    void autoWorkReport(LoginUserInfo user, AutoWorkReportDTO autoWorkReportDTO);
}
server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
@@ -4,6 +4,7 @@
import doumeemes.core.model.PageData;
import doumeemes.core.model.PageWrap;
import doumeemes.dao.business.dto.CreateMaterialDTO;
import doumeemes.dao.business.dto.CreateWorkorderRecordDTO;
import doumeemes.dao.business.dto.DealWorkorderRecordDTO;
import doumeemes.dao.business.model.Workorder;
import doumeemes.dao.business.model.WorkorderRecord;
@@ -30,6 +31,8 @@
    WorkorderRecord dealWorkorderRecord(DealWorkorderRecordDTO dealWorkorderRecordDTO, LoginUserInfo loginUserInfo);
    WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo);
    List<WorkorderRecord> getWorkorderRecordList(Integer workorderId);
    PageData<WStockExtListVO> choiceStockPageForWorkorder(PageWrap<QueryWStockDto> pageWrap, LoginUserInfo userInfo);
server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -16,11 +16,13 @@
import doumeemes.core.utils.excel.EasyExcelUtil;
import doumeemes.core.utils.redis.RedisUtil;
import doumeemes.dao.business.PlansMapper;
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;
@@ -35,6 +37,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * ç”Ÿäº§è®¡åˆ’Service实现
@@ -84,6 +87,8 @@
    private MaterialDistributeExtMapper materialDistributeExtMapper;
    @Autowired
    private WStockExtService  wStockExtService;
    @Autowired
    private WorkorderRecordStandardService workorderRecordStandardService;
    @Override
    public  PlansExtListVO findById(Integer id){
@@ -565,7 +570,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
@@ -648,7 +653,7 @@
            //生产人员记录
            workorderUserExtMapper.insert(wu);
        }
        return order;
    }
    private void checkUserAndGroup(Workorder param, PlansExtListVO  model,LoginUserInfo user) throws BusinessException{
@@ -1545,4 +1550,62 @@
    }
    /**
     * ä¸€é”®æŠ¥å·¥
     * @param user
     */
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    @Override
    public void autoWorkReport(LoginUserInfo user, AutoWorkReportDTO autoWorkReportDTO){
        //查询工工序计划状态
        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)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工序计划已流转,无法操作");
        }
        if(Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"参数错误:产出数据");
        }
        //查询工序计划已分配数量
        List<Workorder> workorderList = workorderExtMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId()));
        //本次产出数量
        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());
        List<Integer> proUserList = new ArrayList<Integer>();
        //TODO
        proUserList.add(user.getId());
        param.setProUserList(proUserList);
        param.setPlanNum(plans.getNum());
        //生成工单信息
        Workorder workorder = this.distributeDone(user,param,plans.getNum());
        //工单投料记录
        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);
        }
        //工单产出记录
        workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
        //工单报工
        workorderRecordStandardService.comfirmDone(workorder);
    }
}
server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -16,7 +16,9 @@
import doumeemes.core.utils.redis.RedisUtil;
import doumeemes.dao.business.BackOrderDetailMapper;
import doumeemes.dao.business.BackorderMapper;
import doumeemes.dao.business.SalaryParamMapper;
import doumeemes.dao.business.dto.CreateMaterialDTO;
import doumeemes.dao.business.dto.CreateWorkorderRecordDTO;
import doumeemes.dao.business.dto.DealWorkorderRecordDTO;
import doumeemes.dao.business.dto.MaterialListDTO;
import doumeemes.dao.business.model.*;
@@ -79,6 +81,8 @@
    private WOutboundRecordExtMapper wOutboundRecordExtMapper;
    @Autowired
    private MaterialExtMapper materialExtMapper;
    @Autowired
    private SalaryParamMapper salaryParamMapper;
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    @Override
@@ -1108,4 +1112,76 @@
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo){
        Workorder workorder  = workorderExtMapper.selectById(createWorkorderRecordDTO.getWorkorderId());
        if(Objects.isNull(workorder)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到该工单信息!");
        }
        if(Objects.isNull(createWorkorderRecordDTO.getUnQualifiedNum())
                ||Objects.isNull(createWorkorderRecordDTO.getUnQualifiedNum())
                ||Objects.isNull(createWorkorderRecordDTO.getWorkorderId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        BigDecimal num = createWorkorderRecordDTO.getQualifiedNum().add(createWorkorderRecordDTO.getUnQualifiedNum());
        WorkorderRecord workorderRecord = new WorkorderRecord();
        //查询工单下是否存在对应记录
        workorderRecord = workorderRecordExtMapper.selectOne(new QueryWrapper<WorkorderRecord>()
                .eq("WORKORDER_ID",createWorkorderRecordDTO.getWorkorderId())
                .eq("TYPE",Constants.ONE)
                .eq("DELETED",Constants.ZERO)
                .last(" limit 1  ")
        );
        if(!Objects.isNull(workorderRecord)){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,该工单的该类产出记录已存在!");
        }
        if(num.compareTo(BigDecimal.valueOf(workorder.getPlanNum()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,该工单的产出数量不能大于工单计划数量!");
        }
        //数据存储
        workorderRecord = new WorkorderRecord();
        workorderRecord.setDeleted(Constants.ZERO);
        workorderRecord.setCreateUser(loginUserInfo.getId());
        workorderRecord.setCreateTime(new Date());
        workorderRecord.setNum(num);
        workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId());
        workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId());
        workorderRecord.setPlanId(workorder.getPlanId());
        workorderRecord.setWorkorderId(createWorkorderRecordDTO.getWorkorderId());
        workorderRecord.setBatch(workorder.getBatch());
        workorderRecord.setFactoryId(workorder.getFactoryId());
        workorderRecord.setProcedureId(workorder.getProcedureId());
        workorderRecord.setProDate(new Date());
        workorderRecord.setType(Constants.ONE);
        workorderRecord.setMaterialId(workorder.getMaterialId());
        workorderRecord.setUnitId(workorder.getUnitId());
        workorderRecord.setMaterialBatch(workorder.getBatch());
        workorderRecord.setUnqualifiedNum(createWorkorderRecordDTO.getUnQualifiedNum());
        workorderRecord.setQualifiedNum(createWorkorderRecordDTO.getQualifiedNum());
        //计算工资信息
        SalaryParam salaryParam = salaryParamMapper.selectOne(new QueryWrapper<SalaryParam>().eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",workorderRecord.getMaterialId())
                .eq("DEPART_ID",workorderRecord.getFactoryId()).eq("PROCEDURE_ID",workorderRecord.getProcedureId()).last(" limit 1  "));
        if(Objects.isNull(salaryParam)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未配置工资绩效配置!");
        }
        workorderRecord.setSalaryPrice(salaryParam.getSalary());
        workorderRecord.setSalaryType(salaryParam.getType());
        workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
        //计件工资
        if(salaryParam.getType().equals(Constants.ZERO)){
            workorderRecord.setSalaryNum(salaryParam.getNum());
            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum()));
        }else{
            workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
            workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600)));
        }
        workorderRecordExtMapper.insert(workorderRecord);
        return workorderRecord;
    }
}