| package com.xzx.gc.system.service;  | 
|   | 
|   | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import cn.hutool.core.util.StrUtil;  | 
| 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.entity.OtherUserInfo;  | 
| import com.xzx.gc.entity.SysEnvironmentalInfo;  | 
| import com.xzx.gc.entity.SysItemPrice;  | 
| import com.xzx.gc.entity.SysItemUser;  | 
| import com.xzx.gc.model.system.ItemUserAddDTO;  | 
| import com.xzx.gc.model.system.ItemUserListDTO;  | 
| import com.xzx.gc.model.system.ItemUserListResDTO;  | 
| import com.xzx.gc.system.mapper.SysItemUserMapper;  | 
| import io.swagger.annotations.ApiModelProperty;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.stereotype.Service;  | 
| import org.springframework.transaction.annotation.Transactional;  | 
|   | 
| import javax.servlet.http.HttpServletRequest;  | 
| import java.math.BigDecimal;  | 
| import java.util.ArrayList;  | 
| import java.util.Iterator;  | 
| import java.util.List;  | 
| import java.util.stream.Collectors;  | 
|   | 
| @Service  | 
| @Transactional  | 
| public class SysItemUserService {  | 
|   | 
|   | 
|     @Autowired  | 
|     private SysItemUserMapper sysItemUserMapper;  | 
|   | 
|     @Autowired  | 
|     private SysItemPriceService sysItemPriceService;  | 
|   | 
|     @Autowired  | 
|     private OtherUserService otherUserService;  | 
|   | 
|     @Autowired  | 
|     private SysEnvironmentalInfoService sysEnvironmentalInfoService;  | 
|   | 
|     @Autowired  | 
|     private BusinessUtil businessUtil;  | 
|   | 
|     @Autowired  | 
|     private HttpServletRequest request;  | 
|   | 
|     public void add(SysItemUser sysItemUser){  | 
|         sysItemUser.setCreateTime(DateUtil.now());  | 
|         sysItemUser.setDelFlag(Constants.DEL_NOT_FLAG);  | 
|         sysItemUserMapper.insertSelective(sysItemUser);  | 
|     }  | 
|   | 
|     public SysItemUser findByUserIdAndItemType(String userId,String itemType){  | 
|         SysItemUser sysItemUser=new SysItemUser();  | 
|         sysItemUser.setUserId(userId);  | 
|         sysItemUser.setDelFlag(Constants.DEL_NOT_FLAG);  | 
|         sysItemUser.setItemType(itemType);  | 
|         return sysItemUserMapper.selectOne(sysItemUser);  | 
|     }  | 
|   | 
|   | 
|     public void itemUserAdd(ItemUserAddDTO itemUserAddDTO) {  | 
|   | 
|         List<SysItemUser> list=CollUtil.newArrayList();  | 
|         String[] split = itemUserAddDTO.getItemTypes().split(",");  | 
|         for (String s : split) {  | 
|             SysItemUser sysItemUser=new SysItemUser();  | 
|             sysItemUser.setUserId(itemUserAddDTO.getUserId());  | 
|             sysItemUser.setItemType(s);  | 
|             sysItemUser.setCreateTime(DateUtil.now());  | 
|             sysItemUser.setDelFlag(Constants.DEL_NOT_FLAG);  | 
|             //查询是否存在  | 
|             SysItemUser byUserIdAndItemType = findByUserIdAndItemType(sysItemUser.getUserId(), sysItemUser.getItemType());  | 
|             if(byUserIdAndItemType==null) {  | 
|                 list.add(sysItemUser);  | 
|             }  | 
|         }  | 
|   | 
|         if(CollUtil.isNotEmpty(list)){  | 
|             sysItemUserMapper.insertList(list);  | 
|         }  | 
|     }  | 
|   | 
|     public void deleteById(Long id){  | 
|         SysItemUser sysItemUser=new SysItemUser();  | 
|         sysItemUser.setId(id);  | 
|         sysItemUser.setDelFlag(Constants.DEL_FLAG);  | 
|         sysItemUserMapper.updateByPrimaryKeySelective(sysItemUser);  | 
|         //同时要删除对应的价格体系  | 
|         sysItemPriceService.deleteByItemId(id);  | 
|     }  | 
|   | 
|     public List<SysItemUser> findByUserId(String userId){  | 
|         SysItemUser sysItemUser=new SysItemUser();  | 
|         sysItemUser.setUserId(userId);  | 
|         sysItemUser.setDelFlag(Constants.DEL_NOT_FLAG);  | 
|         return sysItemUserMapper.select(sysItemUser);  | 
|     }  | 
|   | 
|     public SysItemUser findById(Long id){  | 
|         return sysItemUserMapper.selectByPrimaryKey(id);  | 
|     }  | 
|   | 
|   | 
|     /**  | 
|      * 显示用户价格列表  | 
|      * @param itemUserListDTO  | 
|      * @return  | 
|      */  | 
|     public List<ItemUserListResDTO> itemUserList(ItemUserListDTO itemUserListDTO) {  | 
|         List<ItemUserListResDTO> list=new ArrayList<>();  | 
|         List<SysItemUser> byUserId = findByUserId(itemUserListDTO.getUserId());  | 
|         OtherUserInfo byId = otherUserService.findById(itemUserListDTO.getUserId());  | 
|         for (Iterator<SysItemUser> iterator = byUserId.iterator(); iterator.hasNext(); ) {  | 
|             SysItemUser next =  iterator.next();  | 
|             SysEnvironmentalInfo byCityAndItemType = sysEnvironmentalInfoService.findByItemTypeAndAreaNotDel(next.getItemType(), byId.getTownshipId());  | 
|             if(byCityAndItemType==null){  | 
|                 iterator.remove();  | 
|             }else {  | 
|   | 
|                 next.setPicture(byCityAndItemType.getPicture());  | 
|                 next.setTitle(byCityAndItemType.getTitle());  | 
|                 //平台价格  | 
|                 next.setPrice(businessUtil.changeMoney(byCityAndItemType.getPrice()));  | 
|                 next.setPlatMaxPrice(byCityAndItemType.getMaxPrice());  | 
|                 next.setPlatMinPrice(byCityAndItemType.getMinPrice());  | 
|   | 
|                 //查询其设置的价格  | 
|                 List<SysItemPrice> byItemId = sysItemPriceService.findByItemId(next.getId());  | 
|                 if(CollUtil.isNotEmpty(byItemId)){  | 
|                     next.setPriceList(byItemId);  | 
|                     next.setMinPrice(businessUtil.changeMoney(CollUtil.getFirst(byItemId).getPrice()));  | 
|                     next.setMaxPrice(businessUtil.changeMoney(CollUtil.getLast(byItemId).getPrice()));  | 
|   | 
|                     if(Convert.toBigDecimal(next.getMaxPrice()).compareTo(Convert.toBigDecimal(next.getPrice()))>0){  | 
|                         next.setHighThanPlatFlag(true);  | 
|                     }  | 
|                 }else {  | 
|                     if(businessUtil.isWeb(request.getHeader("clientType"))) {  | 
|                         next.setMaxPrice(next.getPrice());  | 
|                         next.setMinPrice(next.getPrice());  | 
|                     }  | 
|                 }  | 
|   | 
|   | 
|                 //用父类分类包裹  | 
|                 SysEnvironmentalInfo parent = sysEnvironmentalInfoService.findById(byCityAndItemType.getParentId());  | 
|                 Long id = parent.getId();  | 
|                 long count = list.stream().filter(x -> x.getId().equals(id)).count();  | 
|                 if(count==0){  | 
|                     ItemUserListResDTO dto=new ItemUserListResDTO();  | 
|                     dto.setTitle(parent.getTitle());  | 
|                     dto.setId(id);  | 
|                     dto.setItemType(parent.getItemType());  | 
|                     List<SysItemUser> resList=new ArrayList<>();  | 
|                     resList.add(next);  | 
|                     dto.setList(resList);  | 
|                     list.add(dto);  | 
|                 }else{  | 
|                     ItemUserListResDTO itemUserListResDTO = list.stream().filter(x -> x.getId().equals(id)).collect(Collectors.toList()).get(0);  | 
|                     List<SysItemUser> list1 = itemUserListResDTO.getList();  | 
|                     list1.add(next);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         String filterOrder = itemUserListDTO.getFilterOrder();  | 
|         if(StrUtil.isNotBlank(filterOrder)){  | 
|             for (ItemUserListResDTO itemUserListResDTO : list) {  | 
|                 List<SysItemUser> list1 = itemUserListResDTO.getList();  | 
|                 if(CollUtil.isNotEmpty(list1)) {  | 
|                     if("1".equals(filterOrder)){  | 
|                         CollUtil.sort(list1, (o1, o2) -> {  | 
|                             if(Convert.toBigDecimal(o1.getMaxPrice()).compareTo(Convert.toBigDecimal(o2.getMaxPrice()))>0){  | 
|                                 return -1;  | 
|                             }else if(Convert.toBigDecimal(o1.getMaxPrice()).compareTo(Convert.toBigDecimal(o2.getMaxPrice()))==0){  | 
|                                 return 0;  | 
|                             }else {  | 
|                                 return 1;  | 
|                             }  | 
|                         });  | 
|                     }else{  | 
|                         CollUtil.sort(list1, (o1, o2) -> {  | 
|                             if(Convert.toBigDecimal(o1.getMaxPrice()).compareTo(Convert.toBigDecimal(o2.getMaxPrice()))>0){  | 
|                                 return 1;  | 
|                             }else if(Convert.toBigDecimal(o1.getMaxPrice()).compareTo(Convert.toBigDecimal(o2.getMaxPrice()))==0){  | 
|                                 return 0;  | 
|                             }else {  | 
|                                 return -1;  | 
|                             }  | 
|                         });  | 
|                     }  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         return list;  | 
|     }  | 
| }  |