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 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 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 changeData( List 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 findByParentId(Long parentId){ PackageGoodsInfo packageGoodsInfo=new PackageGoodsInfo(); packageGoodsInfo.setParentId(parentId); packageGoodsInfo.setDelFlag(Constants.DEL_NOT_FLAG); List list = packageGoodsInfoMapper.select(packageGoodsInfo); return list; } public Map queryPackageOperaIteml(ItemModel item) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); item.setPartnerIds(partnerIds); Map map = new HashMap<>(); PageHelper.startPage(item.getPageNum(),item.getLimitNum()); List list = sysEnvironmentalInfoMapper.queryOperaIteml1(item); for (ItemModel itemModel : list) { Long parentId = itemModel.getParentId(); if(parentId!=null){ itemModel.setType(findById(parentId).getTitle()); } } PageInfo pageInfo=new PageInfo<>(list); map.put("data", list); map.put("count", pageInfo.getTotal()); map.put("code", 0); return map; } public Map addOperateParent1(ItemModel item) { Map 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 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 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 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 delPackageOperateItem(ItemModel item) { Map map = new HashMap<>(); ItemModel im = new ItemModel(); im.setLimit(10); im.setParentId(item.getId()); List 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 updateOperateItem1(ItemModel item) { Map map = new HashMap<>(); // 对排序字段进行处理 setSort1(item); int i = packageGoodsInfoMapper.updateItem1(item); setSortAggin1(item); map.put("code", 0); map.put("num", i); return map; } public Map queryOperateItemList1(ItemModel item) { Map map = new HashMap<>(); PageHelper.startPage(item.getPageNum(),item.getLimitNum()); List list = packageGoodsInfoMapper.queryOperateItemList1(item); PageInfo 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 child = packageGoodsInfoMapper.queryOperateItemChildren1(item); List 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); } }