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