| package doumeemes.service.ext.impl; | 
|   | 
| 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.excel.EasyExcelUtil; | 
| import doumeemes.core.utils.redis.RedisUtil; | 
| import doumeemes.dao.business.MaterialMapper; | 
| import doumeemes.dao.business.dto.QueryUnitExtDTO; | 
| import doumeemes.dao.business.model.BarcodeParam; | 
| import doumeemes.dao.business.model.Material; | 
| import doumeemes.dao.business.vo.UnitExtListVO; | 
| import doumeemes.dao.ext.MaterialExtMapper; | 
| import doumeemes.dao.ext.bean.MaterialDetailBean; | 
| import doumeemes.dao.ext.dto.QueryCategoryUnionExtDTO; | 
| import doumeemes.dao.ext.dto.QueryMaterialDistributeExtDTO; | 
| import doumeemes.dao.ext.dto.QueryMaterialExtDTO; | 
| import doumeemes.dao.ext.vo.CategoryExtListVO; | 
| import doumeemes.dao.ext.vo.CategoryUnionExtListVO; | 
| import doumeemes.dao.ext.vo.MaterialDistributeExtListVO; | 
| import doumeemes.dao.ext.vo.MaterialExtListVO; | 
| import doumeemes.service.business.BarcodeParamService; | 
| import doumeemes.service.business.UnitExtService; | 
| import doumeemes.service.business.impl.MaterialDistributeServiceImpl; | 
| import doumeemes.service.business.impl.MaterialServiceImpl; | 
| import doumeemes.service.ext.CategoryUnionExtService; | 
| import doumeemes.service.ext.MaterialDistributeExtService; | 
| import doumeemes.service.ext.MaterialExtService; | 
| 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.util.*; | 
|   | 
| /** | 
|  * 物料基本信息Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2022/04/20 10:59 | 
|  */ | 
| @Service | 
| public class MaterialExtServiceImpl implements MaterialExtService { | 
|   | 
|     @Autowired | 
|     private MaterialExtMapper materialExtMapper; | 
|   | 
|     @Autowired | 
|     private RedisTemplate<String, Object> redisTemplate; | 
|   | 
|   | 
|     @Autowired | 
|     private MaterialDistributeExtService materialDistributeExtService; | 
|     @Autowired | 
|     private MaterialServiceImpl materialServiceimpl; | 
|   | 
|     @Autowired | 
|     private MaterialMapper materialMapper; | 
|   | 
|     @Autowired | 
|     private MaterialDistributeServiceImpl materialDistributeServiceimpl; | 
|   | 
|     @Autowired | 
|     private UnitExtService unitExtService; | 
|   | 
|     @Autowired | 
|     private CategoryUnionExtService categoryUnionExtService; | 
|   | 
|   | 
|     @Autowired | 
|     private BarcodeParamService barcodeParamService; | 
|   | 
|   | 
|     @Override | 
|     public PageData<MaterialExtListVO> findPage(PageWrap<QueryMaterialExtDTO> pageWrap) { | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|   | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.getModel().setDeleted(Constants.ZERO); | 
|         pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); | 
|   | 
|         List<MaterialExtListVO> result = materialExtMapper.getListByCondition(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++){ | 
|             MaterialExtListVO materialExtListVO=result.get(i); | 
|             for(int j=0;j<clist.size();j++){ | 
|                 CategoryExtListVO categoryExtListVO=clist.get(j); | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCumodelCateBigId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(materialExtListVO.getCumodelCateBigId()),categoryExtListVO.getId())){ | 
|                         materialExtListVO.setCmodelName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCumodelCateMiddleId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(materialExtListVO.getCumodelCateMiddleId()),categoryExtListVO.getId())){ | 
|                         materialExtListVO.setCmodel1Name(categoryExtListVO.getName()); | 
|   | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCumodelCateSmallId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(materialExtListVO.getCumodelCateSmallId()),categoryExtListVO.getId())){ | 
|                         materialExtListVO.setCmodel2Name(categoryExtListVO.getName()); | 
|   | 
|                     } | 
|                 } | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCmodelName())){ | 
|                     if(StringUtils.isNotEmpty(materialExtListVO.getCmodel1Name())){ | 
|                         if(StringUtils.isNotEmpty(materialExtListVO.getCmodel2Name())){ | 
|                             materialExtListVO.setUnionCategoryName(materialExtListVO.getCmodelName()+"-"+materialExtListVO.getCmodel1Name()+"-"+materialExtListVO.getCmodel2Name()); | 
|                         }else{ | 
|                             materialExtListVO.setUnionCategoryName(materialExtListVO.getCmodelName()+"-"+materialExtListVO.getCmodel1Name()); | 
|                         } | 
|                     }else{ | 
|                         materialExtListVO.setUnionCategoryName(materialExtListVO.getCmodelName()); | 
|                     } | 
|                 } | 
|   | 
|             } | 
|         } | 
|         /*for(int i=0;i<result.size();i++){ | 
|             MaterialExtListVO mev=result.get(i); | 
|             if(StringUtils.isNotEmpty(mev.getCmodelName())){ | 
|                 if(StringUtils.isNotEmpty(mev.getCmodel1Name())){ | 
|                     if(StringUtils.isNotEmpty(mev.getCmodel2Name())){ | 
|                         mev.setUnionCategoryName(mev.getCmodelName()+"-"+mev.getCmodel1Name()+"-"+mev.getCmodel2Name()); | 
|                     }else{ | 
|                         mev.setUnionCategoryName(mev.getCmodelName()+"-"+mev.getCmodel1Name()); | 
|                     } | 
|                 }else{ | 
|                     mev.setUnionCategoryName(mev.getCmodelName()); | 
|                 } | 
|             } | 
|   | 
|         }*/ | 
|         return PageData.from(new PageInfo<>(result)); | 
|     } | 
|   | 
|   | 
|   | 
|     @Override | 
|     public MaterialDetailBean findDetailById(Integer id) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         MaterialDetailBean materialDetailBean=new MaterialDetailBean(); | 
|         QueryMaterialExtDTO query=new QueryMaterialExtDTO(); | 
|         query.setId(id); | 
|         List<MaterialExtListVO> result = materialExtMapper.getListByCondition(query); | 
|   | 
|         List<CategoryExtListVO> clist = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_CATEGORY_KEY+user.getCompany().getId(), ArrayList.class); | 
|         for(int i=0;i<result.size();i++){ | 
|             MaterialExtListVO materialExtListVO=result.get(i); | 
|             for(int j=0;j<clist.size();j++){ | 
|                 CategoryExtListVO categoryExtListVO=clist.get(j); | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCumodelCateBigId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(materialExtListVO.getCumodelCateBigId()),categoryExtListVO.getId())){ | 
|                         materialExtListVO.setCmodelName(categoryExtListVO.getName()); | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCumodelCateMiddleId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(materialExtListVO.getCumodelCateMiddleId()),categoryExtListVO.getId())){ | 
|                         materialExtListVO.setCmodel1Name(categoryExtListVO.getName()); | 
|   | 
|                     } | 
|                 } | 
|   | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCumodelCateSmallId())){ | 
|                     if(Constants.equalsInteger(Integer.valueOf(materialExtListVO.getCumodelCateSmallId()),categoryExtListVO.getId())){ | 
|                         materialExtListVO.setCmodel2Name(categoryExtListVO.getName()); | 
|   | 
|                     } | 
|                 } | 
|                 if(StringUtils.isNotEmpty(materialExtListVO.getCmodelName())){ | 
|                     if(StringUtils.isNotEmpty(materialExtListVO.getCmodel1Name())){ | 
|                         if(StringUtils.isNotEmpty(materialExtListVO.getCmodel2Name())){ | 
|                             materialExtListVO.setUnionCategoryName(materialExtListVO.getCmodelName()+"-"+materialExtListVO.getCmodel1Name()+"-"+materialExtListVO.getCmodel2Name()); | 
|                         }else{ | 
|                             materialExtListVO.setUnionCategoryName(materialExtListVO.getCmodelName()+"-"+materialExtListVO.getCmodel1Name()); | 
|                         } | 
|                     }else{ | 
|                         materialExtListVO.setUnionCategoryName(materialExtListVO.getCmodelName()); | 
|                     } | 
|                 } | 
|   | 
|             } | 
|         } | 
|         if(result!=null&&result.size()>0){ | 
|             MaterialExtListVO mev=result.get(0); | 
|   | 
|             materialDetailBean=new MaterialDetailBean().toMaterialDetail(mev); | 
|   | 
|             //获取分配公司级组织信息 | 
|             QueryMaterialDistributeExtDTO que=new QueryMaterialDistributeExtDTO(); | 
|             que.setRootDepartId(user.getRootDepartment().getId()); | 
|             que.setMaterialId(id); | 
|             que.setDeleted(Constants.ZERO); | 
|             List<MaterialDistributeExtListVO> mdList= materialDistributeExtService.findListByCondition(que); | 
|             List<Map<String ,Object>> res=new ArrayList<>(); | 
|             if(mdList.size()>0){ | 
|                 for(int i=0;i<mdList.size();i++){ | 
|                     MaterialDistributeExtListVO mdev=mdList.get(i); | 
|                     Map<String ,Object> map=new HashMap<>(); | 
|                     map.put("id",mdev.getId()); | 
|                     System.out.println(mdev.getDmodelName()); | 
|                     map.put("dmodelName",mdev.getDmodelName()); | 
|                     if(mdev.getStatus()!=null){ | 
|                         if(mdev.getStatus()==0){ | 
|                             map.put("status","无效"); | 
|                         }else if(mdev.getStatus()==1){ | 
|                             map.put("status","有效"); | 
|                         } | 
|                     }else{ | 
|                         map.put("status",null); | 
|                     } | 
|   | 
|                     map.put("createTime",mdev.getCreateTime()); | 
|                     res.add(map); | 
|                 } | 
|             } | 
|             materialDetailBean.setMdlist(res); | 
|             return materialDetailBean; | 
|         }else{ | 
|             return materialDetailBean; | 
|         } | 
|     } | 
|   | 
|   | 
|     @Override | 
|     public List<MaterialExtListVO> getListByCondition(QueryMaterialExtDTO pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.setDeleted(Constants.ZERO); | 
|         pageWrap.setRootDepartId(user.getRootDepartment().getId()); | 
|         List<MaterialExtListVO> result = materialExtMapper.getListByCondition(pageWrap); | 
|         for(int i=0;i<result.size();i++){ | 
|             MaterialExtListVO mev=result.get(i); | 
|             if(StringUtils.isNotEmpty(mev.getCmodelName())){ | 
|                 if(StringUtils.isNotEmpty(mev.getCmodel1Name())){ | 
|                     if(StringUtils.isNotEmpty(mev.getCmodel2Name())){ | 
|                         mev.setUnionCategoryName(mev.getCmodelName()+"-"+mev.getCmodel1Name()+"-"+mev.getCmodel2Name()); | 
|                     }else{ | 
|                         mev.setUnionCategoryName(mev.getCmodelName()+"-"+mev.getCmodel1Name()); | 
|                     } | 
|                 }else{ | 
|                     mev.setUnionCategoryName(mev.getCmodelName()); | 
|                 } | 
|             } | 
|   | 
|         } | 
|         return result; | 
|     } | 
|   | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void importmaterial(MultipartFile file)  { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         //解析excel | 
|         List<Material> materialList = EasyExcelUtil.importExcel(file, 1, 1, Material.class); | 
|         if(materialList == null || materialList.size()==0){ | 
|             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容有误!"); | 
|         } | 
|   | 
|      for(int i=0;i<materialList.size();i++){ | 
|          Integer counter=i+2; | 
|          Material material=materialList.get(i); | 
|          if(StringUtils.isEmpty(material.getName())||StringUtils.isEmpty(material.getCode())||StringUtils.isEmpty(material.getUnitname()) | 
|          ||StringUtils.isEmpty(material.getFormationname())||StringUtils.isEmpty(material.getAttr()) | 
|                  ||StringUtils.isEmpty(material.getCateUnionName())){ | 
|   | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "第"+counter+"行:导入数据内容不能为空!"); | 
|          } | 
|          material.setDeleted(Constants.ZERO); | 
|          material.setRootDepartId(user.getRootDepartment().getId()); | 
|          material.setCreateTime(new Date()); | 
|          material.setCreateUser(user.getId()); | 
|   | 
|          Material findMi=new Material(); | 
|          findMi.setDeleted(Constants.ZERO); | 
|          findMi.setRootDepartId(user.getRootDepartment().getId()); | 
|          findMi.setCode(material.getCode()); | 
|          List<Material> list=materialServiceimpl.findList(findMi); | 
|          if(list.size()>0){ | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "第"+counter+"行:主组织内编码不能重复!"); | 
|          } | 
|   | 
|          Material findMi1=new Material(); | 
|          findMi1.setDeleted(Constants.ZERO); | 
|          findMi1.setRootDepartId(user.getRootDepartment().getId()); | 
|          findMi1.setName(material.getName()); | 
|          List<Material> list1=materialServiceimpl.findList(findMi1); | 
|          if(list1.size()>0){ | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"第"+counter+"行:主组织内名称不能重复!"); | 
|          } | 
|   | 
|          QueryUnitExtDTO pageWrap=new QueryUnitExtDTO(); | 
|          pageWrap.setDeleted(Constants.ZERO); | 
|          pageWrap.setRootDepartId(user.getRootDepartment().getId()); | 
|          pageWrap.setType(Constants.ZERO); | 
|          pageWrap.setStatus(Constants.ONE); | 
|          pageWrap.setName(material.getUnitname().trim()); | 
|          List<UnitExtListVO> unitlist=unitExtService.getUnitListByOrg(pageWrap); | 
|          if(unitlist!=null&&unitlist.size()>0){ | 
|              material.setUnitId(unitlist.get(0).getId()); | 
|          }else{ | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"第"+counter+"行:单位不存在/没有有效的单位!"); | 
|          } | 
|   | 
|          if(StringUtils.equals(material.getFormationname().trim(),"生产")){ | 
|              material.setFormation(0); | 
|          }else if(StringUtils.equals(material.getFormationname().trim(),"采购")){ | 
|              material.setFormation(1); | 
|          }else{ | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"第"+counter+"行:形成方式类型错误!"); | 
|          } | 
|   | 
|   | 
|          QueryCategoryUnionExtDTO categoryUnion=new QueryCategoryUnionExtDTO(); | 
|          categoryUnion.setDeleted(Constants.ZERO); | 
|          categoryUnion.setRootDepartId(user.getRootDepartment().getId()); | 
|          categoryUnion.setBmodelCateType("0"); | 
|          List<CategoryUnionExtListVO> catelist=  categoryUnionExtService.getCategoryUnionListByOrg(categoryUnion); | 
|          if(catelist!=null&&catelist.size()>0){ | 
|              for(int j=0;j<catelist.size();j++){ | 
|                  CategoryUnionExtListVO cuev=catelist.get(j); | 
|                  if(StringUtils.equals(cuev.getCombinationName(),material.getCateUnionName().trim())){ | 
|                     material.setCateUnionId(cuev.getId()); | 
|                  } | 
|   | 
|              } | 
|          }else{ | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"第"+counter+"行:物料分类(组合名称)不存在!"); | 
|          } | 
|   | 
|          if(material.getCateUnionId()==null||material.getCateUnionId()==0){ | 
|              throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"第"+counter+"行:物料分类(组合名称)不存在!"); | 
|          } | 
|   | 
|          material.setStatus(Constants.ONE); | 
|          material.setUnionName(material.getName()+material.getAttr()); | 
|          material.setValidTime(new Date()); | 
|   | 
|   | 
|          //获取二维码规则 | 
|          BarcodeParam queryparam=new BarcodeParam(); | 
|          queryparam.setDepartId(user.getCurComDepartment().getId()); | 
|          queryparam.setRootDepartId(user.getRootDepartment().getId()); | 
|          queryparam.setType(Constants.BARCODEPARAM_TYPE.material); | 
|          BarcodeParam barcodeParam =barcodeParamService.findOne(queryparam); | 
|   | 
|          if(barcodeParam!=null){ | 
|              material.setQrcodeId(barcodeParam.getId()+""); | 
|          } | 
|          Integer maid=   materialMapper.insert(material); | 
|   | 
|          materialDistributeServiceimpl.insert(material.getId()+"",user.getRootDepartment().getId()+""); | 
|   | 
|      } | 
|   | 
|     } | 
| } |