| package com.xzx.gc.system.service;  | 
|   | 
| import cn.hutool.core.bean.BeanUtil;  | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import cn.hutool.core.lang.Dict;  | 
| import cn.hutool.core.util.NumberUtil;  | 
| import cn.hutool.core.util.StrUtil;  | 
| import com.github.pagehelper.PageHelper;  | 
| import com.github.pagehelper.PageInfo;  | 
| import com.xzx.gc.common.constant.Constants;  | 
| import com.xzx.gc.common.exception.RestException;  | 
| import com.xzx.gc.common.utils.BusinessUtil;  | 
| import com.xzx.gc.common.utils.RedisUtil;  | 
| import com.xzx.gc.entity.*;  | 
| import com.xzx.gc.model.admin.ItemModel;  | 
| import com.xzx.gc.model.admin.OrderModel;  | 
| import com.xzx.gc.model.admin.StorageModel;  | 
| import com.xzx.gc.model.order.FenceDto;  | 
| import com.xzx.gc.model.order.ItemDto;  | 
| import com.xzx.gc.model.system.QueryParentDTO;  | 
| import com.xzx.gc.model.system.SysEnvironmentalInfoListReq;  | 
| import com.xzx.gc.model.system.SysEnvironmentalInfoReq;  | 
| import com.xzx.gc.model.system.SysEnvironmentalInfoVo;  | 
| import com.xzx.gc.system.mapper.AddressMapper;  | 
| import com.xzx.gc.system.mapper.OrderItemInfoMapper;  | 
| import com.xzx.gc.system.mapper.OrderStorageDetailMapper;  | 
| import com.xzx.gc.system.mapper.SysEnvironmentalInfoMapper;  | 
| import com.xzx.gc.util.DoubleUtil;  | 
| import com.xzx.gc.util.SessionUtil;  | 
| import lombok.extern.slf4j.Slf4j;  | 
| 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.math.BigDecimal;  | 
| import java.math.RoundingMode;  | 
| import java.util.*;  | 
| import java.util.stream.Collectors;  | 
|   | 
| @Service  | 
| @Transactional  | 
| @Slf4j  | 
| public class SysEnvironmentalInfoService{  | 
|   | 
|     @Autowired  | 
|     private SysEnvironmentalInfoMapper sysEnvironmentalInfoMapper;  | 
|   | 
|     @Autowired  | 
|     private UserService userService;  | 
|   | 
|     @Autowired  | 
|     private BusinessUtil businessUtil;  | 
|   | 
|     @Autowired  | 
|     private PartnerGaodeService partnerGaodeService;  | 
|     @Autowired  | 
|     private FenceService fenceService;  | 
|   | 
|     @Autowired  | 
|     private AddressMapper addressMapper;  | 
|     @Autowired  | 
|     private CityPartnerService cityPartnerService;  | 
|   | 
|     @Autowired  | 
|     private AddressLevelService addressLevelService;  | 
|   | 
|     @Autowired  | 
|     private OrderService orderService;  | 
|   | 
|     @Autowired  | 
|     private OrderItemInfoMapper orderItemInfoMapper;  | 
|   | 
|     @Autowired  | 
|     private OrderStorageDetailMapper orderStorageDetailMapper;  | 
|   | 
|     @Autowired  | 
|     private SysItemPriceService sysItemPriceService;  | 
|   | 
|   | 
|     public List<SysEnvironmentalInfoVo> getSysEnvironmentalInfoList(SysEnvironmentalInfoReq sysEnvironmentalInfoReq) {  | 
|   | 
|         //回收员ID  | 
|         String receiver = sysEnvironmentalInfoReq.getReceiver();  | 
|         String townId=Constants.TIANXIN_CODE;  | 
|         int unionFlag = sysEnvironmentalInfoReq.getUnionFlag();  | 
|   | 
|         List<SysEnvironmentalInfo> byPartnerId=CollUtil.newArrayList();  | 
|         //区域id  安卓会传送同时分类将显示所有合伙人区域下的分类取并集  | 
|         String areaId = sysEnvironmentalInfoReq.getAreaId();  | 
|   | 
|         if (StrUtil.isBlank(areaId)) {  | 
|   | 
|   | 
|             if(StrUtil.isNotBlank(sysEnvironmentalInfoReq.getAddressId())){  | 
|   | 
|                 AddressInfo addressInfo = addressMapper.selectByPrimaryKey(sysEnvironmentalInfoReq.getAddressId());  | 
|                 if(StrUtil.isNotBlank(addressInfo.getTownshipId())) {  | 
|                     FenceDto fence = fenceService.getFence(addressInfo.getTownshipId(), false, addressInfo.getLongitude(), addressInfo.getLatitude(), true);  | 
|                     if (StrUtil.isNotBlank(fence.getFenceId())) {  | 
|                         townId = fenceService.findTownId(addressInfo.getTownshipId(), fence.getFenceId());  | 
|                     }  | 
|                 }else {  | 
|                     townId=Constants.DEFAULT_ID;  | 
|                 }  | 
|             }else {  | 
|                 //普通用户  | 
|                 String longitude = sysEnvironmentalInfoReq.getLongitude();  | 
|   | 
|                 if(StrUtil.isNotBlank(longitude)){  | 
|                     String latitude = sysEnvironmentalInfoReq.getLatitude();  | 
|                     String location = longitude + "," + latitude;  | 
|                     //根据用户经纬度查询位置  | 
|                     AddressLevelInfo byLocation = userService.findByLocation(location);  | 
|                     if (byLocation != null) {  | 
|                         townId = byLocation.getLevel3Id();  | 
|                         FenceDto fence = fenceService.getFence(townId, false, location.split(",")[0], location.split(",")[1], true);  | 
|                         if(StrUtil.isNotBlank(fence.getFenceId())){  | 
|                             townId =fenceService.findTownId(townId, fence.getFenceId());  | 
|                         }  | 
|                     }  | 
|                 }  | 
|             }  | 
|         } else {  | 
|             townId=sysEnvironmentalInfoReq.getAreaId();  | 
|   | 
|             if(unionFlag==1) {  | 
|                 //根据区域查询合伙人Id  | 
|                 PartnerGaode byTownId = partnerGaodeService.findByTownId(townId);  | 
|                 String partnerId = byTownId.getPartnerId();  | 
|                 //根据合伙人查询所有分类  | 
|                 byPartnerId =findByPartnerIdForSecond(partnerId);  | 
|             }  | 
|         }  | 
|   | 
|         //要根据用户所在的市去查找对应的分类价格  | 
|         List<SysEnvironmentalInfoVo> list;  | 
|   | 
|         //type 1为大类 2为物品  | 
|         Dict dict = Dict.create().set("type", 1);  | 
|         dict.set("cityId",townId);  | 
|   | 
|         //是否首页展示  | 
| //        if("1".equals(sysEnvironmentalInfoReq.getHomeFlag())){  | 
| //            dict.set("showFlag","1");  | 
| //        }  | 
|   | 
|         list = sysEnvironmentalInfoMapper.getSysEnvironmentalInfoListWithMap(dict);  | 
|         if(CollUtil.isNotEmpty(list)){  | 
|                 setSecondList(list,townId,false,receiver);  | 
|                 //合伙人区域下的分类取并集  | 
|                 if(unionFlag==1){  | 
|                     setUnion(list, byPartnerId);  | 
|                 }  | 
|   | 
|         }else {  | 
|   | 
|             //取天心区的分类 但不显示价格  | 
|             townId=Constants.TIANXIN_CODE;  | 
|             dict = Dict.create().set("type", 1);  | 
|             dict.set("cityId",townId);  | 
|             list = sysEnvironmentalInfoMapper.getSysEnvironmentalInfoListWithMap(dict);  | 
|             if(CollUtil.isNotEmpty(list)){  | 
|                 setSecondList(list,townId,true,receiver);  | 
|             }  | 
|         }  | 
|         return list;  | 
|     }  | 
|   | 
|     public List<SysEnvironmentalInfoVo> homeAppliance(String townId) {  | 
|         townId=Constants.TIANXIN_CODE;  | 
|         List<SysEnvironmentalInfoVo> byCityId = getByTownIdForHome(townId);  | 
|         if(CollUtil.isEmpty(byCityId)){  | 
|             townId=Constants.TIANXIN_CODE;  | 
|             byCityId=getByTownIdForHome(townId);  | 
|         }  | 
|         return  byCityId;  | 
|     }  | 
|   | 
|     private List<SysEnvironmentalInfoVo> getByTownIdForHome(String townId){  | 
|         Dict dict = Dict.create().set("type", 1);  | 
|         dict.set("cityId",townId);  | 
|         List<SysEnvironmentalInfoVo> list = sysEnvironmentalInfoMapper.getSysEnvironmentalInfoListWithMap(dict);  | 
|         list=list.stream().filter(x->x.getItemType().equals(Constants.HOUSE_HOLD_ITEM_TYPE)||x.getItemType().equals(Constants.HOUSE_HOLD_OTHER_ITEM_TYPE)).collect(Collectors.toList());  | 
|         if(CollUtil.isNotEmpty(list)){  | 
|             setSecondList(list,townId,false,null);  | 
|         }  | 
|         return list;  | 
|     }  | 
|   | 
|     public List<SysEnvironmentalInfo>  findByPartnerIdForSecond(String partnerId){  | 
|         Example example=new Example(SysEnvironmentalInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("delFlag",Constants.DEL_NOT_FLAG);  | 
|         criteria.andEqualTo("partnerId",partnerId);  | 
|         criteria.andIsNotNull("parentId");  | 
|         return sysEnvironmentalInfoMapper.selectByExample(example);  | 
|     }  | 
|   | 
|   | 
|     private void setUnion(  List<SysEnvironmentalInfoVo> list,List<SysEnvironmentalInfo> byPartnerId){  | 
|   | 
|         List<SysEnvironmentalInfoVo> allList=CollUtil.newArrayList();  | 
|         for (SysEnvironmentalInfoVo sysEnvironmentalInfoVo:list){  | 
|             List<SysEnvironmentalInfoVo> list1 = sysEnvironmentalInfoVo.getList();  | 
|             CollUtil.addAll(allList,list1);  | 
|         }  | 
|   | 
|   | 
|         for (SysEnvironmentalInfo sysEnvironmentalInfo : byPartnerId) {  | 
|             String itemType = sysEnvironmentalInfo.getItemType();  | 
|             long count = allList.stream().filter(x -> x.getItemType().equals(itemType)).count();  | 
|             if(count==0){  | 
|                 //不属于当前区域的价格全都置于0  | 
|                 SysEnvironmentalInfoVo sysEnvironmentalInfoVo=new SysEnvironmentalInfoVo();  | 
|                 BeanUtil.copyProperties(sysEnvironmentalInfo,sysEnvironmentalInfoVo);  | 
|                 sysEnvironmentalInfoVo.setPrice(Constants.MONEY_INIT.toString());  | 
|                 sysEnvironmentalInfoVo.setSecondPrice(Constants.MONEY_INIT.toString());  | 
|                 sysEnvironmentalInfoVo.setPutStoragePrice(Constants.MONEY_INIT);  | 
|                 allList.add(sysEnvironmentalInfoVo);  | 
|             }  | 
|         }  | 
|   | 
|         for (int i = 0; i < list.size(); i++) {  | 
|             SysEnvironmentalInfoVo sysEnvironmentalInfoVo = list.get(i);  | 
|             if(i==0) {  | 
|                 sysEnvironmentalInfoVo.setList(allList);  | 
|             }else {  | 
|                 sysEnvironmentalInfoVo.setList(CollUtil.newArrayList());  | 
|             }  | 
|         }  | 
|     }  | 
|     /**  | 
|      * 获取二级分类  | 
|      * @param list  | 
|      * @param cityId  | 
|      * @param hidePrice 是否隐藏价格  | 
|      */  | 
|     private void setSecondList(  List<SysEnvironmentalInfoVo> list,String cityId,boolean hidePrice,String receiver){  | 
|         for (SysEnvironmentalInfoVo sysEnvironmentalInfoVo : list) {  | 
|             Long id = sysEnvironmentalInfoVo.getId();  | 
|             if(hidePrice){  | 
|                 sysEnvironmentalInfoVo.setPutStoragePrice(null);  | 
|                 sysEnvironmentalInfoVo.setSecondPrice(null);  | 
|                 sysEnvironmentalInfoVo.setPrice(null);  | 
|             }  | 
|             Dict dict = Dict.create();  | 
|             dict.set("parentId",id);  | 
|             dict.set("type",2);  | 
|             dict.set("cityId",cityId);  | 
|             List<SysItemPrice> priceList=null;  | 
|             if(StrUtil.isNotBlank(receiver)) {  | 
|                 priceList=sysItemPriceService.findPriceByUserId(receiver);  | 
|             }  | 
|             List<SysEnvironmentalInfoVo> sysEnvironmentalInfoList = sysEnvironmentalInfoMapper.getSysEnvironmentalInfoListWithMap(dict);  | 
|             for (SysEnvironmentalInfoVo environmentalInfoVo : sysEnvironmentalInfoList) {  | 
|                 if(hidePrice){  | 
|                     environmentalInfoVo.setPutStoragePrice(null);  | 
|                     environmentalInfoVo.setSecondPrice(null);  | 
|                     environmentalInfoVo.setPrice(null);  | 
|                 }  | 
|   | 
|                 //根据每个分类查询出回收员设定的价格  | 
|                 if(CollUtil.isNotEmpty(priceList)){  | 
|                     List<SysItemPrice> byItemAndList = sysItemPriceService.findByItemAndList(priceList, environmentalInfoVo.getItemType());  | 
|                     environmentalInfoVo.setPriceList(byItemAndList);  | 
|                 }  | 
|   | 
|             }  | 
|   | 
|   | 
|             //查询所有分类的售卖次数  按合伙人区分  | 
| //            if(businessUtil.getVersion(request.getHeader("version")).compareTo(Convert.toDouble(CommonEnum.版本号1点6.getValue()))>=0) {  | 
| //                if(CollUtil.isNotEmpty(sysEnvironmentalInfoList)){  | 
| //                    //根据区域查找合伙人  | 
| //                    String partnerId=null;  | 
| //                    PartnerGaode byCityId=null;  | 
| //                    if(level==2){  | 
| //                        byCityId = partnerGaodeService.findByCityId(cityId);  | 
| //                    }else if(level==3){  | 
| //                        byCityId = partnerGaodeService.findByTownId(cityId);  | 
| //                    }  | 
| //  | 
| //                    if(byCityId!=null){  | 
| //                        partnerId = byCityId.getPartnerId();  | 
| //                        List<OrderItemInfo> orderItemInfos = orderItemService.sumGroupTypeByPatnerId(partnerId);  | 
| //                        if(CollUtil.isNotEmpty(orderItemInfos)){  | 
| //                            for (SysEnvironmentalInfoVo environmentalInfoVo : sysEnvironmentalInfoList) {  | 
| //                                String itemType = environmentalInfoVo.getItemType();  | 
| //                                List<OrderItemInfo> collect = orderItemInfos.stream().filter(x -> x.getItemType().equals(itemType)).collect(Collectors.toList());  | 
| //                                if(CollUtil.isNotEmpty(collect)){  | 
| //                                    int saleNum = collect.get(0).getSaleNum();  | 
| //                                    String s = StringUtils.intChange2Str(saleNum);  | 
| //                                    environmentalInfoVo.setSaleNum(s);  | 
| //                                }  | 
| //                            }  | 
| //                        }  | 
| //                    }  | 
| //                }  | 
| //            }  | 
|   | 
|             /**  | 
|              * 根据分类查订单分类  | 
|              */  | 
|             sysEnvironmentalInfoVo.setList(sysEnvironmentalInfoList);  | 
|         }  | 
|     }  | 
|   | 
|   | 
|     /**  | 
|      * 批量修改分类价格  | 
|      */  | 
|     public void batchUpdateSysEnvironmentalInfo(SysEnvironmentalInfoListReq infoListReq){  | 
|         String areaId = infoListReq.getAreaId();  | 
|         String partnerId = infoListReq.getPartnerId();  | 
|         List<SysEnvironmentalInfoReq> sysEnvironmentalInfoList= infoListReq.getSysEnvironmentalInfoList();  | 
|         if (CollUtil.isNotEmpty(sysEnvironmentalInfoList)){  | 
|                 for (SysEnvironmentalInfoReq req : sysEnvironmentalInfoList) {  | 
|                     int unionFlag = req.getUnionFlag();  | 
|                     SysEnvironmentalInfo sysEnvironmentalInfo=new SysEnvironmentalInfo();  | 
|                     sysEnvironmentalInfo.setPrice(req.getPrice());  | 
|                     sysEnvironmentalInfo.setSecondPrice(req.getSecondPrice());  | 
|                     sysEnvironmentalInfo.setPutStoragePrice(businessUtil.changeMul(Convert.toBigDecimal(req.getPutStoragePrice())));  | 
|                     if(unionFlag==0){  | 
|                         //根据区域和itemType修改  | 
|                         Example example=new Example(SysEnvironmentalInfo.class);  | 
|                         Example.Criteria criteria = example.createCriteria();  | 
|                         criteria.andEqualTo("delFlag",Constants.DEL_NOT_FLAG);  | 
|                         criteria.andEqualTo("cityId",areaId);  | 
|                         criteria.andEqualTo("itemType",req.getItemType());  | 
|                         sysEnvironmentalInfoMapper.updateByExampleSelective(sysEnvironmentalInfo,example);  | 
|                     }else if(unionFlag==1){  | 
|                         //应用到所有  根据合伙人和itemType修改  | 
|                         Example example=new Example(SysEnvironmentalInfo.class);  | 
|                         Example.Criteria criteria = example.createCriteria();  | 
|                         criteria.andEqualTo("delFlag",Constants.DEL_NOT_FLAG);  | 
|                         criteria.andEqualTo("partnerId",partnerId);  | 
|                         criteria.andEqualTo("itemType",req.getItemType());  | 
|                         sysEnvironmentalInfoMapper.updateByExampleSelective(sysEnvironmentalInfo,example);  | 
|                     }  | 
|                 }  | 
|         }  | 
|     }  | 
|   | 
|   | 
|     /**  | 
|      * 后台分类列表查询  | 
|      * @param item  | 
|      * @return  | 
|      */  | 
|     public Map<String, Object> querOperaIteml(ItemModel item) {  | 
|   | 
|         List<String> partnerIds = new ArrayList<>();  | 
|         if(null!=item.getPartnerId()&&!"".equals(item.getPartnerId())){  | 
|             partnerIds.add(item.getPartnerId());  | 
|         }else{  | 
|             partnerIds = cityPartnerService.queryPartnerByCurrent();  | 
|         }  | 
|         if (null != partnerIds && partnerIds.size() > 0) {  | 
|             List<String> townIds = cityPartnerService.queryTownIdsByPartnerId(partnerIds.get(0));  | 
|             item.setTownIdList(townIds);  | 
|         }  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         PageHelper.startPage(item.getPageNum(),item.getLimitNum());  | 
|         List<ItemModel> list = sysEnvironmentalInfoMapper.queryOperaIteml(item);  | 
|         PageInfo<ItemModel> pageInfo=new PageInfo<>(list);  | 
|         for (ItemModel itemModel : list) {  | 
|             String townId = itemModel.getCityId();  | 
|             if (null != townId && !"".equals(townId)) {  | 
|                 Map<String, Object> objmap = addressLevelService.queryCityByTownId(townId);  | 
|                 String cityId = objmap.get("cid").toString();  | 
|                 String pid = objmap.get("pid").toString();  | 
|   | 
|                 List<List<String>> resList = new ArrayList<>();  | 
|                 List<String> detailList = new ArrayList<>();  | 
|                 detailList.add(pid);  | 
|                 detailList.add(cityId);  | 
|                 detailList.add(townId);  | 
|                 resList.add(detailList);  | 
|                 itemModel.setResultArea(resList);  | 
|   | 
|             }  | 
|   | 
|         }  | 
|         map.put("data", list);  | 
|         map.put("count", pageInfo.getTotal());  | 
|         map.put("code", 0);  | 
|         return map;  | 
|     }  | 
|   | 
|     /**  | 
|      * 后台类别查询  | 
|      * @param item  | 
|      * @return  | 
|      */  | 
|     public Map<String, Object> queryOperateItemList(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         PageHelper.startPage(item.getPageNum(),item.getLimitNum());  | 
|         List<ItemModel> list =  sysEnvironmentalInfoMapper.queryOperateItemList(item);  | 
|         PageInfo<ItemModel> pageInfo=new PageInfo<>(list);  | 
|   | 
|         for (ItemModel obj : list) {  | 
|             obj = queryChildItem(obj);  | 
|         }  | 
|         map.put("data", list);  | 
|         map.put("count", pageInfo.getTotal());  | 
|         map.put("code", 0);  | 
|         return map;  | 
|     }  | 
|   | 
|   | 
|     /**  | 
|      * 无限子类算法(时间有限)  | 
|      *  | 
|      * @param item  | 
|      * @return  | 
|      */  | 
|     private ItemModel queryChildItem(ItemModel item) {  | 
|         List<ItemModel> child = sysEnvironmentalInfoMapper.queryOperateItemChildren(item);  | 
|         List<ItemModel> childm = new ArrayList<>();  | 
|         for (ItemModel obj : child) {  | 
|             childm.add(obj);  | 
|         }  | 
|         item.setChildren(childm);  | 
|         for (ItemModel cObj : childm) {  | 
|             if (null != cObj.getParentId()) {  | 
|                 queryChildItem(cObj);  | 
|             }  | 
|         }  | 
|         return item;  | 
|     }  | 
|   | 
|     public Map<String, Object> updateOperateItem(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         String cityId = item.getCityId();  | 
|         PartnerGaode byTownId = partnerGaodeService.findByTownId(cityId);  | 
|   | 
|         //根据区域查询围栏  | 
|         List<String>  townIds = cityPartnerService.queryFenceIdByPartnerId(byTownId.getPartnerId());  | 
|         List<OrderModel> orderList = orderService.queryOrderByCityId(cityId,townIds);  | 
|         if(CollUtil.isNotEmpty(orderList)) {  | 
|             throw new RestException("存在待入库和入库中的订单");  | 
|         }  | 
|         String title=item.getTitle();  | 
|   | 
|         SysEnvironmentalInfo sysEnvironmentalInfo = sysEnvironmentalInfoMapper.selectByPrimaryKey(item.getId());  | 
|         if(!sysEnvironmentalInfo.getTitle().equals(title)){  | 
|             SysEnvironmentalInfo byCityAndTitle = findByCityAndTitle(title, cityId);  | 
|             if(byCityAndTitle!=null){  | 
|                 throw new RestException("当前分类已存在");  | 
|             }  | 
|         }  | 
|   | 
|   | 
|         // 对排序字段进行处理  | 
|         setSort(item);  | 
|   | 
|         int i = updateItem(item);  | 
|   | 
|         //父类隐藏则子类都隐藏  | 
|         if(0==Convert.toInt(item.getShowFlag(),1)) {  | 
|             if (sysEnvironmentalInfo.getParentId() == null) {  | 
|                 List<ItemModel> children = item.getChildren();  | 
|                 for (ItemModel child : children) {  | 
|                     SysEnvironmentalInfo obj = new SysEnvironmentalInfo();  | 
|                     obj.setId(child.getId());  | 
|                     obj.setShowFlag(Convert.toShort(0));  | 
|                     sysEnvironmentalInfoMapper.updateByPrimaryKeySelective(obj);  | 
|                 }  | 
|             }  | 
|         }  | 
|         setSortAggin(item);  | 
|         map.put("code", 0);  | 
|         map.put("num", i);  | 
|         return map;  | 
|     }  | 
|   | 
|   | 
|     private int updateItem(ItemModel item){  | 
|         return sysEnvironmentalInfoMapper.updateItem(item);  | 
|     }  | 
|   | 
|   | 
|     private void setSort(ItemModel item) {  | 
|         ItemModel im = new ItemModel();  | 
|         im.setLimit(1000);  | 
|         im.setParentId(item.getParentId());  | 
|         List<ItemModel> list = sysEnvironmentalInfoMapper.querIteml(im);  | 
|         // 找到原始的sort数据  | 
|         int originalSort = item.getSort();  | 
|   | 
|         for (ItemModel imx : list) {  | 
|             if (originalSort <= imx.getSort()) {  | 
|                 imx.setSort(imx.getSort() + 1);  | 
|             }  | 
|         }  | 
|         for (ItemModel imx : list) {  | 
|             updateItem(imx);  | 
|         }  | 
|     }  | 
|   | 
|   | 
|     private void setSortAggin(ItemModel item) {  | 
|         ItemModel im = new ItemModel();  | 
|         im.setLimit(1000);  | 
|         im.setParentId(item.getParentId());  | 
|         List<ItemModel> list = sysEnvironmentalInfoMapper.querIteml(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) {  | 
|             updateItem(itemModel);  | 
|         }  | 
|     }  | 
|   | 
|     /**  | 
|      * 根据城市和标题查询  | 
|      * @param title  | 
|      * @param cityId  | 
|      * @return  | 
|      */  | 
|     public SysEnvironmentalInfo findByCityAndTitle(String title,String cityId){  | 
|         SysEnvironmentalInfo sysEnvironmentalInfo=new SysEnvironmentalInfo();  | 
|         sysEnvironmentalInfo.setCityId(Convert.toInt(cityId));  | 
|         sysEnvironmentalInfo.setTitle(title);  | 
|         sysEnvironmentalInfo.setDelFlag(0);  | 
|         return sysEnvironmentalInfoMapper.selectOne(sysEnvironmentalInfo);  | 
|     }  | 
|   | 
|     public SysEnvironmentalInfo findById(Long id){  | 
|         return sysEnvironmentalInfoMapper.selectByPrimaryKey(id);  | 
|     }  | 
|   | 
|     public SysEnvironmentalInfo findByItemTypeAndAreaNotDel(String itemType,Integer areaId) {  | 
|         Example example=new Example(SysEnvironmentalInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("itemType",itemType);  | 
|         criteria.andEqualTo("cityId",areaId);  | 
|         criteria.andEqualTo("delFlag",Constants.DEL_NOT_FLAG);  | 
|         SysEnvironmentalInfo sysEnvironmentalInfo1 = sysEnvironmentalInfoMapper.selectOneByExample(example);  | 
|         return  sysEnvironmentalInfo1;  | 
|     }  | 
|   | 
|   | 
|     public Map<String, Object> addOperateParent(ItemModel item) {  | 
|         List<String> townIdList = item.getTownIdList();  | 
|         String cityId = townIdList.get(0);  | 
|         PartnerGaode byTownId = partnerGaodeService.findByTownId(cityId);  | 
|         item.setPartnerId(byTownId.getPartnerId());  | 
|         String title = item.getTitle();  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         Long parentId = item.getParentId();  | 
|   | 
|         //验证 如果是天心区 大类和物品都不能出现重复标题  不是天心区,则要验证物品不能出现重复名称  | 
|         if(Constants.TIANXIN_CODE.equals(cityId)){  | 
|             SysEnvironmentalInfo byCityAndTitle = findByCityAndTitle(title, cityId);  | 
|             if(byCityAndTitle!=null){  | 
|                 throw new RestException("已经有相同的物品");  | 
|             }  | 
|         }else{  | 
|             if(parentId!=null) {  | 
|                 SysEnvironmentalInfo byCityAndTitle = findByCityAndTitle(title, cityId);  | 
|                 if(byCityAndTitle!=null){  | 
|                     throw new RestException("已经有相同的物品");  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|   | 
|         String itemType=System.currentTimeMillis() + "" + (int) (Math.random() * (10000 - 10) + 10);  | 
|   | 
|         //添加大类 必须和总部保持一致  | 
|         if(!Constants.TIANXIN_CODE.equals(cityId)&&parentId==null) {  | 
|             SysEnvironmentalInfo byCityAndTitle = findByCityAndTitle(title, Constants.TIANXIN_CODE);  | 
|             itemType=byCityAndTitle.getItemType();  | 
|         }  | 
|   | 
|         item.setItemType(itemType);  | 
|         item.setCreateTime(DateUtil.now());  | 
|         // 对排序字段进行处理  | 
|         setSort(item);  | 
|   | 
|         int i = 0;  | 
|         for (String townId : townIdList) {  | 
|             item.setCityId(townId);  | 
|             i = sysEnvironmentalInfoMapper.insertItemOperate(item);  | 
|         }  | 
|         setSortAggin(item);  | 
|         map.put("count", i);  | 
|         map.put("code", 0);  | 
|         return map;  | 
|     }  | 
|   | 
|   | 
|   | 
|     /**  | 
|      * 删除后台分类  | 
|      * @param item  | 
|      * @return  | 
|      */  | 
|     public Map<String, Object> delOperateItem(ItemModel item) {  | 
|         Map<String, Object> map = new HashMap<>();  | 
|         ItemModel im = new ItemModel();  | 
|         im.setLimit(10);  | 
|         im.setParentId(item.getId());  | 
|         List<ItemModel> list = sysEnvironmentalInfoMapper.querIteml(im);  | 
|         if (list.size() > 0) {  | 
|             map.put("code", -1);  | 
|             map.put("num", 0);  | 
|             return map;  | 
|         }  | 
|         int i = sysEnvironmentalInfoMapper.delItem(item);  | 
|         map.put("code", 0);  | 
|         map.put("num", i);  | 
|         return map;  | 
|     }  | 
|   | 
|     public Map<String,Object> queryTypeData(StorageModel storageModel){  | 
|         List<String> partnerIds = new ArrayList<>();  | 
|         if(StrUtil.isNotBlank(storageModel.getPartnerId())){  | 
|             partnerIds.add(storageModel.getPartnerId());  | 
|         }else{  | 
|             partnerIds = cityPartnerService.queryPartnerByCurrent();  | 
|         }  | 
|   | 
|         Map<String,String> lastMap = new HashMap<>();  | 
|         Map<String,Object> detailImage = new HashMap<>();  | 
|         if(null!=storageModel.getImageType()&&!"".equals(storageModel.getImageType())) {  | 
|             if (storageModel.getImageType().equals("day")) {  | 
|                 lastMap.put("startTime", cn.hutool.core.date.DateUtil.today() +" 00:00:00");  | 
|                 lastMap.put("endTime",cn.hutool.core.date.DateUtil.today()+" 23:59:59");  | 
|             } else {  | 
|                 List<Map<String,String>> weekOrMonthImgList  = com.xzx.gc.util.DateUtil.query12MonthStartTimeAndEndTime();  | 
|                 lastMap = weekOrMonthImgList.get(0);  | 
|             }  | 
|         }  | 
|         detailImage = queryPageSysStorageTypeName(lastMap.get("startTime"),lastMap.get("endTime"),storageModel.getTypeName(),storageModel.getPage(),storageModel.getLimit(),partnerIds,storageModel.getParentId(),storageModel.getDelFlag());  | 
|   | 
|         return detailImage;  | 
|     }  | 
|   | 
|     private Map<String,Object> queryPageSysStorageTypeName(String startTime,String endTime,String typeName,int page,int limit,List<String> partnerIds,String parentId,String delFlag){  | 
|         String partnerId="";  | 
|         if(null!=partnerIds&&partnerIds.size()>0){  | 
|             partnerId = partnerIds.get(0);  | 
|         }  | 
|         PageHelper.startPage(page,limit);  | 
|   | 
|         List<SysEnvironmentalInfo> list = sysEnvironmentalInfoMapper.findPage(partnerId,typeName,parentId,delFlag);  | 
|   | 
|   | 
|         for (SysEnvironmentalInfo sysEnvironmentalInfo : list) {  | 
|             ItemDto orderItem = orderItemInfoMapper.findByTypeAndPartnerAndTime(sysEnvironmentalInfo.getPartnerId(), sysEnvironmentalInfo.getItemType(), startTime, endTime);  | 
|             orderItem=orderItem==null?new ItemDto():orderItem;  | 
|             sysEnvironmentalInfo.setOldMoney(orderItem.getMoney());  | 
|             ItemDto storageItem = orderStorageDetailMapper.findByTypeAndPartnerAndTime(sysEnvironmentalInfo.getPartnerId(), sysEnvironmentalInfo.getItemType(), startTime, endTime);  | 
|             storageItem=storageItem==null?new ItemDto():storageItem;  | 
|             BigDecimal moneyError = NumberUtil.sub(Convert.toBigDecimal(storageItem.getMoney()), Convert.toBigDecimal(orderItem.getMoney()));  | 
|             BigDecimal weightError = NumberUtil.sub(Convert.toBigDecimal(storageItem.getWeight()), Convert.toBigDecimal(orderItem.getWeight()));  | 
|             BigDecimal money = Convert.toBigDecimal(orderItem.getMoney()).divide(new BigDecimal("10000"),2);  | 
|             BigDecimal moneyErrorBig = new BigDecimal(moneyError.toString()).divide(new BigDecimal("10000"),2);  | 
|             BigDecimal weight = Convert.toBigDecimal(orderItem.getWeight()).divide(new BigDecimal("1000"),3);  | 
|             BigDecimal weightErrorBig = new BigDecimal(weightError.toString()).divide(new BigDecimal("1000"),3);  | 
|             sysEnvironmentalInfo.setMoney(DoubleUtil.roundTwo(money+""));  | 
|             sysEnvironmentalInfo.setMoneyError(DoubleUtil.roundTwo(moneyErrorBig+""));  | 
|             sysEnvironmentalInfo.setWeight(DoubleUtil.roundThree(weight+""));  | 
|             sysEnvironmentalInfo.setWeightError(DoubleUtil.roundThree(weightErrorBig+""));  | 
|         }  | 
|         PageInfo<SysEnvironmentalInfo> pageInfo = new PageInfo<>(list);  | 
|         int count = Convert.toInt(pageInfo.getTotal());  | 
|   | 
|         //总金额  | 
|         BigDecimal totalMoney = new BigDecimal("0");  | 
|   | 
|         for (SysEnvironmentalInfo sysEnvironmentalInfo:list) {  | 
|             totalMoney = totalMoney.add(Convert.toBigDecimal(sysEnvironmentalInfo.getOldMoney()));  | 
|         }  | 
|   | 
|         for (SysEnvironmentalInfo sysEnvironmentalInfo:list) {  | 
|             BigDecimal rate;  | 
|             if(totalMoney.compareTo(BigDecimal.ZERO)==0){  | 
|                 rate=BigDecimal.ZERO;  | 
|             }else {  | 
|                 rate = Convert.toBigDecimal(sysEnvironmentalInfo.getOldMoney(), Constants.MONEY_INIT).divide(totalMoney, 2, RoundingMode.HALF_UP);  | 
|             }  | 
|             sysEnvironmentalInfo.setRate(rate.multiply(new BigDecimal("100")).toString()+"%");  | 
|         }  | 
|   | 
|         Map<String,Object> imageData = new HashMap<>();  | 
|         imageData.put("totalMoney",DoubleUtil.roundTwo(totalMoney.toString()));  | 
|         imageData.put("data",list);  | 
|         imageData.put("count",count);  | 
|         return imageData;  | 
|     }  | 
|   | 
|     public List<SysEnvironmentalInfo> queryParent(QueryParentDTO queryParentDTO) {  | 
|         Example example=new Example(SysEnvironmentalInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andEqualTo("cityId",queryParentDTO.getCityId());  | 
|         criteria.andIsNull("parentId");  | 
|         return sysEnvironmentalInfoMapper.selectByExample(example);  | 
|     }  | 
|   | 
|   | 
| }  |