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);  
 | 
    }  
 | 
}  
 |