| package com.xzx.gc.system.service;  | 
|   | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import com.github.pagehelper.PageHelper;  | 
| import com.github.pagehelper.PageInfo;  | 
| import com.xzx.gc.common.constant.Constants;  | 
| import com.xzx.gc.common.utils.BusinessSimpleUtil;  | 
| import com.xzx.gc.common.utils.BusinessUtil;  | 
| import com.xzx.gc.common.utils.RedisUtil;  | 
| import com.xzx.gc.entity.PackageGoodsInfo;  | 
| import com.xzx.gc.model.admin.ItemModel;  | 
| import com.xzx.gc.system.mapper.PackageGoodsInfoMapper;  | 
| import com.xzx.gc.system.mapper.SysEnvironmentalInfoMapper;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.stereotype.Service;  | 
| import org.springframework.transaction.annotation.Transactional;  | 
| import tk.mybatis.mapper.entity.Example;  | 
|   | 
| import javax.servlet.http.HttpServletRequest;  | 
| import java.util.*;  | 
| import java.util.stream.Collectors;  | 
|   | 
| @Service  | 
| @Transactional  | 
| public class PackageGoodsInfoService {  | 
|     @Autowired  | 
|     private PackageGoodsInfoMapper packageGoodsInfoMapper;  | 
|     @Autowired  | 
|     private CityPartnerService cityPartnerService;  | 
|     @Autowired  | 
|     private SysEnvironmentalInfoMapper sysEnvironmentalInfoMapper;  | 
|   | 
|     public PackageGoodsInfo findById(Long id) {  | 
|         return packageGoodsInfoMapper.selectByPrimaryKey(id);  | 
|     }  | 
|   | 
|   | 
|     public List<PackageGoodsInfo> findByPackageId(String packageId) {  | 
|         Example example = new Example(PackageGoodsInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andIsNotNull("parentId");  | 
|         criteria.andEqualTo("packageId", packageId);  | 
|         criteria.andEqualTo("delFlag", Constants.DEL_NOT_FLAG);  | 
|   | 
|         List<PackageGoodsInfo> packageGoodsInfos = packageGoodsInfoMapper.selectByExample(example);  | 
|         packageGoodsInfos=changeData(packageGoodsInfos);  | 
|         return packageGoodsInfos;  | 
|     }  | 
|   | 
|     public PackageGoodsInfo findByPackageIdAndItemType(String packageId,String itemType) {  | 
|         Example example = new Example(PackageGoodsInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("packageId", packageId);  | 
|         criteria.andEqualTo("itemType",itemType);  | 
|         criteria.andEqualTo("delFlag", Constants.DEL_NOT_FLAG);  | 
|         PackageGoodsInfo packageGoodsInfos = packageGoodsInfoMapper.selectOneByExample(example);  | 
|         return packageGoodsInfos;  | 
|     }  | 
|   | 
|     /**  | 
|      *    处理数据 以合伙人优先(partner_id不为-1) 运营员次 partner为-1  | 
|      * @param packageGoodsInfos  | 
|      * @return  | 
|      */  | 
|     private List<PackageGoodsInfo>  changeData( List<PackageGoodsInfo> packageGoodsInfos){  | 
|         //取出任意一条数据判断是否存在多条 。如果存在多条 则忽略partner_id为-1的。  | 
|         if(CollUtil.isNotEmpty(packageGoodsInfos)){  | 
|             String itemType = packageGoodsInfos.get(0).getItemType();  | 
|             long count = packageGoodsInfos.stream().filter(x -> x.getItemType().equals(itemType)).count();  | 
|             if(count>1){  | 
|                 packageGoodsInfos.removeIf(x->Constants.DEFAULT_ID.equals(x.getPartnerId()));  | 
|             }  | 
|         }  | 
|         return packageGoodsInfos;  | 
|     }  | 
|   | 
|   | 
|   | 
|   | 
|   | 
|     /**  | 
|      * 根据父Id查找子类  | 
|      * @param parentId  | 
|      * @return  | 
|      */  | 
|     public List<PackageGoodsInfo> findByParentId(Long parentId){  | 
|         PackageGoodsInfo packageGoodsInfo=new PackageGoodsInfo();  | 
|         packageGoodsInfo.setParentId(parentId);  | 
|         packageGoodsInfo.setDelFlag(Constants.DEL_NOT_FLAG);  | 
|         List<PackageGoodsInfo> list = packageGoodsInfoMapper.select(packageGoodsInfo);  | 
|         return  list;  | 
|     }  | 
|   | 
|     public Map<String, Object> queryPackageOperaIteml(ItemModel item) {  | 
|         List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();  | 
|         item.setPartnerIds(partnerIds);  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         PageHelper.startPage(item.getPageNum(),item.getLimitNum());  | 
|         List<ItemModel> list = sysEnvironmentalInfoMapper.queryOperaIteml1(item);  | 
|         for (ItemModel itemModel : list) {  | 
|             Long parentId = itemModel.getParentId();  | 
|             if(parentId!=null){  | 
|                 itemModel.setType(findById(parentId).getTitle());  | 
|             }  | 
|         }  | 
|         PageInfo<ItemModel> pageInfo=new PageInfo<>(list);  | 
|         map.put("data", list);  | 
|         map.put("count", pageInfo.getTotal());  | 
|         map.put("code", 0);  | 
|         return map;  | 
|     }  | 
|   | 
|     public Map<String, Object> addOperateParent1(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         item.setItemType(BusinessSimpleUtil.generateItemType(item.getTitle()));  | 
|         item.setCreateTime(DateUtil.now());  | 
|         //如果原来存在则直接将其置为未删除  | 
|         String ff = isDelete(item.getPackageId(),item.getTitle());  | 
|         if(null!=ff&&!"".equals(ff)){  | 
|             map.put("count", 1);  | 
|             map.put("code", 0);  | 
|             return map;  | 
|         }  | 
|   | 
|         // 对排序字段进行处理  | 
|         setSort1(item);  | 
|         List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();  | 
|         if(null!=partnerIds&&partnerIds.size()>0){  | 
|             item.setPartnerId(partnerIds.get(0));  | 
|   | 
|         }  | 
|         int i = packageGoodsInfoMapper.insertItemOperate1(item);  | 
|         setSortAggin1(item);  | 
|         map.put("count", i);  | 
|         map.put("code", 0);  | 
|         return map;  | 
|     }  | 
|   | 
|     private String isDelete(String packageId,String title){  | 
|         Long id = packageGoodsInfoMapper.queryTitleByPackageGoods(packageId,title);  | 
|         if(null!=id){  | 
|             PackageGoodsInfo packageGoodsInfo=new PackageGoodsInfo();  | 
|             packageGoodsInfo.setId(id);  | 
|             packageGoodsInfo.setDelFlag(Constants.DEL_NOT_FLAG);  | 
|             updateById(packageGoodsInfo);  | 
|             return id+"";  | 
|         }  | 
|         return null;  | 
|     }  | 
|   | 
|     private void setSortAggin1(ItemModel item) {  | 
|         ItemModel im = new ItemModel();  | 
|         im.setLimit(1000);  | 
|         im.setParentId(item.getParentId());  | 
|         List<ItemModel> list = packageGoodsInfoMapper.querIteml1(im);  | 
|         list.sort((x, y) -> Integer.compare(x.getSort(), y.getSort()));  | 
|         int f = 1;  | 
|         for (ItemModel itemModel : list) {  | 
|             itemModel.setSort(f++);  | 
|         }  | 
|         for (ItemModel itemModel : list) {  | 
|             packageGoodsInfoMapper.updateItem1(itemModel);  | 
|         }  | 
|     }  | 
|   | 
|     private void setSort1(ItemModel item) {  | 
|         ItemModel im = new ItemModel();  | 
|         im.setLimit(1000);  | 
|         im.setPackageId(item.getPackageId());  | 
|         List<ItemModel> list = packageGoodsInfoMapper.querIteml1(im);  | 
|         // 找到原始的sort数据  | 
|         int originalSort = item.getSort();  | 
|   | 
|         for (ItemModel imx : list) {  | 
|             if (originalSort <= imx.getSort()) {  | 
|                 imx.setSort(imx.getSort() + 1);  | 
|             }  | 
|         }  | 
|         for (ItemModel imx : list) {  | 
|             packageGoodsInfoMapper.updateItem1(imx);  | 
|         }  | 
|     }  | 
|   | 
|     public Map<String, Object> delPackageOperateItem(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         ItemModel im = new ItemModel();  | 
|         im.setLimit(10);  | 
|         im.setParentId(item.getId());  | 
|         List<ItemModel> list = packageGoodsInfoMapper.querIteml1(im);  | 
|         if (list.size() > 0) {  | 
|             map.put("code", -1);  | 
|             map.put("num", 0);  | 
|             return map;  | 
|         }  | 
|         int i = packageGoodsInfoMapper.delItem1(item);  | 
|         map.put("code", 0);  | 
|         map.put("num", i);  | 
|         return map;  | 
|     }  | 
|   | 
|     public Map<String, Object> updateOperateItem1(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         // 对排序字段进行处理  | 
|         setSort1(item);  | 
|         int i = packageGoodsInfoMapper.updateItem1(item);  | 
|         setSortAggin1(item);  | 
|         map.put("code", 0);  | 
|         map.put("num", i);  | 
|         return map;  | 
|     }  | 
|   | 
|     public Map<String, Object> queryOperateItemList1(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         PageHelper.startPage(item.getPageNum(),item.getLimitNum());  | 
|         List<ItemModel> list = packageGoodsInfoMapper.queryOperateItemList1(item);  | 
|         PageInfo<ItemModel> pageInfo=new PageInfo<>(list);  | 
|         for (ItemModel obj : list) {  | 
|             queryChildItem1(obj);  | 
|         }  | 
|         map.put("data", list);  | 
|         map.put("count", pageInfo.getTotal());  | 
|         map.put("code", 0);  | 
|         return map;  | 
|     }  | 
|   | 
|     private ItemModel queryChildItem1(ItemModel item) {  | 
|         List<ItemModel> child = packageGoodsInfoMapper.queryOperateItemChildren1(item);  | 
|         List<ItemModel> childm = new ArrayList<>();  | 
|         for (ItemModel obj : child) {  | 
|             childm.add(obj);  | 
|         }  | 
|         item.setChildren(childm);  | 
|         for (ItemModel cObj : childm) {  | 
|             if (null != cObj.getParentId()) {  | 
|                 queryChildItem1(cObj);  | 
|             }  | 
|         }  | 
|         return item;  | 
|     }  | 
|   | 
|     public void updateById(PackageGoodsInfo packageGoodsInfo){  | 
|         packageGoodsInfoMapper.updateByPrimaryKeySelective(packageGoodsInfo);  | 
|     }  | 
| }  |