package com.xzx.gc.user.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.*; import cn.hutool.core.util.RandomUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.Result; import com.xzx.gc.common.constant.*; import com.xzx.gc.common.exception.RestException; import com.xzx.gc.common.utils.*; import com.xzx.gc.entity.*; import com.xzx.gc.model.admin.PartnerAccountModel; import com.xzx.gc.model.admin.PromoterModel; import com.xzx.gc.model.admin.StorageModel; import com.xzx.gc.model.admin.UserModel; import com.xzx.gc.model.order.FenceDto; import com.xzx.gc.model.user.*; import com.xzx.gc.user.dto.LoginPwdResDto; import com.xzx.gc.user.dto.UpdatePwdDto; import com.xzx.gc.user.mapper.*; import com.xzx.gc.util.DoubleUtil; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import tk.mybatis.mapper.entity.Example; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @Service @Transactional public class OtherUserService { @Autowired private OtherUserMapper otherUserMapper; @Autowired private OrderMapper orderMapper; @Autowired private RedisUtil redisUtil; @Autowired private BusinessUtil businessUtil; @Autowired private OrderStorageInfoMapper orderStorageInfoMapper; @Autowired private CityPartnerService cityPartnerService; @Autowired private PartnerAccountService partnerAccountService; @Autowired private PartnerAccountMapper partnerAccountMapper; @Autowired private AccountService accountService; @Autowired private AddressService addressService; @Autowired private UserMapper userMapper; @Autowired private PartnerGaodeService partnerGaodeService; @Autowired private UserGatherInfoService userGatherInfoService; @Autowired private SysItemPriceMapper sysItemPriceMapper; @Autowired private SysEnvironmentalInfoService sysEnvironmentalInfoService; @Autowired private OrderService orderService; @Autowired private OrderAppraiseInfoMapper orderAppraiseInfoMapper; @Autowired private PartnerFenceService partnerFenceService; @Autowired private ConfigService configService; public List findByUserTypeAndPartner(String userType,String partered) { OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setDelFlag(0); otherUserInfo.setIsProhibit(false); otherUserInfo.setUserType(userType); otherUserInfo.setPartnerId(partered); return otherUserMapper.select(otherUserInfo); } public List findByUserTypeAndFenceIdForNotLeave(String fenceId) { return otherUserMapper.findByUserTypeAndFenceIdForNotLeave(fenceId); } public List findByUserTypeAndPartnerIdForNotLeave(String partnerId) { return otherUserMapper.findByUserTypeAndPartnerIdForNotLeave(partnerId); } public List findByUserType(String userType) { OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setDelFlag(0); otherUserInfo.setIsProhibit(false); otherUserInfo.setUserType(userType); List select = otherUserMapper.select(otherUserInfo); return select; } public List findByMobile(String mobile) { OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setDelFlag(Constants.DEL_NOT_FLAG); otherUserInfo.setIsProhibit(false); otherUserInfo.setMobilePhone(mobile); List select = otherUserMapper.select(otherUserInfo); return select; } public List findByMobileForBidden(String mobile) { OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setDelFlag(Constants.DEL_NOT_FLAG); otherUserInfo.setMobilePhone(mobile); List select = otherUserMapper.select(otherUserInfo); return select; } public List findByOpenId(String openId) { OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setDelFlag(Constants.DEL_NOT_FLAG); otherUserInfo.setIsProhibit(false); otherUserInfo.setOpenId(openId); List select = otherUserMapper.select(otherUserInfo); return select; } public LoginPwdResDto findByMobileAndPwd(String mobile, String pwd) { LoginPwdResDto loginPwdResDto=new LoginPwdResDto(); List list = findByMobileForBidden(mobile); if(CollUtil.isNotEmpty(list)){ if(list.size()>1){ throw new RestException("一个手机号不能存在多个角色"); } OtherUserInfo byMobileAndUserType=null; // long hs=list.stream().filter(x->CommonEnum.回收员.getValue().equals(x.getUserType())).count(); // long rk=list.stream().filter(x->CommonEnum.入库员.getValue().equals(x.getUserType())).count(); // long yy=list.stream().filter(x->CommonEnum.运营员.getValue().equals(x.getUserType())).count(); // long tg=list.stream().filter(x->CommonEnum.推广员.getValue().equals(x.getUserType())).count(); // long dbyy=list.stream().filter(x->CommonEnum.打包站运营员.getValue().equals(x.getUserType())).count(); // long db=list.stream().filter(x->CommonEnum.打包员.getValue().equals(x.getUserType())).count(); // long admin=list.stream().filter(x->CommonEnum.总部管理员.getValue().equals(x.getUserType())).count(); // // // // //运营员互斥规则 // if(yy+db+dbyy>=2){ // throw new RestException(-1,"运营员角色与打包员角色不能共存"); // } // // //回收员互斥规则 // if(hs+rk>=2){ // throw new RestException(-1,"回收员角色与入库员角色不能共存"); // } // // if(hs+db+dbyy>=2){ // throw new RestException(-1,"回收员角色与打包员角色不能共存"); // } // // //入库员互斥规则 // if(rk+hs>=2){ // throw new RestException(-1,"入库员角色与回收员角色不能共存"); // } // if(rk+db+dbyy>=2){ // throw new RestException(-1,"入库员角色与打包员角色不能共存"); // } // // // //角色优先级 // List collect; // if(admin==1) { // collect = list.stream().filter(x -> CommonEnum.总部管理员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else if(hs==1){ // collect = list.stream().filter(x -> CommonEnum.回收员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else if(rk==1){ // collect = list.stream().filter(x -> CommonEnum.入库员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else if(dbyy==1){ // collect = list.stream().filter(x -> CommonEnum.打包站运营员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else if(db==1){ // collect = list.stream().filter(x -> CommonEnum.打包员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else if(tg==1){ // collect = list.stream().filter(x -> CommonEnum.推广员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else if(yy==1){ // collect = list.stream().filter(x->CommonEnum.运营员.getValue().equals(x.getUserType())).collect(Collectors.toList()); // }else { // collect = list; // } byMobileAndUserType=list.get(0); if(byMobileAndUserType.getIsProhibit()){ loginPwdResDto.setFlag(-1); return loginPwdResDto; } String encrypt = SecurityUtil.encrypt(byMobileAndUserType.getSalt(), pwd); if(encrypt.equals(byMobileAndUserType.getPassword())){ BeanUtils.copyProperties(byMobileAndUserType,loginPwdResDto); loginPwdResDto.setSalt(null); loginPwdResDto.setPassword(null); List collect1 = list.stream().filter(x->x.getIsProhibit()==false).map(x -> x.getUserType()).collect(Collectors.toList()); loginPwdResDto.setUserTypeList(collect1); return loginPwdResDto; }else{ loginPwdResDto.setFlag(-2); } }else{ loginPwdResDto.setFlag(-3); } return loginPwdResDto; } public OtherUserInfo findByMobileAndUserType(String mobile, String userType) { OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setDelFlag(0); otherUserInfo.setUserType(userType); otherUserInfo.setMobilePhone(mobile); OtherUserInfo select = otherUserMapper.selectOne(otherUserInfo); return select; } public void add(OtherUserInfo otherUserInfo) { otherUserInfo.setRegistTime(DateUtil.now()); otherUserInfo.setDelFlag(0); otherUserMapper.insertSelective(otherUserInfo); } public OtherUserInfo findById(String userId) { return otherUserMapper.selectByPrimaryKey(userId); } public void update(OtherUserInfo otherUserInfo){ otherUserMapper.updateByPrimaryKeySelective(otherUserInfo); } public void updateOpenIdByMobile(String openId,String mobile) { Example example=new Example(OtherUserInfo.class); example.createCriteria().andEqualTo("mobilePhone",mobile) .andEqualTo("isProhibit",Constants.DEL_NOT_FLAG) .andEqualTo("delFlag",Constants.DEL_NOT_FLAG); OtherUserInfo otherUserInfo1=new OtherUserInfo(); otherUserInfo1.setOpenId(openId); otherUserMapper.updateByExampleSelective(otherUserInfo1,example); } /** * 查询平台用户 * @param userType 支持多个 * @param id 排除id * @param parenId 合伙人id * @param keyword 关键字查询 * @return */ public List findByUserTypeNotId(String userType, String id,String parenId,String keyword) { Example example=new Example(OtherUserInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("delFlag",0); criteria.andEqualTo("isProhibit",0); criteria.andIn("userType", Arrays.asList(userType.split(","))); if(StrUtil.isNotBlank(parenId)) { criteria.andEqualTo("partnerId", parenId); } if(StrUtil.isNotBlank(id)){ criteria.andNotIn("userId",CollUtil.newArrayList(id)); } if(StrUtil.isNotBlank(keyword)){ example.and().orLike("name","%"+keyword+"%").orLike("mobilePhone","%"+keyword+"%"); } example.setOrderByClause("user_type asc"); List select = otherUserMapper.selectByExample(example); return select; } /** * 修改密码 * @param updatePwdDto * @param result * @param mobile */ public void pwdUpdate(@Validated @RequestBody UpdatePwdDto updatePwdDto, Result result, String mobile) { String redisVerifyCode = redisUtil.get(Constants.REDIS_USER_KEY+"code:" + mobile); if(StringUtils.isBlank(redisVerifyCode)){ result.setCode(-1); result.setMsg("验证码已经失效,有效期两分钟"); }else if(!redisVerifyCode.equals(updatePwdDto.getCode())){ result.setCode(-1); result.setMsg("验证码错误"); }else if(!updatePwdDto.getNewPwd().equals(updatePwdDto.getNewPwdSure())){ result.setCode(-1); result.setMsg("两次密码不一致"); }else{ OtherUserInfo otherUserInfo = new OtherUserInfo(); otherUserInfo.setSalt(RandomUtil.randomString(16)); otherUserInfo.setPassword(SecurityUtil.encrypt(otherUserInfo.getSalt(),updatePwdDto.getNewPwd())); Example example=new Example(OtherUserInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("mobilePhone",mobile); otherUserMapper.updateByExampleSelective(otherUserInfo,example); } } public void delCuserById(String id, String phone, String userType){ AccountInfo account = accountService.findByUserIdForbidden(id); if(account!=null) { if (null == account.getOverdraftLimit() && "".equals(account.getOverdraftLimit())) { account.setOverdraftLimit("0"); } BigDecimal overLimit = Convert.toBigDecimal(account.getOverdraftLimit(), Constants.MONEY_INIT); //要把可用余额加入到合伙人 OtherUserInfo userModel1 = findById(id); if (null != userModel1) { if (overLimit.compareTo(BigDecimal.ZERO) > 0) { if (null != userModel1.getPartnerId()) { //调整额度时需要扣除合伙人额度 String partnerId = userModel1.getPartnerId(); CityPartner partner = cityPartnerService.findById(Convert.toInt(partnerId)); PartnerAccountModel partnerAccountModel = partnerAccountMapper.getPartnerAccountByUserId(partner.getUserId()); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF" + snowflake.nextIdStr(); partnerAccountModel.setAddType("1"); partnerAccountService.insertPartnerAccountLog(partnerAccountModel, "8", overLimit, payOrderId, "7"); BigDecimal newPartnerMoney = new BigDecimal(partnerAccountModel.getHbb()).add(overLimit); partnerAccountModel.setHbb(DoubleUtil.roundTwo(newPartnerMoney.toString())); partnerAccountMapper.updatePartnerAccount(partnerAccountModel); } } } } // 删除user_info OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setUserId(id); otherUserInfo.setDelFlag(Constants.DEL_FLAG); update(otherUserInfo); // 删除account accountService.deleteByUserId(id); if(userType.equals("普通用户")){ // 删除地址 addressService.deleteByUserId(id); } // 删除redis token UserModel userModel = userMapper.queryUserByUsertype(phone, "1", "0",null,null); redisUtil.remove("xzx:user:token:"+id); if(null!=userModel){ redisUtil.remove("xzx:user:token:"+userModel.getUserId()); } List> userIdList = otherUserMapper.queryCuserByPhoneRedisDelList(phone); for (Map map:userIdList) { String userId = map.get("userId").toString(); redisUtil.remove("xzx:user:token:"+userId); } redisUtil.remove(phone); } public Map queryStorageByUserId(StorageModel storageModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); if(null!=storageModel.getStartTime()&&!"".equals(storageModel.getStartTime())){ storageModel.setStartTime(storageModel.getStartTime()+" 00:00:00"); } if(null!=storageModel.getEndTime()&&!"".equals(storageModel.getEndTime())){ storageModel.setEndTime(storageModel.getEndTime()+" 23:59:59"); } storageModel.setPartnerIds(partnerIds); PageHelper.startPage(storageModel.getPage(),storageModel.getLimit()); List list = otherUserMapper.queryStorageByUserId(storageModel); PageInfo pageInfo=new PageInfo<>(list); for (StorageModel model:list) { if(null!=model.getRecycleWeight()&&!"".equals(model.getRecycleWeight())){ model.setRecycleWeight(DoubleUtil.roundThree(model.getRecycleWeight())); }else{ model.setRecycleWeight("0"); } if(null!=model.getRecycleMoney()&&!"".equals(model.getRecycleMoney())){ model.setRecycleMoney(DoubleUtil.roundTwo(model.getRecycleMoney())); }else{ model.setRecycleMoney("0"); } model.setWeightError(DoubleUtil.roundThree(model.getWeightError())); model.setMoneyError(DoubleUtil.roundTwo(model.getMoneyError())); } Map result = new HashMap<>(); result.put("data", list); result.put("count", pageInfo.getTotal()); result.put("code", 0); return result; } public Map queryStorageList(UserModel userModel){ List partnerIds = new ArrayList<>(); if(null!=userModel.getPartnerId()&&!"".equals(userModel.getPartnerId())){ partnerIds.add(userModel.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } userModel.setPartnerIds(partnerIds); if(!org.apache.commons.lang3.StringUtils.isEmpty(userModel.getName())){ userModel.setName(userModel.getName()); userModel.setMobilePhone(userModel.getName()); } String startTime = userModel.getStartTime(); String endTime = userModel.getEndTime(); if(null!=startTime&&!"".equals(startTime)){ startTime = startTime+" 00:00:00"; } if(null!=endTime&&!"".equals(endTime)){ endTime = endTime+" 23:59:59"; } userModel.setStartTime(startTime); userModel.setEndTime(endTime); Map result = new HashMap<>(); PageHelper.startPage(userModel.getPage(),userModel.getLimit()); List> storageList = otherUserMapper.queryStorageList(userModel); PageInfo> pageInfo=new PageInfo<>(storageList); for (Map map:storageList) { map.put("recycleweight",DoubleUtil.roundThree(map.get("recycleWeight").toString()) ); map.put("storageweight",DoubleUtil.roundThree(map.get("storageWeight").toString())); map.put("recyclemoney",DoubleUtil.roundTwo(map.get("recycleMoney").toString())); map.put("storagemoney",DoubleUtil.roundTwo(map.get("storageMoney").toString())); map.put("storageuserphone",map.get("storageUserPhone").toString()); map.put("storagename",map.get("storageName").toString()); String orderId = map.get("orderId").toString(); map.put("orderNum",orderId); } result.put("storageNum",pageInfo.getTotal()); result.put("data", storageList); result.put("count", pageInfo.getTotal()); result.put("code", 0); return result; } public Map queryPackageStorageList(UserModel userModel){ List partnerIds = new ArrayList<>(); if(null!=userModel.getPartnerId()&&!"".equals(userModel.getPartnerId())){ partnerIds.add(userModel.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } List townIds = new ArrayList<>(); if(null!=partnerIds&&partnerIds.size()>0){ String partnerId= partnerIds.get(0); List byPartnerId = partnerGaodeService.findByPartnerId(partnerId); if(CollUtil.isNotEmpty(byPartnerId)){ townIds=byPartnerId.stream().map(x->x.getTownId()).collect(Collectors.toList()); } List packageIdByPartnerId = cityPartnerService.findPackageIdByPartnerId(partnerId); if(CollUtil.isNotEmpty(packageIdByPartnerId)){ partnerIds=packageIdByPartnerId.stream().map(x->x.getId().toString()).collect(Collectors.toList()); } } userModel.setPartnerIds(partnerIds); String nickName=null; if(!org.apache.commons.lang3.StringUtils.isEmpty(userModel.getName())){ userModel.setName(userModel.getName()); userModel.setMobilePhone(userModel.getName()); } String startTime = userModel.getStartTime(); String endTime = userModel.getEndTime(); if(null!=startTime&&!"".equals(startTime)){ startTime = startTime+" 00:00:00"; } if(null!=endTime&&!"".equals(endTime)){ endTime = endTime+" 23:59:59"; } userModel.setStartTime(startTime); userModel.setEndTime(endTime); int storageNum=0; if(townIds.size()==0){ storageNum=otherUserMapper.queryPackageStorageNum(null); }else{ storageNum=otherUserMapper.queryPackageStorageNum(townIds); } Map result = new HashMap<>(); userModel.setUserType("7"); PageHelper.startPage(userModel.getPage(),userModel.getLimit()); List> storageList = otherUserMapper.queryStorageList1(userModel); PageInfo> pageInfo=new PageInfo<>(storageList); for (Map map:storageList) { map.put("recycleweight",DoubleUtil.roundThree(map.get("recycleWeight").toString()) ); map.put("storageweight",DoubleUtil.roundThree(map.get("storageWeight").toString())); map.put("recyclemoney",DoubleUtil.roundTwo(map.get("recycleMoney").toString())); map.put("storagemoney",DoubleUtil.roundTwo(map.get("storageMoney").toString())); String orderId = map.get("orderId").toString(); // String[] orderIds = orderId.split(","); map.put("orderNum",orderId); } int count = 0 ; if(storageList.size()==0){ if(storageNum>0){ storageList = otherUserMapper.queryStorageList1(userModel); for (Map map:storageList) { map.put("orderNum",0); } } }else{ } result.put("storageNum",storageNum); result.put("data", storageList); result.put("count", pageInfo.getTotal()); result.put("code", 0); return result; } public Map queryStorageObjectList(StorageModel storageModel) { // List partnerIds = cityPartnerService.queryPartnerByCurrent(); // storageModel.setPartnerIds(partnerIds); if(null!=storageModel.getStartTime()&&!"".equals(storageModel.getStartTime())){ storageModel.setStartTime(storageModel.getStartTime()+" 00:00:00"); } if(null!=storageModel.getEndTime()&&!"".equals(storageModel.getEndTime())){ storageModel.setEndTime(storageModel.getEndTime()+" 23:59:59"); } Map result = new HashMap<>(); PageHelper.startPage(storageModel.getPage(),storageModel.getLimit()); List> list = otherUserMapper.queryStorageObjectList(storageModel); PageInfo> pageInfo=new PageInfo<>(list); for (Map map:list) { map.put("storageweight",DoubleUtil.roundThree(map.get("storageWeight").toString())); map.put("storagemoney",DoubleUtil.roundTwo(map.get("storageMoney").toString())); map.put("recycleweight",DoubleUtil.roundThree(map.get("recycleWeight").toString())); map.put("recyclemoney",DoubleUtil.roundTwo(map.get("recycleMoney").toString())); map.put("receiverphone",map.get("receiverPhone").toString()); map.put("storageid",map.get("storageId").toString()); map.put("storagetime",map.get("storageTime").toString()); } result.put("count",pageInfo.getTotal()); result.put("code",0); result.put("data",list); return result; } public Map queryQromoterList(PromoterModel promoterModel){ List partnerIds = new ArrayList<>(); if(null!=promoterModel.getPartnerId()&&!"".equals(promoterModel.getPartnerId())){ partnerIds.add(promoterModel.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } promoterModel.setPartnerIds(partnerIds); if(!org.apache.commons.lang3.StringUtils.isEmpty(promoterModel.getNickName())){ promoterModel.setNickName(new String(org.apache.commons.codec.binary.Base64.encodeBase64(promoterModel.getNickName().getBytes()))); } String startTime = promoterModel.getStartTime(); String endTime = promoterModel.getEndTime(); if(null!=startTime&&!"".equals(startTime)){ startTime = startTime+ " 00:00:00"; promoterModel.setStartTime(startTime); } if(null!=endTime&&!"".equals(endTime)){ endTime = endTime+ " 23:59:59"; promoterModel.setEndTime(endTime); } PageHelper.startPage(promoterModel.getPage(),promoterModel.getLimit()); List list = otherUserMapper.queryQromoterLeven(promoterModel); PageInfo pageInfo = new PageInfo<>(list); int count = Convert.toInt(pageInfo.getTotal()); if(null!=list&&list.size()>0) { for (PromoterModel p : list) { p.setTurnoverRate("0"); // 未注册总数 if (null != p.getUnregistCount()) { BigDecimal totalNum = new BigDecimal(p.getTotalNum()); BigDecimal unregistCount = totalNum.subtract(new BigDecimal(p.getRegistCount())); unregistCount = unregistCount.subtract(new BigDecimal(p.getCount())); p.setUnregistCount(unregistCount.toString()); } else { p.setUnregistCount("0"); } // 已注册总数 if (null != p.getRegistCount()) { p.setRegistCount(String.valueOf(Integer.parseInt(p.getRegistCount()) + Integer.parseInt(p.getCount()))); } else { p.setRegistCount("0"); } // 已成交总数 if (null != p.getCount()) { p.setOrderCount(p.getCount()); } else { p.setOrderCount("0"); } if (null != p.getRegistCount()) { if (null != p.getOrderCount()) { if (p.getOrderCount().equals("0")) { p.setTurnoverRate("0" + "%"); } else { BigDecimal turnoverRate = new BigDecimal(p.getOrderCount()).divide(new BigDecimal(p.getRegistCount()), 3, BigDecimal.ROUND_DOWN); p.setTurnoverRate(turnoverRate.multiply(new BigDecimal("100")).toString() + "%"); } } else { p.setOrderCount("0"); p.setTurnoverRate("0" + "%"); } } else { p.setOrderCount("0"); p.setRegistCount("0"); } PromoterModel pmx = orderMapper.queryPromoterOrderWeightMoney(p.getUserId(), promoterModel.getStartTime(), promoterModel.getEndTime()); if(null!=pmx){ if (null != pmx.getOrderWeightCount()) { p.setOrderWeightCount(DoubleUtil.roundThree(pmx.getOrderWeightCount())); } else { p.setOrderWeightCount("0"); } if (null != pmx.getOrderMoneyCount()) { p.setOrderMoneyCount(DoubleUtil.roundTwo(pmx.getOrderMoneyCount())); } else { p.setOrderMoneyCount("0"); } }else{ p.setOrderWeightCount("0"); p.setOrderMoneyCount("0"); } int allOrderNum = orderMapper.queryAllOrderByUserId(p.getUserId(), promoterModel.getStartTime(), promoterModel.getEndTime()); p.setAllOrderNum(allOrderNum); } }else{ PromoterModel p = new PromoterModel(); p.setOrderMoneyCount("0"); p.setOrderWeightCount("0"); p.setAllOrderNum(0); p.setOrderCount("0"); p.setRegistCount("0"); p.setTurnoverRate("0"+"%"); p.setUnregistCount("0"); list.add(p); count=0; } Map m = new HashMap<>(); m.put("data", list); m.put("count", count); m.put("code", 0); return m; } public Map queryQromoterOrder(PromoterModel promoterModel){ if(null!=promoterModel.getStartTime()&&!"".equals(promoterModel.getStartTime())){ promoterModel.setStartTime(promoterModel.getStartTime()+" 00:00:00"); } if(null!=promoterModel.getEndTime()&&!"".equals(promoterModel.getEndTime())){ promoterModel.setEndTime(promoterModel.getEndTime()+" 23:59:59"); } List promoterModels = new ArrayList<>(); int count=0; if(null!=promoterModel.getSortType()&&!"".equals(promoterModel.getSortType())){ promoterModel.setOrderNumSort(Integer.parseInt(promoterModel.getSortType())); PageHelper.startPage(promoterModel.getPage(),promoterModel.getLimit()); promoterModels = orderMapper.queryQromoterOrderOne(promoterModel); PageInfo pageInfo=new PageInfo<>(promoterModels); count=Convert.toInt(pageInfo.getTotal()); //用于接收重复的项目片块数据,返回给方法的调用者 List> result = new ArrayList>(); //用于临时保存重复的项目片块数据 Map> map = new TreeMap>(); for (PromoterModel model:promoterModels) { PromoterModel newP = new PromoterModel(); String userId = model.getCreateUserId(); //判断当前值是否已经在map中存在 if (map.containsKey(userId)) { List hasObj = map.get(userId); //对象拷贝 PromoterModel landTarget = new PromoterModel(); BeanUtil.copyProperties(model, landTarget); hasObj.add(landTarget); new ArrayList().add(landTarget); map.put(userId, hasObj); } else { List newObj = new ArrayList(); PromoterModel landTarget = new PromoterModel(); BeanUtil.copyProperties(model, landTarget); newObj.add(landTarget); map.put(userId, newObj); } } //取出所有的重复的数据值,存入到result中 for (Map.Entry> entry : map.entrySet()) { result.add(entry.getValue()); } promoterModels = getOneOrMore(promoterModel.getOrderNumSort(),result); }else{ PageHelper.startPage(promoterModel.getPage(),promoterModel.getLimit()); promoterModels = orderMapper.queryQromoterOrder(promoterModel); PageInfo pageInfo=new PageInfo<>(promoterModels); count=Convert.toInt(pageInfo.getTotal()); } for (PromoterModel model:promoterModels) { String orderWeightCount = model.getOrderWeightCount(); model.setOrderWeightCount(DoubleUtil.roundThree(orderWeightCount)); model.setOrderMoneyCount(DoubleUtil.roundTwo(model.getOrderMoneyCount())); String nickName= model.getNickName(); if(null!=nickName&&!"".equals(nickName)){ nickName = cn.hutool.core.codec.Base64.decodeStr(model.getNickName()); model.setNickName(nickName); } } if(null!=promoterModel.getSortType()&&!"".equals(promoterModel.getSortType())){ count = promoterModels.size(); } Map m = new HashMap<>(); m.put("data", promoterModels); m.put("count", count); m.put("code", 0); return m; } private List getOneOrMore(int sort,List> result){ List oneOrMore = new ArrayList<>(); for (List m1List:result) { if(m1List.size()>0){ switch (sort) { case 1:oneOrMore.add(m1List.get(0)); break; case 2:if(m1List.size()>1){ oneOrMore.add(m1List.get(1));} break; case 3:if(m1List.size()>2){oneOrMore.add(m1List.get(2));} break; case 4:if(m1List.size()>3){oneOrMore.add(m1List.get(3));} break; default: break; } } } return oneOrMore; } public Map queryCollectorList(PromoterModel promoterModel){ List partnerIds = new ArrayList<>(); if(null!=promoterModel.getPartnerId()&&!"".equals(promoterModel.getPartnerId())){ partnerIds.add(promoterModel.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } promoterModel.setPartnerIds(partnerIds); Map result = new HashMap<>(); //查询回收员总数 List collectorNum = otherUserMapper.queryCollectorNum(partnerIds); if(collectorNum.size()==0){ result.put("collectorNum",collectorNum.size()); result.put("storageWeight","0"); result.put("weightError","0"); result.put("storageMoney","0"); result.put("moneyError","0"); result.put("data",new ArrayList()); result.put("count", 0); result.put("code", 0); return result; } Map totalWeightAndMoney =orderStorageInfoMapper.totalWeightAndMoney(null,partnerIds); String paramName = promoterModel.getParamName(); if(null!=paramName&&!"".equals(paramName)){ if(com.xzx.gc.util.DateUtil.isBase64(paramName)){ promoterModel.setNickName(new String(Base64.encodeBase64(paramName.getBytes()))); } else{ promoterModel.setMobilePhone(paramName); promoterModel.setName(paramName); } } String startTime = promoterModel.getStartTime(); String endTime = promoterModel.getEndTime(); if(null!=startTime&&!"".equals(startTime)){ startTime = startTime+" 00:00:00"; } if(null!=endTime&&!"".equals(endTime)){ endTime = endTime+" 23:59:59"; } promoterModel.setStartTime(startTime); promoterModel.setEndTime(endTime); PageHelper.startPage(promoterModel.getPage(),promoterModel.getLimit()); List map = otherUserMapper.queryCollectorPageList(promoterModel); PageInfo pageInfo=new PageInfo<>(map); int count = Convert.toInt(pageInfo.getTotal()); for (UserModel model:map) { BigDecimal storageWeight = new BigDecimal(model.getStorageWeight()).divide(new BigDecimal("1000"),3, BigDecimal.ROUND_CEILING); BigDecimal recycleWeight = new BigDecimal(model.getRecycleWeight()).divide(new BigDecimal("1000"),3, BigDecimal.ROUND_CEILING); BigDecimal weightError = new BigDecimal(model.getWeightError()).divide(new BigDecimal("1000"),3, BigDecimal.ROUND_CEILING); BigDecimal storageMoney = new BigDecimal(model.getStorageMoney()).divide(new BigDecimal("10000"),2, BigDecimal.ROUND_CEILING); BigDecimal recycleMoney = new BigDecimal(model.getRecycleMoney()).divide(new BigDecimal("10000"),2, BigDecimal.ROUND_CEILING); BigDecimal moneyError = new BigDecimal(model.getMoneyError()).divide(new BigDecimal("10000"),2, BigDecimal.ROUND_CEILING); model.setStorageWeight(DoubleUtil.roundSix(storageWeight.toString())); model.setStorageMoney(DoubleUtil.roundFive(storageMoney.toString())); model.setRecycleWeight(DoubleUtil.roundSix(recycleWeight.toString())); model.setRecycleMoney(DoubleUtil.roundFive(recycleMoney.toString())); model.setWeightError(DoubleUtil.roundSix(weightError.toString())); model.setMoneyError(DoubleUtil.roundFive(moneyError.toString())); int orderNum=0; List orderIds = orderMapper.queryUserOrderNum(model.getUserId(),partnerIds,startTime,endTime); model.setOrderNum(orderIds.size()); } //累计重量误差 BigDecimal weightError = new BigDecimal(totalWeightAndMoney.get("storageWeight").toString()).subtract(new BigDecimal(totalWeightAndMoney.get("recycleWeight").toString())); weightError = weightError.divide(new BigDecimal("1000"),3); //累计金额误差 BigDecimal moneyError = new BigDecimal(totalWeightAndMoney.get("storageMoney").toString()).subtract(new BigDecimal(totalWeightAndMoney.get("recycleMoney").toString())); moneyError = moneyError.divide(new BigDecimal("10000"),5); BigDecimal totalWeight = new BigDecimal(totalWeightAndMoney.get("storageWeight").toString()).divide(new BigDecimal("1000")); BigDecimal totalMoney = new BigDecimal(totalWeightAndMoney.get("storageMoney").toString()).divide(new BigDecimal("10000")); result.put("collectorNum",collectorNum.size()); result.put("storageWeight",DoubleUtil.roundSix(totalWeight.toString())); result.put("weightError",DoubleUtil.roundSix(weightError.toString())); result.put("storageMoney",DoubleUtil.roundFive(totalMoney.toString())); result.put("moneyError",DoubleUtil.roundFive(moneyError.toString())); result.put("data", map); result.put("count", count); result.put("code", 0); return result; } public void updateById(OtherUserInfo otherUserInfo){ otherUserMapper.updateByPrimaryKeySelective(otherUserInfo); } public void deleteById(String userId){ OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setUserId(userId); otherUserInfo.setDelFlag(Constants.DEL_FLAG); updateById(otherUserInfo); } public Map queryCityPartnerForOtherUser(UserModel model) { //List partnerIds = queryPartnerByCurrent(); List partnerIds = new ArrayList<>(); if(null!=model.getPartnerId()&&!"".equals(model.getPartnerId())){ partnerIds.add(model.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } List list1 = otherUserMapper.queryCityPartnerForOtherUser(partnerIds, "2"); List list2 = otherUserMapper.queryCityPartnerForOtherUser(partnerIds, "6"); Map map = new HashMap<>(); map.put("code", 0); map.put("hsyData", list1); map.put("tgyData", list2); return map; } /** * 查找最近的骑手 * @param lon * @param lat * @return */ public OtherUserInfo findNearestByLocationAndPartnerId(String partnerId,String lon, String lat){ return otherUserMapper.findNearestByLocationAndPartnerId(partnerId,lon,lat); } public OtherUserInfo findNearestByLocationAndFenceId(String fenceId,String lon, String lat){ return otherUserMapper.findNearestByLocationAndFenceId(fenceId,lon,lat); } /** * 首页智能推荐 * 规则:推荐一位最近的集货员和一位废纸报价最高的骑手。当集货员不存在则替换为最近的骑手 * @return */ public List recommend(UserRecommendParamDTO userRecommendParamDTO) { List list=new ArrayList<>(); //1:混合推荐回收员和集货员 2:推荐回收员 int type = userRecommendParamDTO.getType(); if(type==1) { //最近500m的集货员 UserGatherInfo nearestByLocation = userGatherInfoService.findNearestByLocation(userRecommendParamDTO.getLongitude(), userRecommendParamDTO.getLatitude()); if (nearestByLocation != null) { UserRecommendDTO userRecommendDTO = new UserRecommendDTO(); BeanUtil.copyProperties(nearestByLocation, userRecommendDTO); userRecommendDTO.setType(UserEnum.集货员类型.getValue()); userRecommendDTO.setRecommendType(UserEnum.距离最近集货推荐.getValue()); OtherUserInfo otherUserInfo=new OtherUserInfo(); otherUserInfo.setUserId(nearestByLocation.getUserId()); otherUserInfo.setLatitude(userRecommendParamDTO.getLatitude()); otherUserInfo.setLongitude(userRecommendParamDTO.getLongitude()); userRecommendDTO.setOtherUserInfo(otherUserInfo); list.add(userRecommendDTO); } } RecommendParamDTO recommendParamDTO=new RecommendParamDTO(); BeanUtil.copyProperties(userRecommendParamDTO,recommendParamDTO); if(CollUtil.isEmpty(list)) { //距离最近 recommendParamDTO.setRecommendType(UserEnum.距离最近骑手推荐.getValue()); OtherUserInfo otherUserInfo = recommendUser(recommendParamDTO); if (otherUserInfo != null) { UserRecommendDTO userRecommendDTO = new UserRecommendDTO(); BeanUtil.copyProperties(otherUserInfo, userRecommendDTO); userRecommendDTO.setType(UserEnum.回收员类型.getValue()); userRecommendDTO.setRecommendType(UserEnum.距离最近骑手推荐.getValue()); userRecommendDTO.setOtherUserInfo(otherUserInfo); list.add(userRecommendDTO); } } //报价最高 recommendParamDTO.setRecommendType(UserEnum.报价最高骑手推荐.getValue()); OtherUserInfo otherUserInfo = recommendUser(recommendParamDTO); if(otherUserInfo==null){ recommendParamDTO.setRecommendType(UserEnum.随机选取骑手推荐.getValue()); otherUserInfo = recommendUser(recommendParamDTO); if(otherUserInfo!=null){ UserRecommendDTO userRecommendDTO = new UserRecommendDTO(); BeanUtil.copyProperties(otherUserInfo, userRecommendDTO); userRecommendDTO.setType(UserEnum.回收员类型.getValue()); userRecommendDTO.setRecommendType(UserEnum.随机选取骑手推荐.getValue()); userRecommendDTO.setOtherUserInfo(otherUserInfo); list.add(userRecommendDTO); } }else { UserRecommendDTO userRecommendDTO = new UserRecommendDTO(); BeanUtil.copyProperties(otherUserInfo, userRecommendDTO); userRecommendDTO.setType(UserEnum.回收员类型.getValue()); userRecommendDTO.setRecommendType(UserEnum.报价最高骑手推荐.getValue()); userRecommendDTO.setOtherUserInfo(otherUserInfo); list.add(userRecommendDTO); } if(CollUtil.isNotEmpty(list)){ Long addressId = userRecommendParamDTO.getAddressId(); String createUserId=null; if(addressId!=null){ createUserId=addressService.findById(addressId).getUserId(); } if(type==2){ list=list.stream().sorted(Comparator.comparingInt(x->Convert.toInt(x.getRecommendType()))).collect(Collectors.toList()); list=CollUtil.newArrayList(list.get(0)); } for (UserRecommendDTO dto : list) { //额外的信息 UserRecommendListResDTO resDTO = getHeadInfo(dto.getOtherUserInfo(), userRecommendParamDTO.getLongitude(), userRecommendParamDTO.getLatitude(), createUserId, dto.getSysEnvironmentalInfo()); dto.setUserInfo(resDTO); } //首页推荐至少显示2条记录 if(type==1&&list.size()==1) { UserRecommendDTO dto = ObjectUtil.cloneByStream(list.get(0)); list.add(dto); } } return list; } /** * 获取回收员头部信息 * @param otherUserInfo * @param createUserId 创建用户即普通用户 * @return */ public UserRecommendListResDTO getHeadInfo(OtherUserInfo otherUserInfo, String longitude, String latitude,String createUserId,SysEnvironmentalInfo sysEnvironmentalInfo){ Long itemId = otherUserInfo.getItemId(); String userId = otherUserInfo.getUserId(); UserRecommendListResDTO resDTO=new UserRecommendListResDTO(); BeanUtil.copyProperties(otherUserInfo,resDTO); resDTO.setType(UserEnum.回收员类型.getValue()); if(StrUtil.isNotBlank(latitude)&&StrUtil.isNotBlank(longitude)) { //单位米 double distance = LocationUtils.getDistance(Convert.toDouble(otherUserInfo.getLatitude(), Convert.toDouble(0)), Convert.toDouble(otherUserInfo.getLongitude(), Convert.toDouble(0)), Convert.toDouble(latitude), Convert.toDouble(longitude)); //距离 resDTO.setDistance(businessUtil.changeWeight(Convert.toStr(NumberUtil.div(distance,1000)))); } //服务次数 List serviceOrderList = orderService.findServiceOrderByUserIdAndStatus(userId, CollUtil.newArrayList(OrderEnum.待入库.getValue(),OrderEnum.完成.getValue(),OrderEnum.入库中.getValue())); resDTO.setServiceNum(serviceOrderList.size()); //自己报价 if(itemId!=null){ Example example = new Example(SysItemPrice.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("itemId", itemId); criteria.andEqualTo("delFlag", Constants.DEL_NOT_FLAG); example.setOrderByClause("price desc"); List sysItemPrices = sysItemPriceMapper.selectByExample(example); if (CollUtil.isNotEmpty(sysItemPrices)) { BigDecimal price = CollUtil.getFirst(sysItemPrices).getPrice(); resDTO.setSelfMoney(businessUtil.changeMoney(price)); } } //平台报价 if(sysEnvironmentalInfo!=null){ resDTO.setPlatMoney(businessUtil.changeMoney(sysEnvironmentalInfo.getPrice())); } //预计时间 服务中多一个用户多1小时 int fwzNum = orderService.findListOrderReceiveTime(userId,createUserId); DateTime dateTime; String hour = DateUtil.format(new Date(), DateUtils.DATE_FORMAT_H); //超过下午6点从明天上午8点开始预约 if(Convert.toInt(hour)>=18){ String format = DateUtil.format(DateUtil.offsetDay(new Date(), 1), DateUtils.DATE_FORMAT_YMD); format=format+" 08:00:00"; dateTime = DateUtil.offsetHour(DateUtil.parse(format), fwzNum); }else{ fwzNum=fwzNum==0?1:fwzNum; dateTime = DateUtil.offsetHour(new Date(), fwzNum); } resDTO.setScheduledTime(DateUtil.format(dateTime,DateUtils.DATE_FORMAT_HM)); //排队人数 resDTO.setQueueNum(fwzNum); //是否服务过 if(StrUtil.isNotBlank(createUserId)) { long num = serviceOrderList.stream().filter(x->x.getCreateUserId().equals(createUserId)).count(); if(num>0){ resDTO.setServiceFlag(true); } } //是否高于平台 if(Convert.toBigDecimal(resDTO.getSelfMoney(),Constants.MONEY_INIT).compareTo(Convert.toBigDecimal(resDTO.getPlatMoney(),Constants.MONEY_INIT))>0){ resDTO.setHighThanPlatFlag(true); } //平均取货时间(分钟)=(所有单完成时间-接单时间)/单数 long perMinuteOrder=0; for (OrderInfo orderInfo : serviceOrderList) { String completeTime = orderInfo.getCompleteTime(); String receiveTime = orderInfo.getReceiveTime(); if(StrUtil.isNotBlank(completeTime)&&StrUtil.isNotBlank(receiveTime)){ perMinuteOrder += DateUtil.between(DateUtil.parseDateTime(receiveTime), DateUtil.parseDateTime(completeTime), DateUnit.MINUTE); } } if(CollUtil.isNotEmpty(serviceOrderList)) { resDTO.setPerMinuteOrder(perMinuteOrder / serviceOrderList.size()); }else { resDTO.setPerMinuteOrder(0); } //满意度 Example example=new Example(OrderAppraiseInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("delFlag",Convert.toShort(Constants.DEL_NOT_FLAG)); criteria.andEqualTo("receiverId",otherUserInfo.getUserId()); List orderAppraiseInfos = orderAppraiseInfoMapper.selectByExample(example); if(CollUtil.isNotEmpty(orderAppraiseInfos)) { double sum = orderAppraiseInfos.stream().mapToDouble(x -> Convert.toDouble(x.getStar(),Convert.toDouble(Constants.SCORE_MAX))).sum(); resDTO.setSatisfaction(Convert.toInt(sum/(orderAppraiseInfos.size()*Constants.SCORE_MAX)*100)); } return resDTO; } /** * 推荐骑手按 1报价最高 2:地址最近 3随机选取 */ public OtherUserInfo recommendUser(RecommendParamDTO recommendParamDTO){ OtherUserInfo tempUser = null; Long addressId = recommendParamDTO.getAddressId(); String recommendType = recommendParamDTO.getRecommendType(); FenceDto fenceDto = partnerGaodeService.findPartnerIdAndTownByLon(recommendParamDTO.getLongitude(),recommendParamDTO.getLatitude(),addressId); String fenceId=fenceDto.getFenceId(); if(StrUtil.isNotBlank(fenceId)){ String partnerId=fenceDto.getPartnerId(); //指定要排除指定骑手的合伙人 String configValue = configService.findByCode(SysConfigConstant.EXCLUDE_OTHER_PARTNER).getConfigValue(); if(StrUtil.isNotBlank(configValue)){ List partnerIdlist = Arrays.asList(configValue.split(",")); if(partnerIdlist.contains(partnerId)){ return tempUser; } } String townShipId=fenceDto.getTownId(); //平台废纸报价 SysEnvironmentalInfo sysEnvironmentalInfo = sysEnvironmentalInfoService.findByItemTypeAndAreaNotDel(Constants.PAPER_WASTE_ITEM_TYPE, Convert.toInt(townShipId)); if(UserEnum.报价最高骑手推荐.getValue().equals(recommendType)) { List otherUserInfoList; //废纸报价了的 otherUserInfoList = otherUserMapper.findOfferByFenceId(fenceId, Constants.PAPER_WASTE_ITEM_TYPE); if (CollUtil.isEmpty(otherUserInfoList)) { otherUserInfoList = otherUserMapper.findOfferByPartnerId(partnerId, Constants.PAPER_WASTE_ITEM_TYPE); } if (sysEnvironmentalInfo != null) { //找出报价最高的 BigDecimal temp = Convert.toBigDecimal(sysEnvironmentalInfo.getPrice()); for (OtherUserInfo otherUserInfo : otherUserInfoList) { Long itemId = otherUserInfo.getItemId(); Example example = new Example(SysItemPrice.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("itemId", itemId); criteria.andEqualTo("delFlag", Constants.DEL_NOT_FLAG); example.setOrderByClause("price desc"); List sysItemPrices = sysItemPriceMapper.selectByExample(example); if (CollUtil.isNotEmpty(sysItemPrices)) { BigDecimal price = CollUtil.getFirst(sysItemPrices).getPrice(); if (price.compareTo(temp) > 0) { temp = price; tempUser = otherUserInfo; } } } } }else if(UserEnum.距离最近骑手推荐.getValue().equals(recommendType)){ //查找最近的骑手 OtherUserInfo nearestByLocation1; nearestByLocation1 = findNearestByLocationAndFenceId(fenceId, recommendParamDTO.getLongitude(), recommendParamDTO.getLatitude()); if (nearestByLocation1 == null) { nearestByLocation1 = findNearestByLocationAndPartnerId(partnerId, recommendParamDTO.getLongitude(), recommendParamDTO.getLatitude()); } tempUser= nearestByLocation1; }else if(UserEnum.随机选取骑手推荐.getValue().equals(recommendType)){ List byUserTypeAndPartner; byUserTypeAndPartner = findByUserTypeAndFenceIdForNotLeave( fenceId); if(CollUtil.isEmpty(byUserTypeAndPartner)){ byUserTypeAndPartner = findByUserTypeAndPartnerIdForNotLeave( partnerId); } if(CollUtil.isNotEmpty(byUserTypeAndPartner)){ OtherUserInfo otherUserInfo = RandomUtil.randomEle(byUserTypeAndPartner); tempUser=otherUserInfo; } } //设置平台报价信息 if(tempUser!=null){ tempUser.setSysEnvironmentalInfo(sysEnvironmentalInfo); //围栏ID tempUser.setOrderFenceId(fenceId); } } return tempUser; } /** * 全部推荐 * @param paramDTO * @return */ public List recommendList(UserRecommendListParamDTO paramDTO) { List list=new ArrayList<>(); FenceDto fenceDto = partnerGaodeService.findPartnerIdAndTownByLon(paramDTO.getLongitude(),paramDTO.getLatitude(),paramDTO.getAddressId()); String fenceId = fenceDto.getFenceId(); if(StrUtil.isNotBlank(fenceId)){ String partnerId=fenceDto.getPartnerId(); //指定要排除指定骑手的合伙人 String configValue = configService.findByCode(SysConfigConstant.EXCLUDE_OTHER_PARTNER).getConfigValue(); if(StrUtil.isNotBlank(configValue)){ List partnerIdlist = Arrays.asList(configValue.split(",")); if(partnerIdlist.contains(partnerId)){ return list; } } String townShipId=fenceDto.getTownId(); //平台废纸报价 SysEnvironmentalInfo sysEnvironmentalInfo = sysEnvironmentalInfoService.findByItemTypeAndAreaNotDel(Constants.PAPER_WASTE_ITEM_TYPE, Convert.toInt(townShipId)); List otherUserInfoList; otherUserInfoList = otherUserMapper.findAllOfferByFenceId(fenceId, Constants.PAPER_WASTE_ITEM_TYPE); if(CollUtil.isEmpty(otherUserInfoList)){ otherUserInfoList = otherUserMapper.findAllOfferByPartnerId(partnerId, Constants.PAPER_WASTE_ITEM_TYPE); } for (OtherUserInfo otherUserInfo : otherUserInfoList) { otherUserInfo.setOrderFenceId(fenceId); UserRecommendListResDTO resDTO = getHeadInfo(otherUserInfo, paramDTO.getLongitude(), paramDTO.getLatitude(), paramDTO.getUserId(),sysEnvironmentalInfo); list.add(resDTO); } //排序 if(CollUtil.isNotEmpty(list)) { String filterType = paramDTO.getFilterType(); String filterOrder = paramDTO.getFilterOrder(); //服务次数 if("1".equals(filterType)){ //升序 if("1".equals(filterOrder)){ list=list.stream().sorted(Comparator.comparingInt(UserRecommendListResDTO::getServiceNum)).collect(Collectors.toList()); }else{ list=list.stream().sorted(Comparator.comparingInt(UserRecommendListResDTO::getServiceNum).reversed()).collect(Collectors.toList()); } }else if("2".equals(filterType)){ //距离 //升序 if("1".equals(filterOrder)){ CollUtil.sort(list, (o1, o2) -> { if(Convert.toBigDecimal(o1.getDistance()).compareTo(Convert.toBigDecimal(o2.getDistance()))>0){ return -1; }else if(Convert.toBigDecimal(o1.getDistance()).compareTo(Convert.toBigDecimal(o2.getDistance()))==0){ return 0; }else { return 1; } }); }else{ CollUtil.sort(list, (o1, o2) -> { if(Convert.toBigDecimal(o1.getDistance()).compareTo(Convert.toBigDecimal(o2.getDistance()))>0){ return 1; }else if(Convert.toBigDecimal(o1.getDistance()).compareTo(Convert.toBigDecimal(o2.getDistance()))==0){ return 0; }else { return -1; } }); } }else if("3".equals(filterType)){ //价格 //升序 if("1".equals(filterOrder)){ CollUtil.sort(list, (o1, o2) -> { if(Convert.toBigDecimal(o1.getSelfMoney(),Constants.MONEY_INIT).compareTo(Convert.toBigDecimal(o2.getSelfMoney(),Constants.MONEY_INIT))>0){ return -1; }else if(Convert.toBigDecimal(o1.getSelfMoney(),Constants.MONEY_INIT).compareTo(Convert.toBigDecimal(o2.getSelfMoney(),Constants.MONEY_INIT))==0){ return 0; }else { return 1; } }); }else{ CollUtil.sort(list, (o1, o2) -> { if(Convert.toBigDecimal(o1.getSelfMoney(),Constants.MONEY_INIT).compareTo(Convert.toBigDecimal(o2.getSelfMoney(),Constants.MONEY_INIT))>0){ return 1; }else if(Convert.toBigDecimal(o1.getSelfMoney(),Constants.MONEY_INIT).compareTo(Convert.toBigDecimal(o2.getSelfMoney(),Constants.MONEY_INIT))==0){ return 0; }else { return -1; } }); } } } } return list; } public OtherUserInfo findByOrderId(OtherUserLocationParamDTO otherUserLocationParamDTO) { String orderId = otherUserLocationParamDTO.getOrderId(); OrderInfo byId = orderService.findById(orderId); String orderType = byId.getOrderType(); String receiver = byId.getReceiver(); if(!OrderEnum.集货.getValue().equals(orderType)&&StrUtil.isNotBlank(receiver)){ return findById(receiver); } return null; } }