package doumeemes.service.ext.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import doumeemes.core.constants.ResponseStatus; import doumeemes.core.exception.BusinessException; import doumeemes.core.model.LoginUserInfo; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.core.utils.Constants; import doumeemes.core.utils.DateUtil; import doumeemes.core.utils.redis.RedisUtil; import doumeemes.dao.business.WOutboundMapper; import doumeemes.dao.business.WTransferMapper; import doumeemes.dao.business.WorkorderMapper; import doumeemes.dao.business.dto.statistics.*; import doumeemes.dao.business.model.*; import doumeemes.dao.ext.*; import doumeemes.dao.ext.dto.*; import doumeemes.dao.ext.vo.*; import doumeemes.service.ext.*; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; 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实现 * @author 江蹄蹄 * @date 2022/04/20 11:01 */ @Service public class StatisticsServiceImpl implements StatisticsService { @Autowired private RedisTemplate redisTemplate; @Autowired private WorkPlansExtMapper workPlansExtMapper; @Autowired private CompanyExtService companyExtService; @Autowired private DepartmentExtService departmentExtService; @Autowired private RouteProcedureExtMapper routeProcedureExtMapper; @Autowired private PlansExtMapper plansExtMapper; @Autowired private WStockExtMapper stockExtMapper; @Autowired private WorkorderRecordExtMapper workorderRecordExtMapper; @Autowired private DeviceCheckExtService deviceCheckExtService; @Autowired private PlansExtService plansExtService; @Override public StatisticsPlanDataModel getPlansData(Integer companyId, Integer departId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryWorkPlansDTO workPlans = new QueryWorkPlansDTO(); workPlans.setRootDepartId(department.getRootId()); workPlans.setDepartId(departId); //查询统计结果 StatisticsPlanDataModel model = workPlansExtMapper.getPlansStaticticsData(workPlans); model.setUnqualifiedRate(new BigDecimal(0)); if(model.getDoneNUm() !=null && model.getDoneNUm().compareTo(new BigDecimal(0)) != 0){ //不良品率 model.setUnqualifiedRate(model.getUnqualifiedNum().divide(model.getDoneNUm(),4).multiply(new BigDecimal(100))); } return model; } @Override public StatisticsPlanDataModel getProcedurePlanData(Integer companyId, Integer departId, Integer procedureId){ DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryPlansExtDTO param = new QueryPlansExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); param.setProcedureId(procedureId); //查询统计结果 StatisticsPlanDataModel model = plansExtMapper.getPlansStaticticsData(param); model.setUnqualifiedRate(new BigDecimal(0)); if(model.getDoneNUm() !=null && model.getDoneNUm().compareTo(new BigDecimal(0)) != 0){ //不良品率 model.setUnqualifiedRate(model.getUnqualifiedNum().divide(model.getDoneNUm(),4).multiply(new BigDecimal(100))); } return model; } @Override public List getUserProduceTopData(Integer companyId, Integer departId, Integer procedureId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryWorkorderRecordExtDTO param = new QueryWorkorderRecordExtDTO(); param.setRootDepartId(department.getRootId()); param.setProcedureId(procedureId); param.setDepartId(departId); //查询统计结果 List model = workorderRecordExtMapper.getUserProduceTopData(param); return model; } @Override public List getProcedureProcessList(Integer companyId, Integer departId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryPlansExtDTO param = new QueryPlansExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); //查询统计结果 List result = plansExtMapper.selectProcedureProcessList(param); if(result !=null){ for(ProcedureProcessModel model : result){ //未完成数 BigDecimal doneNum =Constants.formatBigdecimal(model.getUnqualifiedNum()) .add(Constants.formatBigdecimal(model.getQualifiedNum())); model.setUndoneNum(Constants.formatBigdecimal(model.getNum()).subtract(doneNum)); //不良品率 if(doneNum.compareTo(new BigDecimal(0) )>0){ model.setUnqualifiedRate(model.getUnqualifiedNum().divide(doneNum,4).multiply(new BigDecimal(100))); } } } return result; } @Override public List getStockList(Integer companyId, Integer departId){ DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryWStockExtDTO param = new QueryWStockExtDTO(); param.setRootDepartId(department.getRootId()); param.setWmodelDepartId(departId); //查询统计结果 List result = stockExtMapper.getStatisticsStockList(param); return result; } @Override public List getDepartmentList(Integer companyId){ CompanyExtListVO companyExtListVO = companyExtService.getModelById(companyId); if(companyExtListVO == null || Constants.equalsInteger(companyExtListVO.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryDepartmentExtDTO param = new QueryDepartmentExtDTO(); param.setDeleted(Constants.ZERO); param.setCompanyId(companyId); param.setType(Constants.DEPART_TYPE.com); List result = departmentExtService.findList(param); return result; } @Override public List getUnqualified7DayData(Integer companyId, Integer departId, Integer procedureId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryWorkorderRecordExtDTO param = new QueryWorkorderRecordExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); param.setProcedureId(procedureId); //查询统计结果 List model = workorderRecordExtMapper.getUnqualified7DayData(param); List result = new ArrayList<>(); Date date = DateUtil.getCurrentDate(); for (int i = 0; i < 7; i++) { Date td = DateUtil.addDaysToDate(date, i-6); Unqualified7DayModel m = getReusltModelByDate(td,model); if(m == null){ m = new Unqualified7DayModel(); m.setCreateTime(td); m.setUnqualifiedNum(new BigDecimal(0)); } result.add(m); } return result; } @Override public List getUnqualifiedCateData(Integer companyId, Integer departId, Integer procedureId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryWorkorderRecordExtDTO param = new QueryWorkorderRecordExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); param.setProcedureId(procedureId); //查询统计结果 List model = workorderRecordExtMapper.getUnqualifiedCateData(param); return model; } @Override public PageData getRecordLogPage(Integer companyId, Integer departId, PageWrap pageWrap){ DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } //只能查看当前根组织的数据 pageWrap.getModel().setRootDepartId(department.getRootId()); pageWrap.getModel().setDepartId(departId); PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); List result = workorderRecordExtMapper.getRecordLog(pageWrap.getModel()); if(result!=null){ for(RecordLogModel model : result){ model.setUnqualifiedRate(new BigDecimal(0)); BigDecimal doneNum = Constants.formatBigdecimal(model.getUnqualifiedNum()).add(Constants.formatBigdecimal(model.getQualifiedNum())); if(model.getUnqualifiedNum() !=null && doneNum.compareTo(new BigDecimal(0)) != 0){ //不良品率 model.setUnqualifiedRate(model.getUnqualifiedNum().divide(doneNum,4).multiply(new BigDecimal(100))); } } } return PageData.from(new PageInfo<>(result)); } @Override public PageData getDeviceCheckPage(Integer companyId, Integer departId,PageWrap pageWrap){ DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } //只能查看当前根组织的数据 pageWrap.getModel().setRootDepartId(department.getRootId()); pageWrap.getModel().setComDepartId(departId); return deviceCheckExtService.getDeviceCheckPage(pageWrap); } @Override public List getProcedurePlansPage(Integer companyId, Integer departId,Integer procedureId){ DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } if(procedureId == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"工序编码不能为空!"); } QueryPlansExtDTO param = new QueryPlansExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); param.setProcedureId(procedureId); List result = plansExtMapper.selectStatisticsList(param); if(result != null){ for(ProcedurePlansPageModel model :result){ model.setUnqualifiedRate(new BigDecimal(0)); BigDecimal doneNum = Constants.formatBigdecimal(model.getQualifiedNum()).add(Constants.formatBigdecimal(model.getUnqualifiedNum())); if(model.getUnqualifiedNum() !=null && doneNum.compareTo(new BigDecimal(0)) != 0){ //不良品率 model.setUnqualifiedRate(model.getUnqualifiedNum().divide(doneNum,4).multiply(new BigDecimal(100))); model.setUndoneNum(Constants.formatBigdecimal(model.getNum()).subtract(doneNum)); } } } return result; } @Override public List getWorkPlansList(Integer companyId, Integer departId){ DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员"); } QueryWorkPlansExtDTO param = new QueryWorkPlansExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); List result = workPlansExtMapper.selectStatisticsList(param); if(result != null){ for(WorkPlansPageModel model :result){ if(model.getRouteId() ==null){ continue; } //查询工序集合和完成情况 QueryRouteProcedureExtDTO r = new QueryRouteProcedureExtDTO(); r.setRouteId(model.getRouteId()); r.setDeleted(Constants.ZERO); r.setWorkPlanId(model.getId()); List list = routeProcedureExtMapper.selectStatisticsList(r); List rList = new ArrayList<>(); if(list != null){ for(RouteProcedureExtListVO t : list){ WorkPlansProcedureModel tt = new WorkPlansProcedureModel(); tt.setProcedureName(t.getProcedureName()); tt.setProcedureId(t.getProcedureId()); tt.setRate(new BigDecimal(0)); if( Constants.formatBigdecimal(t.getPlanNum()).compareTo(new BigDecimal(0)) >0){ //完成率 tt.setRate(Constants.formatBigdecimal(t.getQualifiedNum()).divide(t.getPlanNum(),4).multiply(new BigDecimal(100))); } tt.setPlanNum(Constants.formatBigdecimal(t.getPlanNum())); tt.setDoneNum(Constants.formatBigdecimal(t.getQualifiedNum())); rList.add(tt); //最后一列的良品数/完工数:为当前产品最后一道工序的良品数/完工数 model.setDoneNum(t.getDoneNum()); model.setQualifiedNum(t.getQualifiedNum()); } } model.setProcedureList(rList); } } return result; } private Unqualified7DayModel getReusltModelByDate(Date td, List model ) { if(model !=null){ for(Unqualified7DayModel m : model){ String d1 = DateUtil.getShortTime(td); String d2 = DateUtil.getShortTime(m.getCreateTime()); if(StringUtils.equals(d1,d2)){ return m; } } } return null; } }