package doumeemes.service.business.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import doumeemes.core.model.ApiResponse; 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.Utils; import doumeemes.dao.business.WorkorderCheckMapper; import doumeemes.dao.business.model.Appliances; import doumeemes.dao.business.model.Workorder; import doumeemes.dao.business.model.WorkorderCheck; import doumeemes.dao.business.model.WorkorderHistory; import doumeemes.dao.ext.WorkorderCheckExtMapper; import doumeemes.dao.ext.WorkorderExtMapper; import doumeemes.dao.ext.WorkorderHistoryExtMapper; import doumeemes.dao.ext.dto.QueryWorkorderCheckExtDTO; import doumeemes.dao.ext.vo.WorkorderCheckExtListVO; import doumeemes.dao.system.model.SystemDictData; import doumeemes.service.business.WorkorderCheckService; import doumeemes.service.ext.WorkorderCheckExtService; import doumeemes.service.ext.impl.WorkorderExtServiceImpl; import doumeemes.service.system.impl.SystemDictDataServiceImpl; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 工单类-检验信息表Service实现 * @author 江蹄蹄 * @date 2022/04/20 09:37 */ @Service public class WorkorderCheckServiceImpl implements WorkorderCheckService { @Autowired private WorkorderExtMapper workorderExtMapper; @Autowired private WorkorderHistoryExtMapper workorderHistoryExtMapper; @Autowired private WorkorderCheckMapper workorderCheckMapper; @Autowired private WorkorderCheckExtService workorderCheckExtService; @Autowired private AppliancesServiceImpl appliancesServiceImpl; @Autowired private SystemDictDataServiceImpl systemDictDataServiceimpl; @Autowired private WorkorderCheckExtMapper workorderCheckExtMapper; @Override public Integer create(WorkorderCheck workorderCheck) { workorderCheckMapper.insert(workorderCheck); return workorderCheck.getId(); } @Override public ApiResponse deleteById(Integer id) { LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); QueryWorkorderCheckExtDTO qwc=new QueryWorkorderCheckExtDTO(); qwc.setId(id); qwc.setCreateUser(user.getId()); List result = workorderCheckExtMapper.selectListNew(qwc); if(result!=null&&result.size()>0){ WorkorderCheckExtListVO wca=result.get(0); if(wca!=null&&(Constants.equalsInteger(Constants.WORKORDER_STATUS.done,wca.getWorkorderstatus())||Constants.equalsInteger(Constants.WORKORDER_STATUS.baogong,wca.getWorkorderstatus()))){ return ApiResponse.failed("工单已完工/已报工状态下不允许删除!"); }else{ WorkorderCheck find=workorderCheckMapper.selectById(wca.getId()); find.setDeleted(Constants.ONE); workorderCheckMapper.updateById(find); return ApiResponse.success(null); } }else{ return ApiResponse.failed("只能删除自己创建的检验记录!"); } } @Override public void delete(WorkorderCheck workorderCheck) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(workorderCheck); workorderCheckMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } workorderCheckMapper.deleteBatchIds(ids); } @Override public void updateById(WorkorderCheck workorderCheck) { workorderCheckMapper.updateById(workorderCheck); } @Override public void updateByIdInBatch(List workorderChecks) { if (CollectionUtils.isEmpty(workorderChecks)) { return; } for (WorkorderCheck workorderCheck: workorderChecks) { this.updateById(workorderCheck); } } @Override public WorkorderCheck findById(Integer id) { return workorderCheckMapper.selectById(id); } @Override public WorkorderCheck findOne(WorkorderCheck workorderCheck) { QueryWrapper wrapper = new QueryWrapper<>(workorderCheck); return workorderCheckMapper.selectOne(wrapper); } @Override public List findList(WorkorderCheck workorderCheck) { QueryWrapper wrapper = new QueryWrapper<>(workorderCheck); return workorderCheckMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getDeleted() != null) { queryWrapper.lambda().eq(WorkorderCheck::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getCreateUser() != null) { queryWrapper.lambda().eq(WorkorderCheck::getCreateUser, pageWrap.getModel().getCreateUser()); } if (pageWrap.getModel().getCreateTime() != null) { queryWrapper.lambda().ge(WorkorderCheck::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.lambda().le(WorkorderCheck::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } if (pageWrap.getModel().getUpdateUser() != null) { queryWrapper.lambda().eq(WorkorderCheck::getUpdateUser, pageWrap.getModel().getUpdateUser()); } if (pageWrap.getModel().getUpdateTime() != null) { queryWrapper.lambda().ge(WorkorderCheck::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.lambda().le(WorkorderCheck::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(WorkorderCheck::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getRootDepartId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getRootDepartId, pageWrap.getModel().getRootDepartId()); } if (pageWrap.getModel().getDepartId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getDepartId, pageWrap.getModel().getDepartId()); } if (pageWrap.getModel().getPlanId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getPlanId, pageWrap.getModel().getPlanId()); } if (pageWrap.getModel().getWorkorderId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getWorkorderId, pageWrap.getModel().getWorkorderId()); } if (pageWrap.getModel().getBatch() != null) { queryWrapper.lambda().eq(WorkorderCheck::getBatch, pageWrap.getModel().getBatch()); } if (pageWrap.getModel().getFactoryId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getFactoryId, pageWrap.getModel().getFactoryId()); } if (pageWrap.getModel().getProcedureId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getProcedureId, pageWrap.getModel().getProcedureId()); } if (pageWrap.getModel().getProDeviceId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getProDeviceId, pageWrap.getModel().getProDeviceId()); } if (pageWrap.getModel().getAppliancesId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getAppliancesId, pageWrap.getModel().getAppliancesId()); } if (pageWrap.getModel().getProDate() != null) { queryWrapper.lambda().ge(WorkorderCheck::getProDate, Utils.Date.getStart(pageWrap.getModel().getProDate())); queryWrapper.lambda().le(WorkorderCheck::getProDate, Utils.Date.getEnd(pageWrap.getModel().getProDate())); } if (pageWrap.getModel().getType() != null) { queryWrapper.lambda().eq(WorkorderCheck::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getNum() != null) { queryWrapper.lambda().eq(WorkorderCheck::getNum, pageWrap.getModel().getNum()); } if (pageWrap.getModel().getDoneType() != null) { queryWrapper.lambda().eq(WorkorderCheck::getDoneType, pageWrap.getModel().getDoneType()); } if (pageWrap.getModel().getMaterialId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getMaterialId, pageWrap.getModel().getMaterialId()); } if (pageWrap.getModel().getUnitId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getUnitId, pageWrap.getModel().getUnitId()); } if (pageWrap.getModel().getMaterialBatch() != null) { queryWrapper.lambda().eq(WorkorderCheck::getMaterialBatch, pageWrap.getModel().getMaterialBatch()); } if (pageWrap.getModel().getCheckWay() != null) { queryWrapper.lambda().eq(WorkorderCheck::getCheckWay, pageWrap.getModel().getCheckWay()); } if (pageWrap.getModel().getCheckUserId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getCheckUserId, pageWrap.getModel().getCheckUserId()); } if (pageWrap.getModel().getQualifiedNum() != null) { queryWrapper.lambda().eq(WorkorderCheck::getQualifiedNum, pageWrap.getModel().getQualifiedNum()); } if (pageWrap.getModel().getUnqualifiedNum() != null) { queryWrapper.lambda().eq(WorkorderCheck::getUnqualifiedNum, pageWrap.getModel().getUnqualifiedNum()); } if (pageWrap.getModel().getCheckScope() != null) { queryWrapper.lambda().eq(WorkorderCheck::getCheckScope, pageWrap.getModel().getCheckScope()); } if (pageWrap.getModel().getCheckDate() != null) { queryWrapper.lambda().ge(WorkorderCheck::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate())); queryWrapper.lambda().le(WorkorderCheck::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate())); } if (pageWrap.getModel().getCheckInfo() != null) { queryWrapper.lambda().eq(WorkorderCheck::getCheckInfo, pageWrap.getModel().getCheckInfo()); } if (pageWrap.getModel().getQualifiedApplianceId() != null) { queryWrapper.lambda().eq(WorkorderCheck::getQualifiedApplianceId, pageWrap.getModel().getQualifiedApplianceId()); } if (pageWrap.getModel().getProUserids() != null) { queryWrapper.lambda().eq(WorkorderCheck::getProUserids, pageWrap.getModel().getProUserids()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(workorderCheckMapper.selectPage(page, queryWrapper)); } @Override public long count(WorkorderCheck workorderCheck) { QueryWrapper wrapper = new QueryWrapper<>(workorderCheck); return workorderCheckMapper.selectCount(wrapper); } @Override @Transactional public ApiResponse insertData(WorkorderCheck wc) { if(wc.getWorkorderId()==null){ return ApiResponse.failed("工单id不能为空"); } if(wc.getAppliancesId()==null){ return ApiResponse.failed("工装id不能为空"); } if(wc.getCheckType()==null){ return ApiResponse.failed("检验类型不能为空!"); } LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); //工单对象 Workorder workorder=workorderExtMapper.selectById(wc.getWorkorderId()); if(workorder==null || workorder.getStatus()==Constants.WORKORDER_STATUS.done||workorder.getStatus()==Constants.WORKORDER_STATUS.baogong ||workorder.getStatus()==Constants.WORKORDER_STATUS.instock ||workorder.getStatus()==Constants.WORKORDER_STATUS.cancel){ return ApiResponse.failed("工单不允许检验"); } if(workorder.getPlanNum()!=null){ Integer unqualifiedNum=wc.getUnqualifiedNum()!=null?wc.getUnqualifiedNum():0; Integer qualifiedNum=wc.getQualifiedNum()!=null?wc.getQualifiedNum():0; Integer num=unqualifiedNum+qualifiedNum; if(num>workorder.getPlanNum()){ return ApiResponse.failed("合格数量加不良数量不能大于计划数量"); } }else{ return ApiResponse.failed("计划数量无数据"); } /* Appliances checkappliance= appliancesServiceImpl.findById(Integer.valueOf(wc.getAppliancesId()));// if(checkappliance!=null&&checkappliance.getNum()!=null){ Integer unqualifiedNum1=wc.getUnqualifiedNum(); Integer qualifiedNum1=wc.getQualifiedNum(); Integer num=unqualifiedNum1+qualifiedNum1; if(num>checkappliance.getNum().intValue()){ return ApiResponse.failed("合格数量加不良数量不能大于篮筐中物料的数量"); } }else{ return ApiResponse.failed("工装不存在"); }*/ if (Constants.equalsInteger(wc.getCheckType() ,Constants.WORKORDER_CHECKTYPE.done)){ //完工检验时先判断 是否存在巡线或者巡检记录不存在不允许完工检验 WorkorderCheck cd=new WorkorderCheck(); cd.setDeleted(Constants.ZERO); cd.setWorkorderId(wc.getWorkorderId()); cd.setRootDepartId(workorder.getRootDepartId()); cd.setDepartId(workorder.getDepartId()); List listcd=this.findList(cd); if(listcd==null || listcd.size() ==0){ return ApiResponse.failed("巡线或者巡检检验记录不存在,不允许完工检验"); } } wc.setMaterialBatch(workorder.getBatch()); wc.setMaterialId(workorder.getMaterialId()); wc.setDeleted(Constants.ZERO); wc.setCreateTime(new Date()); wc.setCreateUser(user.getId()); wc.setRootDepartId(workorder.getRootDepartId()); wc.setDepartId(workorder.getDepartId()); wc.setPlanId(workorder.getPlanId()); // wc.setWorkorderId(); wc.setBatch(workorder.getBatch()); wc.setFactoryId(workorder.getFactoryId()); wc.setProcedureId(workorder.getProcedureId()); wc.setProDeviceId(workorder.getProGroupId()); //wc.setAppliancesId(null); wc.setProDate(workorder.getPlanDate()); // wc.setType(); wc.setNum(workorder.getPlanNum()); //工装对象 if(wc.getQualifiedApplianceId()!=null){ Appliances appliances= appliancesServiceImpl.findById(Integer.valueOf(wc.getQualifiedApplianceId()));// wc.setDoneType(appliances.getType()); if(wc.getUnqualifiedNum()>0&&workorder.getType()==1||workorder.getType()==2){ SystemDictData systemDictData=systemDictDataServiceimpl.findById(appliances.getType()); if(!StringUtils.equals(Constants.APPLIANCES_TYPE_LABLE.scrap,systemDictData.getLabel()) ){ return ApiResponse.failed("当前工单为返工返修--只能选择报废工装"); } } } // wc.setMaterialId(workorder.getMaterialId()); wc.setUnitId(workorder.getUnitId()); wc.setCheckWay(1); wc.setCheckScope(1); wc.setCheckDate(new Date()); wc.setCheckUserId(user.getId()); if(workorder.getProUserId()!=null){ wc.setProUserids("["+workorder.getProUserId()+"]"); } workorder.setUpdateTime(new Date()); //插入编码 wc.setCode(workorderCheckExtService.getNextCode(user.getCompany().getId())); workorderCheckMapper.insert(wc); List whList = new ArrayList<>(); Workorder order = new Workorder(); order.setUpdateTime(DateUtil.getCurrentDate()); order.setUpdateUser(user.getId()); order.setId(workorder.getId()); order.setRootDepartId(workorder.getRootDepartId()); order.setDepartId(workorder.getDepartId()); if(Constants.equalsInteger(wc.getCheckType() ,Constants.WORKORDER_CHECKTYPE.done)){ //已完工 order.setStatus(Constants.WORKORDER_STATUS.done); //工单历史数据 whList.add(WorkorderExtServiceImpl.initHistoryByModel(order,user.getId(),Constants.WORKORDER_HISTORY_STATUS.done)); }else if(Constants.equalsInteger(wc.getCheckType() ,Constants.WORKORDER_CHECKTYPE.check)){ //已检验 order.setStatus(Constants.WORKORDER_STATUS.check); whList.add(WorkorderExtServiceImpl.initHistoryByModel(order,user.getId(),Constants.WORKORDER_HISTORY_STATUS.check)); } workorderExtMapper.updateById(order); if(whList.size()>0){ workorderHistoryExtMapper.insertBatch(whList); } return ApiResponse.success(wc.getId()); } @Override @Transactional public ApiResponse insertDataStandard(WorkorderCheck wc) { if(wc.getWorkorderId()==null){ return ApiResponse.failed("工单id不能为空"); } if(wc.getCheckType()==null){ return ApiResponse.failed("检验类型不能为空!"); } LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); //工单对象 Workorder workorder=workorderExtMapper.selectById(wc.getWorkorderId()); if(workorder==null || workorder.getStatus()==Constants.WORKORDER_STATUS.done||workorder.getStatus()==Constants.WORKORDER_STATUS.baogong ||workorder.getStatus()==Constants.WORKORDER_STATUS.instock ||workorder.getStatus()==Constants.WORKORDER_STATUS.cancel){ return ApiResponse.failed("工单不允许检验"); } if(workorder.getPlanNum()!=null){ Integer unqualifiedNum=wc.getUnqualifiedNum()!=null?wc.getUnqualifiedNum():0; Integer qualifiedNum=wc.getQualifiedNum()!=null?wc.getQualifiedNum():0; Integer num=unqualifiedNum+qualifiedNum; if(num>workorder.getPlanNum()){ return ApiResponse.failed("合格数量加不良数量不能大于计划数量"); } }else{ return ApiResponse.failed("计划数量无数据"); } /* Appliances checkappliance= appliancesServiceImpl.findById(Integer.valueOf(wc.getAppliancesId()));// if(checkappliance!=null&&checkappliance.getNum()!=null){ Integer unqualifiedNum1=wc.getUnqualifiedNum(); Integer qualifiedNum1=wc.getQualifiedNum(); Integer num=unqualifiedNum1+qualifiedNum1; if(num>checkappliance.getNum().intValue()){ return ApiResponse.failed("合格数量加不良数量不能大于篮筐中物料的数量"); } }else{ return ApiResponse.failed("工装不存在"); }*/ if (Constants.equalsInteger(wc.getCheckType() ,Constants.WORKORDER_CHECKTYPE.done)){ //完工检验时先判断 是否存在巡线或者巡检记录不存在不允许完工检验 WorkorderCheck cd=new WorkorderCheck(); cd.setDeleted(Constants.ZERO); cd.setWorkorderId(wc.getWorkorderId()); cd.setRootDepartId(workorder.getRootDepartId()); cd.setDepartId(workorder.getDepartId()); List listcd=this.findList(cd); if(listcd==null || listcd.size() ==0){ return ApiResponse.failed("巡线或者巡检检验记录不存在,不允许完工检验"); } } wc.setMaterialBatch(workorder.getBatch()); wc.setMaterialId(workorder.getMaterialId()); wc.setDeleted(Constants.ZERO); wc.setCreateTime(new Date()); wc.setCreateUser(user.getId()); wc.setRootDepartId(workorder.getRootDepartId()); wc.setDepartId(workorder.getDepartId()); wc.setPlanId(workorder.getPlanId()); // wc.setWorkorderId(); wc.setBatch(workorder.getBatch()); wc.setFactoryId(workorder.getFactoryId()); wc.setProcedureId(workorder.getProcedureId()); wc.setProDeviceId(workorder.getProGroupId()); //wc.setAppliancesId(null); wc.setProDate(workorder.getPlanDate()); // wc.setType(); wc.setNum(workorder.getPlanNum()); //工装对象 if(wc.getQualifiedApplianceId()!=null){ Appliances appliances= appliancesServiceImpl.findById(Integer.valueOf(wc.getQualifiedApplianceId()));// wc.setDoneType(appliances.getType()); if(wc.getUnqualifiedNum()>0&&workorder.getType()==1||workorder.getType()==2){ SystemDictData systemDictData=systemDictDataServiceimpl.findById(appliances.getType()); if(!StringUtils.equals(Constants.APPLIANCES_TYPE_LABLE.scrap,systemDictData.getLabel()) ){ return ApiResponse.failed("当前工单为返工返修--只能选择报废工装"); } } } // wc.setMaterialId(workorder.getMaterialId()); wc.setUnitId(workorder.getUnitId()); wc.setCheckWay(1); wc.setCheckScope(1); wc.setCheckDate(new Date()); wc.setCheckUserId(user.getId()); if(workorder.getProUserId()!=null){ wc.setProUserids("["+workorder.getProUserId()+"]"); } workorder.setUpdateTime(new Date()); //插入编码 wc.setCode(workorderCheckExtService.getNextCode(user.getCompany().getId())); workorderCheckMapper.insert(wc); List whList = new ArrayList<>(); Workorder order = new Workorder(); order.setUpdateTime(DateUtil.getCurrentDate()); order.setUpdateUser(user.getId()); order.setId(workorder.getId()); order.setRootDepartId(workorder.getRootDepartId()); order.setDepartId(workorder.getDepartId()); if(Constants.equalsInteger(wc.getCheckType() ,Constants.WORKORDER_CHECKTYPE.done)){ //已完工 order.setStatus(Constants.WORKORDER_STATUS.done); //工单历史数据 whList.add(WorkorderExtServiceImpl.initHistoryByModel(order,user.getId(),Constants.WORKORDER_HISTORY_STATUS.done)); }else if(Constants.equalsInteger(wc.getCheckType() ,Constants.WORKORDER_CHECKTYPE.check)){ //已检验 order.setStatus(Constants.WORKORDER_STATUS.check); whList.add(WorkorderExtServiceImpl.initHistoryByModel(order,user.getId(),Constants.WORKORDER_HISTORY_STATUS.check)); } workorderExtMapper.updateById(order); if(whList.size()>0){ workorderHistoryExtMapper.insertBatch(whList); } return ApiResponse.success(wc.getId()); } }