| package doumeemes.service.ext.impl; | 
|   | 
| import com.github.pagehelper.PageHelper; | 
| import com.github.pagehelper.PageInfo; | 
| import doumeemes.biz.system.impl.SystemDictDataBizImpl; | 
| import doumeemes.core.exception.BusinessException; | 
| 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.excel.EasyExcelUtil; | 
| import doumeemes.core.utils.redis.RedisUtil; | 
| import doumeemes.dao.business.model.*; | 
| import doumeemes.dao.ext.AppliancesExtMapper; | 
| import doumeemes.dao.ext.dto.QueryAppliancesByManualDTO; | 
| import doumeemes.dao.ext.dto.QueryAppliancesExtDTO; | 
| import doumeemes.dao.ext.vo.AppliancesExtListVO; | 
| import doumeemes.dao.ext.vo.CategoryExtListVO; | 
| import doumeemes.dao.system.model.SystemDictData; | 
| import doumeemes.service.business.AppliancesService; | 
| import doumeemes.service.business.BarcodeParamService; | 
| import doumeemes.service.business.impl.*; | 
| import doumeemes.service.ext.AppliancesExtService; | 
| 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.data.redis.core.RedisTemplate; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.web.multipart.MultipartFile; | 
|   | 
| import java.math.BigDecimal; | 
| import java.util.ArrayList; | 
| import java.util.Date; | 
| import java.util.List; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * 工装器具信息Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2022/04/20 11:01 | 
|  */ | 
| @Service | 
| public class AppliancesExtServiceImpl implements AppliancesExtService { | 
|   | 
|   | 
|     @Autowired | 
|     private RedisTemplate<String, Object> redisTemplate; | 
|     @Autowired | 
|     private AppliancesExtMapper appliancesExtMapper; | 
|   | 
|   | 
|     @Autowired | 
|     private AppliancesService appliancesService; | 
|   | 
|     @Autowired | 
|     private BarcodeParamService barcodeParamService; | 
|     @Autowired | 
|     private SystemDictDataBizImpl systemDictDataBizimpl; | 
|     @Autowired | 
|     private AppliancesServiceImpl appliancesServiceimpl; | 
|     @Autowired | 
|     private WorkorderServiceImpl workorderServiceimpl; | 
|   | 
|     @Autowired | 
|     private WorkorderRecordServiceImpl workorderRecordServiceimpl; | 
|     @Autowired | 
|     private SystemDictDataServiceImpl systemDictDataServiceimpl; | 
|     @Autowired | 
|     private ApplianceChangeServiceImpl applianceChangeServiceimpl; | 
|     @Autowired | 
|     private ApplianceChangeDetialServiceImpl applianceChangeDetialServiceimpl; | 
|   | 
|     @Override | 
|     public PageData<AppliancesExtListVO> findPage(PageWrap<QueryAppliancesExtDTO> pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.getModel().setDeleted(Constants.ZERO); | 
|         pageWrap.getModel().setRootDepartId(user.getRootDepartment().getRootId()); | 
|         pageWrap.getModel().setDepartId(user.getCurComDepartment().getId()); | 
|   | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         List<AppliancesExtListVO> result = appliancesExtMapper.selectListByCondition(pageWrap.getModel()); | 
|         List<CategoryExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_CATEGORY_KEY+user.getCompany().getId(), ArrayList.class); | 
|   | 
|         for(int i=0;i<result.size();i++){ | 
|             AppliancesExtListVO appliancesExtListVO=result.get(i); | 
|             for(int j=0;j<clist.size();j++){ | 
|                 CategoryExtListVO categoryExtListVO=clist.get(j); | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateBigId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateBigId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1BigName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateMiddleId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateMiddleId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1MiddleName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateSmallId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateSmallId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1SmallName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|             } | 
|         } | 
|   | 
|         return PageData.from(new PageInfo<>(result)); | 
|     } | 
|   | 
|     @Override | 
|     public AppliancesExtListVO findMaxSerial(QueryAppliancesExtDTO pageWrap) { | 
|         AppliancesExtListVO result = appliancesExtMapper.findMaxSerial(pageWrap); | 
|         return result; | 
|     } | 
|   | 
|   | 
|     @Override | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     public ApiResponse importExcel(MultipartFile file, String categoryId) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         //获取二维码规则 | 
|         BarcodeParam queryparam=new BarcodeParam(); | 
|         queryparam.setDepartId(user.getCurComDepartment().getId()); | 
|         queryparam.setRootDepartId(user.getRootDepartment().getId()); | 
|         queryparam.setType(Constants.BARCODEPARAM_TYPE.appliance); | 
|         BarcodeParam barcodeParam =barcodeParamService.findOne(queryparam); | 
|         if(barcodeParam==null){ | 
|             return ApiResponse.failed("请先完善二维码篮筐配置"); | 
|         } | 
|   | 
|         List<Appliances> alllist = EasyExcelUtil.importExcel(file, 1, 1, Appliances.class); | 
|        // List<Appliances> alllist = ExcelExporter.build(Appliances.class).readExcel(null, Appliances.class, file); | 
|         if(StringUtils.isEmpty(categoryId)){ | 
|             return ApiResponse.failed("工装类型不能为空"); | 
|         } | 
|         //查询编码是否存在 | 
|         try{ | 
|             for(int i=0;i<alllist.size();i++){ | 
|                 Appliances chriApp=alllist.get(i); | 
|                 if(StringUtils.isEmpty(chriApp.getCode())){ | 
|                    throw new RuntimeException("编码不能为空"); | 
|                 } | 
|   | 
|                 if(StringUtils.isEmpty(chriApp.getTypeName())){ | 
|                     throw new RuntimeException("工装属性不能为空"); | 
|                 } | 
|   | 
|                 List<SystemDictData> dicList=  systemDictDataBizimpl.queryDataByCode("SYSTEM_APPLIANCE_TYPE",chriApp.getTypeName()); | 
|   | 
|                 if(dicList==null||dicList.size()<=0){ | 
|                     throw new RuntimeException("工装属性不存在"); | 
|                 } | 
|   | 
|                 Appliances query1=new Appliances(); | 
|                 query1.setDeleted(Constants.ZERO); | 
|                // query1.setCategoryId(Integer.valueOf(categoryId)); | 
|                 query1.setDepartId(user.getCurComDepartment().getId()); | 
|                 query1.setRootDepartId(user.getRootDepartment().getId()); | 
|                 query1.setCode(chriApp.getCode()); | 
|                 List<Appliances> queryData1=  appliancesService.findList(query1); | 
|                 if(queryData1.size()>0){ | 
|                     throw new RuntimeException(chriApp.getCode()+"编码已存在,不允许插入"); | 
|                 } | 
|   | 
|                 //获取工装属性 | 
|                 Appliances appliances=new Appliances(); | 
|                 appliances.setBrcode(barcodeParam.getId()); | 
|                 appliances.setDeleted(Constants.ZERO); | 
|                 appliances.setDepartId(user.getCurComDepartment().getId()); | 
|                 appliances.setRootDepartId(user.getRootDepartment().getId()); | 
|                 appliances.setCreateUser(user.getId()); | 
|                 appliances.setCreateTime(new Date()); | 
|                 appliances.setStatus(Constants.APPLIANCES_STATUS.empty); | 
|                 appliances.setCategoryId(Integer.valueOf(categoryId)); | 
|                 appliances.setType(dicList.get(0).getId()); | 
|                 appliances.setCode(chriApp.getCode()); | 
|               //  appliances.setCategoryId(Integer.valueOf(categoryId)); | 
|                 appliancesService.insertDate(appliances); | 
|             } | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|             return ApiResponse.failed(e.getMessage()); | 
|         } | 
|         return ApiResponse.success(null); | 
|     } | 
|   | 
|     @Override | 
|     public List<AppliancesExtListVO> selectListByCondition(QueryAppliancesExtDTO pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.setDeleted(Constants.ZERO); | 
|         pageWrap.setRootDepartId(user.getRootDepartment().getRootId()); | 
|         pageWrap.setDepartId(user.getCurComDepartment().getId()); | 
|         List<AppliancesExtListVO> result = appliancesExtMapper.selectListByCondition(pageWrap); | 
|         List<CategoryExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_CATEGORY_KEY+user.getCompany().getId(), ArrayList.class); | 
|   | 
|         for(int i=0;i<result.size();i++){ | 
|             AppliancesExtListVO appliancesExtListVO=result.get(i); | 
|             for(int j=0;j<clist.size();j++){ | 
|                 CategoryExtListVO categoryExtListVO=clist.get(j); | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateBigId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateBigId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1BigName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateMiddleId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateMiddleId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1MiddleName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateSmallId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateSmallId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1SmallName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|             } | 
|         } | 
|   | 
|         return result; | 
|     } | 
|   | 
|   | 
|   | 
|     @Override | 
|     public ApiResponse<List<AppliancesExtListVO>> getApplianceListByCondition(QueryAppliancesExtDTO pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.setDeleted(Constants.ZERO); | 
|         pageWrap.setRootDepartId(user.getRootDepartment().getRootId()); | 
|         pageWrap.setDepartId(user.getCurComDepartment().getId()); | 
|         List<AppliancesExtListVO> result = appliancesExtMapper.selectListByCondition(pageWrap);//第一个旧篮筐 | 
|   | 
|         List<CategoryExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_CATEGORY_KEY+user.getCompany().getId(), ArrayList.class); | 
|   | 
|         for(int i=0;i<result.size();i++){ | 
|             AppliancesExtListVO appliancesExtListVO=result.get(i); | 
|             for(int j=0;j<clist.size();j++){ | 
|                 CategoryExtListVO categoryExtListVO=clist.get(j); | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateBigId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateBigId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1BigName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateMiddleId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateMiddleId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1MiddleName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(appliancesExtListVO.getCumodelCateSmallId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(appliancesExtListVO.getCumodelCateSmallId()),categoryExtListVO.getId())){ | 
|                         appliancesExtListVO.setCmodel1SmallName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|             } | 
|         } | 
|   | 
|   | 
|   | 
|         return ApiResponse.success(result); | 
|     } | 
|   | 
|   | 
|     @Override | 
|     @Transactional | 
|     public  ApiResponse chageApplicance(Integer oldId, Integer newId) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         Appliances result = appliancesServiceimpl.findById(oldId);//旧篮筐 | 
|         if(result!=null&&result.getStatus()!=0&&result.getStatus()!=1){ | 
|             Appliances result1 = appliancesServiceimpl.findById(newId);//新篮筐 | 
|             if(result1!=null&&result1.getStatus()==1){ | 
|                 if(result.getType()!=result1.getType()){ | 
|                     return ApiResponse.failed("工装属性不相同,请检查后再试"); | 
|                 } | 
|                 result1.setValidTime(result.getValidTime()); | 
|                 result1.setStatus(result.getStatus()); | 
|                 result1.setWorkorderId(result.getWorkorderId()); | 
|                 result1.setMaterialId(result.getMaterialId()); | 
|                 result1.setNum(result.getNum()); | 
|                 result1.setPositionType(result.getPositionType()); | 
|                 result1.setWarehouseId(result.getWarehouseId()); | 
|                 result1.setLocationId(result.getLocationId()); | 
|                 result1.setProcedureId(result.getProcedureId()); | 
|                 result1.setCurObjId(result.getCurObjId()); | 
|                 result1.setCurObjType(result.getCurObjType()); | 
|                 appliancesServiceimpl.updateById(result1); | 
|   | 
|                 result1.setValidTime(null); | 
|                 result.setStatus(Constants.ONE); | 
|                 result.setWorkorderId(null); | 
|                 result.setMaterialId(null); | 
|                 result.setNum(new BigDecimal(Constants.ZERO)); | 
|                 result.setPositionType(null); | 
|                 result.setWarehouseId(null); | 
|                 result.setLocationId(null); | 
|                 result.setProcedureId(null); | 
|                 result.setCurObjId(null); | 
|                 result.setCurObjType(null); | 
|                 appliancesServiceimpl.updateById(result); | 
|             }else{ | 
|                 return ApiResponse.failed("工装不为空,请从新扫描"); | 
|             } | 
|         }else{ | 
|             return ApiResponse.failed("旧工装不可用"); | 
|         } | 
|         return ApiResponse.success(null); | 
|     } | 
|   | 
|   | 
|   | 
|     @Override | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     public  ApiResponse chageApplicance(QueryAppliancesExtDTO query) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         BigDecimal oldnum= new BigDecimal(0); | 
|         BigDecimal newnum= new BigDecimal(0); | 
|         Integer type=null; | 
|         Integer workorderId=null; | 
|         Boolean workorderBoo=true;//标识旧篮筐是否是同一工单 | 
|         if(query.getOldList()!=null&&query.getOldList().size()>0){ | 
|            for(int i=0;i<query.getOldList().size();i++){ | 
|                Appliances data=query.getOldList().get(i); | 
|                Appliances app=   appliancesService.findById(data.getId()); | 
|                if(i==0){ | 
|                    type=app.getType(); | 
|                    workorderId=app.getWorkorderId(); | 
|                } | 
|                if(!Constants.equalsInteger(app.getType(),type)){ | 
|                    return ApiResponse.failed(app.getCode()+":新旧篮筐篮筐属性不相同,不允许更换"); | 
|                } | 
|                if(app.getWarehouseId()==null){ | 
|                    return ApiResponse.failed(app.getCode()+":旧工装不在仓库不允许更换"); | 
|                } | 
|                if(Constants.equalsInteger(app.getStatus(),0)||Constants.equalsInteger(app.getStatus(),1)){ | 
|                    return ApiResponse.failed(app.getCode()+":旧篮筐报废或空时,不允许更换"); | 
|                } | 
|                if(!Constants.equalsInteger(app.getRootDepartId(),user.getRootDepartment().getId())){ | 
|                    return ApiResponse.failed(app.getCode()+":非当前组织下篮筐不允许更换"); | 
|                } | 
|                if(!Constants.equalsInteger(app.getDepartId(),user.getCurComDepartment().getId())){ | 
|                    return ApiResponse.failed(app.getCode()+":非当前组织下篮筐不允许更换"); | 
|                } | 
|                oldnum=oldnum.add(app.getNum()); | 
|   | 
|                if( !pdworkorder(app.getWorkorderId(),app.getId(),user)){ | 
|                    return ApiResponse.failed("工装["+app.getCode()+"]有生产记录,当前无法进行更换;"); | 
|                } | 
|   | 
|                SystemDictData systemDictData=   systemDictDataServiceimpl.findById(app.getType()); | 
|                if(StringUtils.equals(systemDictData.getLabel(),"APPLIANCE_USELESS")){ | 
|                    //报废 | 
|                    if(!oldlkBF(query.getOldList())){ | 
|                        return ApiResponse.failed("旧工装["+app.getCode()+"]属性为报废,更换时,需要旧篮筐的物料编码、最近加工工序、批次号、仓库、库位都相同,才能一起更换"); | 
|                    } | 
|                }else{ | 
|                    //非报废 | 
|                    if(!oldlkFBF(query.getOldList())){ | 
|                        return ApiResponse.failed("旧工装["+app.getCode()+"]属性为非报废,更换时,需要旧篮筐的物料编码、批次号、质量属性、最近加工工序、返工返修工序、申请单编号(返工返修/报废申请)、客返单号、仓库、库位都相同,才能一起更换"); | 
|                    } | 
|                } | 
|   | 
|                if(!Constants.equalsInteger(workorderId,app.getWorkorderId())){ | 
|                    workorderBoo=false; | 
|                } | 
|            } | 
|         }else{ | 
|             return ApiResponse.failed("旧工装不能为空"); | 
|         } | 
|   | 
|   | 
|         if(query.getNewList()!=null&&query.getNewList().size()>0){ | 
|             for(int j=0;j<query.getNewList().size();j++){ | 
|                 Appliances data=query.getNewList().get(j); | 
|                 Appliances app1=   appliancesService.findById(data.getId()); | 
|   | 
|   | 
|                 Boolean compareNewOrOld=true; | 
|                 //新篮筐里面可以包含旧篮筐 | 
|                 for(int o=0;o<query.getOldList().size();o++) { | 
|                     Appliances comparolddata = query.getOldList().get(o); | 
|                     Appliances comparoldapp1=   appliancesService.findById(comparolddata.getId()); | 
|                     if(Constants.equalsInteger(comparoldapp1.getId(),app1.getId())){ | 
|                         compareNewOrOld=false; | 
|                     } | 
|                 } | 
|                 if(compareNewOrOld){ | 
|                     if(!Constants.equalsInteger(app1.getStatus(),1)){ | 
|                         return ApiResponse.failed(app1.getCode()+":新篮筐为非空篮筐不允许更换"); | 
|                     } | 
|                 } | 
|   | 
|                 if(!Constants.equalsInteger(app1.getRootDepartId(),user.getRootDepartment().getId())){ | 
|                     return ApiResponse.failed(app1.getCode()+":非当前组织下篮筐不允许更换"); | 
|                 } | 
|                 if(!Constants.equalsInteger(app1.getDepartId(),user.getCurComDepartment().getId())){ | 
|                     return ApiResponse.failed(app1.getCode()+":非当前组织下篮筐不允许更换"); | 
|                 } | 
|                 newnum=newnum.add(data.getNum()); | 
|   | 
|                if( !pdworkorder(app1.getWorkorderId(),app1.getId(),user)){ | 
|                    return ApiResponse.failed("工装["+app1.getCode()+"]有生产记录,当前无法进行更换;"); | 
|                } | 
|   | 
|                 if(!Constants.equalsInteger(app1.getType(),type)){ | 
|                     return ApiResponse.failed(app1.getCode()+":新旧篮筐篮筐属性不相同,不允许更换"); | 
|                 } | 
|             } | 
|         }else{ | 
|             return ApiResponse.failed("新工装不能为空"); | 
|         } | 
|   | 
|         if(newnum.compareTo(oldnum)!=0){ | 
|             return ApiResponse.failed("新篮筐中物料总数量不等于旧篮筐中物料总数量"); | 
|         } | 
|   | 
|   | 
|         Appliances olddata=   appliancesService.findById(query.getOldList().get(0).getId()); | 
|         //添加更换单记录表 | 
|        Integer acid= insertApplianceChange(olddata,user); | 
|   | 
|   | 
|        List<Appliances> newappliancelist=new ArrayList<>(); | 
|         List<Appliances> oldappliancelist=new ArrayList<>(); | 
|   | 
|         //查询新篮筐中的数据是否重复 | 
|         Boolean newappliancerepeat=checkRepeatNewApplianceOrNo(query.getNewList()); | 
|         if(newappliancerepeat){ | 
|             return ApiResponse.failed("新工装重复扫描,更换失败!"); | 
|         } | 
|         for(int z=0;z<query.getNewList().size();z++){ | 
|             Appliances data=query.getNewList().get(z); | 
|             Appliances app=   appliancesService.findById(data.getId()); | 
|             app.setStatus(Constants.APPLIANCES_STATUS.full); | 
|             app.setUpdateTime(new Date()); | 
|             app.setUpdateUser(user.getId()); | 
|             SystemDictData systemDictData=   systemDictDataServiceimpl.findById(olddata.getType()); | 
|             if(StringUtils.equals(systemDictData.getLabel(),"APPLIANCE_USELESS")){ | 
|              //报废 | 
|   | 
|   | 
|             }else{ | 
|                 //非报废 | 
|                 app.setNextProcedureId(olddata.getNextProcedureId()); | 
|                 app.setBackProcedureId(olddata.getBackProcedureId()); | 
|                 app.setBackorderId(olddata.getBackorderId()); | 
|                 app.setSaleorderId(olddata.getSaleorderId()); | 
|             } | 
|   | 
|             if(workorderBoo){ | 
|                 //相同的workorderid | 
|                 app.setWorkorderId(olddata.getWorkorderId()); | 
|                 app.setRelobjType(0); | 
|             }else{ | 
|                 //不相同的workorderid | 
|                 app.setWorkorderId(acid); | 
|                 app.setRelobjType(1); | 
|   | 
|             } | 
|   | 
|             if(query.getOldList()!=null&&query.getOldList().size()==1){ | 
|                 app.setWorkorderId(olddata.getWorkorderId()); | 
|                 app.setRelobjType(olddata.getRelobjType()); | 
|             } | 
|   | 
|             app.setMaterialId(olddata.getMaterialId()); | 
|             app.setNum(data.getNum()); | 
|             app.setPositionType(olddata.getPositionType()); | 
|             app.setWarehouseId(olddata.getWarehouseId()); | 
|             app.setLocationId(olddata.getLocationId()); | 
|             app.setProcedureId(olddata.getProcedureId()); | 
|             app.setBatch(olddata.getBatch()); | 
|             app.setQualityType(olddata.getQualityType()); | 
|             newappliancelist.add(app); | 
|            // appliancesService.updateById(app); | 
|             //更换单详情记录表 | 
|             insertApplianceChangedetail( app, user, 1, acid ); | 
|         } | 
|   | 
|   | 
|         for(int h=0;h<query.getOldList().size();h++){ | 
|             Appliances data=query.getOldList().get(h); | 
|             Appliances result=   appliancesService.findById(data.getId()); | 
|   | 
|             Boolean cmpar=true; | 
|             insertApplianceChangedetail( result, user, 0, acid ); | 
|             if(query.getNewList().size()>0){ | 
|                 for(int newi=0;newi<query.getNewList().size();newi++){ | 
|                     Appliances newcom=query.getNewList().get(newi); | 
|                     //新篮筐包含旧篮筐,旧篮筐中的数据不需要清空 | 
|                     if(Constants.equalsInteger(newcom.getId(),result.getId())){ | 
|                         cmpar =false; | 
|                         break; | 
|                     } | 
|   | 
|                 } | 
|             } | 
|             if(cmpar){ | 
|                 result.setStatus(Constants.ONE); | 
|                 result.setWorkorderId(null); | 
|                 result.setMaterialId(null); | 
|                 result.setNum(new BigDecimal(Constants.ZERO)); | 
|                 result.setPositionType(null); | 
|                 result.setWarehouseId(null); | 
|                 result.setLocationId(null); | 
|                 result.setProcedureId(null); | 
|                 result.setCurObjId(null); | 
|                 result.setCurObjType(null); | 
|                 //  result.setCategoryId(null); | 
|                 result.setBatch(null); | 
|                 result.setQualityType(null); | 
|                 result.setBackorderId(null); | 
|                 result.setSaleorderId(null); | 
|                 result.setBackProcedureId(null); | 
|                 result.setNextProcedureId(null); | 
|                 result.setRelobjType(null); | 
|                 oldappliancelist.add(result); | 
|                // appliancesExtMapper.editById(result); | 
|             } | 
|   | 
|   | 
|         } | 
|   | 
|   | 
|   | 
|         if(oldappliancelist.size()>0){ | 
|             for(int n=0;n<oldappliancelist.size();n++){ | 
|                 Appliances app=oldappliancelist.get(n); | 
|                 appliancesExtMapper.editById(app); | 
|             } | 
|         } | 
|   | 
|         if(newappliancelist.size()>0){ | 
|             for(int n=0;n<newappliancelist.size();n++){ | 
|                 Appliances app=newappliancelist.get(n); | 
|                 appliancesService.updateById(app); | 
|             } | 
|   | 
|         } | 
|   | 
|   | 
|   | 
|   | 
|   | 
|   | 
|   | 
|         return ApiResponse.success(null); | 
|     } | 
|   | 
|     /** | 
|      * 如果新篮筐/旧篮筐在工单(未报工状态,包括:已创建、已备料、已检验、已完工)上有投料或报工记录, | 
|      * 无法更换;需要提示:工装[LK0001]有生产记录,当前无法进行更换; | 
|      * @param workorderId | 
|      * @return | 
|      */ | 
|     public boolean pdworkorder(Integer workorderId,Integer appliancesId,LoginUserInfo user){ | 
|   | 
|        /* WorkorderRecord workorderRecord=new WorkorderRecord(); | 
|         workorderRecord.setDeleted(Constants.ZERO); | 
|         workorderRecord.setWorkorderId(workorderId); | 
|         workorderRecord.setRootDepartId(user.getRootDepartment().getId()); | 
|         workorderRecord.setDepartId(user.getCurComDepartment().getId()); | 
|         List<WorkorderRecord> workrecordList=  workorderRecordServiceimpl.findList(workorderRecord); | 
|   | 
|         Workorder workorder= workorderServiceimpl.findById(workorderId); | 
|         if(workorder!=null&&(Constants.equalsInteger(workorder.getStatus(),Constants.WORKORDER_STATUS.create) | 
|                 ||Constants.equalsInteger(workorder.getStatus(),Constants.WORKORDER_STATUS.material) | 
|                 ||Constants.equalsInteger(workorder.getStatus(),Constants.WORKORDER_STATUS.done) | 
|                 ||Constants.equalsInteger(workorder.getStatus(),Constants.WORKORDER_STATUS.check))){ | 
|             if(workrecordList!=null&&workrecordList.size()>0){ | 
|                 return false; | 
|             } | 
|         }else{ | 
|             return true ;//工单不存在直接跳过判断逻辑 | 
|         } | 
| */ | 
|   | 
|         //根据appliance id 查询当前声生产记录里面包含的工单workorderid   的状态是否包含已创建、已备料、已检验、已完工 | 
|         WorkorderRecord wr=new WorkorderRecord(); | 
|         wr.setDeleted(Constants.ZERO); | 
|         wr.setAppliancesId(appliancesId); | 
|         wr.setRootDepartId(user.getRootDepartment().getId()); | 
|         wr.setDepartId(user.getCurComDepartment().getId()); | 
|        // wr.setType(1);//产出 | 
|         List<WorkorderRecord> worList=  workorderRecordServiceimpl.findList(wr); | 
|         if(worList!=null&&worList.size()>0){ | 
|             for(int i=0;i<worList.size();i++){ | 
|                 WorkorderRecord wrresult=worList.get(i); | 
|                 Workorder woresult= workorderServiceimpl.findById(wrresult.getWorkorderId()); | 
|                 if(woresult!=null){ | 
|                     if(Constants.equalsInteger(woresult.getStatus(),Constants.WORKORDER_STATUS.create) | 
|                             ||Constants.equalsInteger(woresult.getStatus(),Constants.WORKORDER_STATUS.material) | 
|                             ||Constants.equalsInteger(woresult.getStatus(),Constants.WORKORDER_STATUS.done) | 
|                             ||Constants.equalsInteger(woresult.getStatus(),Constants.WORKORDER_STATUS.check)){ | 
|                       return false; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         return true ; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 旧篮筐属性为报废,更换时,需要旧篮筐的物料编码、最近加工工序、批次号、仓库、库位都相同,才能一起更换; | 
|      * @param oldlist | 
|      * @return | 
|      */ | 
|     public boolean oldlkBF(List<Appliances> oldlist){ | 
|         if(oldlist!=null&&oldlist.size()>0) { | 
|             Integer materialId=null; | 
|             Integer nextProcedureId=null; | 
|             String batch=""; | 
|             Integer warehouseId=null; | 
|             Integer locationId=null; | 
|             for (int i = 0; i < oldlist.size(); i++) { | 
|                 Appliances data = oldlist.get(i); | 
|                 Appliances app = appliancesService.findById(data.getId()); | 
|                 if(i==0){ | 
|                     materialId= app.getMaterialId(); | 
|                     nextProcedureId=app.getNextProcedureId(); | 
|                     batch=app.getBatch(); | 
|                     warehouseId=app.getWarehouseId(); | 
|                     locationId=app.getLocationId(); | 
|                 }else{ | 
|                     if(Constants.equalsInteger(app.getMaterialId(),materialId) | 
|                     &&Constants.equalsInteger(app.getNextProcedureId(),nextProcedureId) | 
|                     &&StringUtils.equals(app.getBatch(),batch) | 
|                     &&Constants.equalsInteger(app.getWarehouseId(),warehouseId) | 
|                     &&Constants.equalsInteger(app.getLocationId(),locationId)){ | 
|   | 
|                     }else{ | 
|                         return false; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         return true; | 
|     } | 
|   | 
|     /** | 
|      * 如果旧篮筐属性非报废,更换时,需要旧篮筐的物料编码、批次号、质量属性、最近加工工序、返工返修工序、申请单编号(返工返修/报废申请)、客返单号、仓库、库位都相同,才能一起更换; | 
|      * @param oldlist | 
|      * @return | 
|      */ | 
|     public boolean oldlkFBF(List<Appliances> oldlist){ | 
|         if(oldlist!=null&&oldlist.size()>0) { | 
|             Integer materialId=null; | 
|             String batch=""; | 
|             Integer qualityType=null; | 
|             Integer nextProcedureId=null; | 
|   | 
|             Integer backProcedureId=null; | 
|             Integer backorderId=null; | 
|             Integer saleOrderId=null; | 
|             Integer warehouseId=null; | 
|             Integer locationId=null; | 
|             for (int i = 0; i < oldlist.size(); i++) { | 
|                 Appliances data = oldlist.get(i); | 
|                 Appliances app = appliancesService.findById(data.getId()); | 
|                 if(i==0){ | 
|                     materialId= app.getMaterialId(); | 
|                     nextProcedureId=app.getNextProcedureId(); | 
|                     batch=app.getBatch(); | 
|                     warehouseId=app.getWarehouseId(); | 
|                     locationId=app.getLocationId(); | 
|                     qualityType=app.getQualityType(); | 
|                     backProcedureId= app.getBackProcedureId(); | 
|                     backorderId=app.getBackorderId(); | 
|                     saleOrderId=app.getSaleorderId(); | 
|                 }else{ | 
|                     if(Constants.equalsInteger(app.getMaterialId(),materialId) | 
|                             &&Constants.equalsInteger(app.getNextProcedureId(),nextProcedureId) | 
|                             &&StringUtils.equals(app.getBatch(),batch) | 
|                             &&Constants.equalsInteger(app.getWarehouseId(),warehouseId) | 
|                             &&Constants.equalsInteger(app.getLocationId(),locationId) | 
|                             &&Constants.equalsInteger(app.getQualityType(),qualityType) | 
|                             &&Constants.equalsInteger(app.getBackProcedureId(),backProcedureId) | 
|                             &&Constants.equalsInteger(app.getBackorderId(),backorderId) | 
|                             &&Constants.equalsInteger(app.getSaleorderId(),saleOrderId)){ | 
|   | 
|                     }else{ | 
|                         return false; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         return true; | 
|     } | 
|   | 
|   | 
|     //查詢新籃筐中的数据是否重复 | 
|     private Boolean checkRepeatNewApplianceOrNo(List<Appliances> list ) { | 
|         if(list!=null&&list.size()>1){ | 
|             List<Integer> collect1 = list.stream().map(Appliances::getId).distinct().collect(Collectors.toList()); | 
|             if(collect1.size()!=list.size()){ | 
|                 return true; | 
|             }else{ | 
|                 return false; | 
|             } | 
|         }else { | 
|             return false; | 
|         } | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 新增更换单记录 | 
|      * @param olddata | 
|      * @param user | 
|      * @return | 
|      */ | 
|     public Integer insertApplianceChange(Appliances olddata,LoginUserInfo user){ | 
|         ApplianceChange applianceChange=new ApplianceChange(); | 
|         applianceChange.setDeleted(Constants.ZERO); | 
|         applianceChange.setCreateTime(new Date()); | 
|         applianceChange.setCreateUser(user.getId()); | 
|         applianceChange.setRootDepartId(user.getRootDepartment().getId()); | 
|         applianceChange.setDepartId(user.getCurComDepartment().getId()); | 
|         applianceChange.setType(olddata.getType()); | 
|         applianceChange.setWarehouseId(olddata.getWarehouseId()); | 
|         applianceChange.setLocationId(olddata.getLocationId()); | 
|         applianceChange.setProcedureId(olddata.getProcedureId()); | 
|         applianceChange.setSaleorderId(olddata.getSaleorderId()); | 
|         applianceChange.setBackProcedureId(olddata.getBackProcedureId()); | 
|         applianceChange.setMaterialId(olddata.getMaterialId()+""); | 
|         applianceChange.setBatch(olddata.getBatch()); | 
|         String code=applianceChangeServiceimpl.getNextCode(user.getCompany().getId()); | 
|         applianceChange.setCode(code); | 
|         return applianceChangeServiceimpl.create(applianceChange); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 工单记录详情添加 | 
|      * mark 标记新篮筐1,0旧篮筐 | 
|      * @param appliances | 
|      * @param user | 
|      * @param mark | 
|      * @return | 
|      */ | 
|   | 
|     public Integer insertApplianceChangedetail(Appliances appliances,LoginUserInfo user,Integer mark,Integer changeid ){ | 
|         ApplianceChangeDetial applianceChangedetail=new ApplianceChangeDetial(); | 
|         applianceChangedetail.setDeleted(Constants.ZERO); | 
|         applianceChangedetail.setCreateTime(new Date()); | 
|         applianceChangedetail.setCreateUser(user.getId()); | 
|         applianceChangedetail.setRootDepartId(user.getRootDepartment().getId()); | 
|         applianceChangedetail.setDepartId(user.getCurComDepartment().getId()); | 
|         applianceChangedetail.setApplianceId(appliances.getId()); | 
|         applianceChangedetail.setType(mark); | 
|         applianceChangedetail.setMaterialId(appliances.getMaterialId()+""); | 
|         applianceChangedetail.setBatch(appliances.getBatch()); | 
|         applianceChangedetail.setNum(appliances.getNum().intValue()); | 
|         applianceChangedetail.setWorkorderId(appliances.getWorkorderId()); | 
|         applianceChangedetail.setRelobjType(appliances.getRelobjType()); | 
|         applianceChangedetail.setChaneId(changeid); | 
|         return applianceChangeDetialServiceimpl.create(applianceChangedetail); | 
|     } | 
|   | 
|   | 
|   | 
|     @Override | 
|     public PageData<AppliancesExtListVO> findListPageForManual(PageWrap<QueryAppliancesByManualDTO> pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.getModel().setRootDepartId(user.getRootDepartment().getRootId()); | 
|         pageWrap.getModel().setDepartId(user.getCurComDepartment().getId()); | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         List<AppliancesExtListVO> result = appliancesExtMapper.findListPageForManual(pageWrap.getModel()); | 
|         return PageData.from(new PageInfo<>(result)); | 
|     } | 
|   | 
|   | 
| } |