| 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.DateUtil; | 
| import cn.hutool.core.util.NumberUtil; | 
| import cn.hutool.core.util.StrUtil; | 
| import cn.hutool.json.JSONUtil; | 
| import com.github.pagehelper.PageHelper; | 
| import com.github.pagehelper.PageInfo; | 
| import com.xzx.gc.common.constant.CommonEnum; | 
| import com.xzx.gc.common.constant.Constants; | 
| import com.xzx.gc.common.constant.OrderEnum; | 
| import com.xzx.gc.common.constant.RedisKeyConstant; | 
| import com.xzx.gc.common.exception.RestException; | 
| import com.xzx.gc.common.utils.*; | 
| import com.xzx.gc.entity.*; | 
| import com.xzx.gc.model.admin.CollectorModel; | 
| import com.xzx.gc.model.admin.PromoterModel; | 
| import com.xzx.gc.model.admin.UserModel; | 
| import com.xzx.gc.model.user.*; | 
| import com.xzx.gc.user.dto.AddressDto; | 
| import com.xzx.gc.user.dto.RayaltyDto; | 
| import com.xzx.gc.user.mapper.*; | 
| import com.xzx.gc.util.DoubleUtil; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.codec.binary.Base64; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.util.CollectionUtils; | 
| import tk.mybatis.mapper.common.example.SelectByExampleMapper; | 
| import tk.mybatis.mapper.entity.Example; | 
|   | 
| import javax.servlet.http.HttpServletRequest; | 
| import java.io.UnsupportedEncodingException; | 
| import java.math.BigDecimal; | 
| import java.math.RoundingMode; | 
| import java.util.*; | 
| import java.util.stream.Collectors; | 
|   | 
| @Service | 
| @Transactional | 
| @Slf4j | 
| public class UserService { | 
|     @Autowired | 
|     private UserMapper userMapper; | 
|   | 
|     @Autowired | 
|     private UserLoginInfoMapper userLoginInfoMapper; | 
|   | 
|   | 
|     @Autowired | 
|     private HttpServletRequest request; | 
|   | 
|     @Autowired | 
|     private UserTargetInfoMapper userTargetInfoMapper; | 
|   | 
|     @Autowired | 
|     private RedisUtil redisUtil; | 
|   | 
|     @Autowired | 
|     private OrderMapper orderMapper; | 
|   | 
|     @Autowired | 
|     private OtherUserService otherUserService; | 
|   | 
|     @Autowired | 
|     private BusinessUtil businessUtil; | 
|   | 
|     @Autowired | 
|     private WeightItemPriceService weightItemPriceService; | 
|   | 
|     @Autowired | 
|     private AccountService accountService; | 
|   | 
|     @Autowired | 
|     private PartnerGaodeService partnerGaodeService; | 
|   | 
|     @Autowired | 
|     private CityPartnerService cityPartnerService; | 
|   | 
|     @Autowired | 
|     private OtherUserMapper otherUserMapper; | 
|   | 
|     @Autowired | 
|     private AddressMapper addressMapper; | 
|   | 
|     @Autowired | 
|     private PayInfoMapper payInfoMapper; | 
|   | 
|     @Autowired | 
|     private OrderStorageInfoMapper orderStorageInfoMapper; | 
|   | 
|     @Autowired | 
|     private SysStorageMapper sysStorageMapper; | 
|   | 
|     @Autowired | 
|     private OrderService orderService; | 
|   | 
|     public List<UserInfo> findForBidden() { | 
|         UserInfo userInfo = new UserInfo(); | 
|         userInfo.setDelFlag(Constants.DEL_NOT_FLAG); | 
|         List<UserInfo> userInfo1 = userMapper.select(userInfo); | 
|         return userInfo1; | 
|     } | 
|   | 
|   | 
|     public List<AccountVo> queryMyMoney(AccountReq accountReq) { | 
|         Map map = new HashMap(); | 
|         map.put("userId", accountReq.getUserId()); | 
|         List<AccountVo> list = userMapper.queryMyMoneyWithStatus(map); | 
|   | 
|         if (!CollectionUtils.isEmpty(list)) { | 
|             //获取回收订单完成次数 | 
|             map.put("receiver", accountReq.getUserId()); | 
|             map.put("orderType", OrderEnum.回收.getValue()); | 
|             map.put("orderStatus", OrderEnum.完成.getValue()); | 
|             String recycleCount = orderMapper.orderCountStat(map); | 
|             //回收员完成订单数 | 
|             list.get(0).setRecycleCompleteOrderCount(recycleCount); | 
|   | 
|             //我的环保金和积分 | 
|             String money = list.get(0).getMoney(); | 
|             String collectScore = list.get(0).getCollectScore(); | 
|             list.get(0).setMoney(businessUtil.changeMoney(money)); | 
|             list.get(0).setCollectScore(businessUtil.changeMoney(collectScore)); | 
|   | 
|   | 
|             //未结算的提成 | 
|             if (businessUtil.isApp(request.getHeader("clientType"))) { | 
|                 RayaltyDto byReceiver = weightItemPriceService.findByReceiver(accountReq.getUserId()); | 
|                 list.get(0).setNotPay(byReceiver.getNotPay()); | 
|             } | 
|   | 
|   | 
|             list.stream().forEach(x -> { | 
|                 if (StringUtils.isNotBlank(x.getPayPassword())) { | 
|                     //存在支付密码 | 
|                     x.setPayPassword("true"); | 
|                 } | 
|             }); | 
|   | 
|             //格式化 | 
|             list.get(0).setOverdraftLimit(businessUtil.changeMoney(list.get(0).getOverdraftLimit())); | 
|             list.get(0).setFreezeMoney(businessUtil.changeMoney(list.get(0).getFreezeMoney())); | 
|             list.get(0).setWithdrawMoney(businessUtil.changeMoney(list.get(0).getWithdrawMoney())); | 
|   | 
|         } | 
|   | 
|         return list; | 
|     } | 
|   | 
|   | 
|     public List<UserInfoVo> queryUserInfo(UserReq userReq) { | 
|         List<UserInfoVo> list = userMapper.queryUserInfo(userReq); | 
|         return list; | 
|     } | 
|   | 
|     public UserInfoVo queryUserInfoByUserId(String userId) { | 
|         UserInfoVo userInfoVo = userMapper.queryUserInfoByUserId(userId); | 
|         if (userInfoVo != null) { | 
|             userInfoVo.setNickName(com.xzx.gc.common.utils.StringUtils.decode(userInfoVo.getNickName())); | 
|             userInfoVo.setAvatarUrl(userInfoVo.getAvatar()); | 
|         } | 
|         return userInfoVo; | 
|     } | 
|   | 
|   | 
|     public String VerifyPayPassword(AccountReq accountReq) { | 
|         String userId = accountReq.getUserId(); | 
|         AccountReq req = new AccountReq(); | 
|         req.setUserId(userId); | 
|         // 查询是否被锁定 | 
|         List<AccountVo> list = userMapper.queryIsLock(userId); | 
|         AccountVo vo = list.get(0); | 
|         //错误次数 | 
|         int errorTimes = vo.getErrorTimes() == null ? 0 : vo.getErrorTimes(); | 
|         //锁定时间 | 
|         String lockTime = vo.getLockTime(); | 
|   | 
|         if (errorTimes >= Constants.PAY_ERROR_NUM) { | 
|             //判断当前时间超出锁定时间1天。 错误次数重置为0. | 
|             long l = DateUtil.betweenDay(DateUtil.parse(lockTime, DateUtils.DATE_FORMAT_YMDHMS), new Date(), false); | 
|             if (l >= 1) { | 
|                 errorTimes = 0; | 
|             } | 
|         } | 
|   | 
|         if (errorTimes >= Constants.PAY_ERROR_NUM) { | 
|             return "isLock"; | 
|         } | 
|   | 
|         List<AccountVo> accountList = userMapper.queryAccountInfo(accountReq); | 
|         if (CollUtil.isNotEmpty(accountList)) { | 
|             req.setErrorTimes(0); | 
|             req.setLockTime(""); | 
|             req.setLastErrorTime(""); | 
|             userMapper.setLock(req); | 
|             return "success"; | 
|         } else { | 
|             errorTimes++; | 
|             req.setErrorTimes(errorTimes); | 
|             req.setLastErrorTime(DateUtil.now()); | 
|             if (errorTimes >= Constants.PAY_ERROR_NUM) { | 
|                 req.setLockTime(DateUtil.now()); | 
|             } | 
|             userMapper.setLock(req); | 
|             if (errorTimes >= Constants.PAY_ERROR_NUM) { | 
|                 return "isLock"; | 
|             } else { | 
|                 return errorTimes + ""; | 
|             } | 
|         } | 
|   | 
|     } | 
|   | 
|   | 
|     public int AddPayPassword(AccountReq accountReq) { | 
|         int returnvalue = 0; | 
|         try { | 
|             returnvalue = userMapper.modifyPayPassword(accountReq); | 
|         } catch (Exception e) { | 
|             ExceptionUtils.err("支付密码新增失败", e); | 
|         } | 
|         return returnvalue; | 
|     } | 
|   | 
|   | 
|     public void updateAddr(AddressDto addressDto) { | 
|         UserInfo userInf = new UserInfo(); | 
|         userInf.setUserId(addressDto.getUserId()); | 
|         userInf.setLatitude(addressDto.getLatitude()); | 
|         userInf.setLongitude(addressDto.getLongitude()); | 
|   | 
|         //根据经纬度查询围栏及合伙人 | 
|         UserInfo byId = findById(userInf.getUserId()); | 
|         if (StrUtil.isBlank(byId.getPartnerId())) { | 
|             String partnerIdByLon = partnerGaodeService.findPartnerIdByLon(addressDto.getLongitude(), addressDto.getLatitude()); | 
|             userInf.setPartnerId(partnerIdByLon); | 
|         } | 
|         userMapper.updateByPrimaryKeySelective(userInf); | 
|     } | 
|   | 
|   | 
|     public int ModifyPayPassword(AccountReq accountReq) { | 
|         int returnvalue = 0; | 
|         String mobilePhone = accountReq.getMobilePhone(); | 
|         if (SpringUtil.isProdOrCloud()) { | 
|             String redisVerifyCode = ""; | 
|             redisVerifyCode = redisUtil.get(Constants.REDIS_USER_KEY + "code:" + mobilePhone); | 
|   | 
|   | 
|             if (redisVerifyCode == null || "".equals(redisVerifyCode)) { | 
|                 //验证码失效 | 
|                 returnvalue = -1; | 
|                 return returnvalue; | 
|             } else if (!redisVerifyCode.equals(accountReq.getVerifyCode())) { | 
|                 //验证码错误 | 
|                 returnvalue = -2; | 
|                 return returnvalue; | 
|             } | 
|         } | 
|   | 
|         //判断手机是否是自己 | 
|         AccountInfo select = accountService.findByUserIdForbidden(accountReq.getUserId()); | 
|         if (select == null || !select.getAccountName().equals(mobilePhone)) { | 
|             return -3; | 
|         } | 
|   | 
|   | 
|         returnvalue = userMapper.modifyPayPassword(accountReq); | 
|         return returnvalue; | 
|     } | 
|   | 
|   | 
|     public UserInfo findByMobile(String mobilePhone) { | 
|         UserInfo userInfo = new UserInfo(); | 
|         userInfo.setMobilePhone(mobilePhone); | 
|         userInfo.setDelFlag(Constants.DEL_NOT_FLAG); | 
|         userInfo.setIsProhibit(false); | 
|         UserInfo userInfo1 = userMapper.selectOne(userInfo); | 
|         return userInfo1; | 
|     } | 
|   | 
|   | 
|     public UserInfo findByMobileForbidden(String mobilePhone) { | 
|         UserInfo userInfo = new UserInfo(); | 
|         userInfo.setMobilePhone(mobilePhone); | 
|         userInfo.setDelFlag(Constants.DEL_NOT_FLAG); | 
|         UserInfo userInfo1 = userMapper.selectOne(userInfo); | 
|         return userInfo1; | 
|     } | 
|   | 
|   | 
|     public UserInfo findByOpenId(String openId) { | 
|         UserInfo userInfo = new UserInfo(); | 
|         userInfo.setOpenId(openId); | 
|         userInfo.setDelFlag(Constants.DEL_NOT_FLAG); | 
|         userInfo.setIsProhibit(false); | 
|         UserInfo userInfo1 = userMapper.selectOne(userInfo); | 
|         return userInfo1; | 
|     } | 
|   | 
|     /** | 
|      * 更新用户缓存信息 | 
|      * | 
|      * @param byMobileForbidden | 
|      */ | 
|     public void setRedisUserInfo(UserInfo byMobileForbidden) { | 
|         if (redisUtil.exists(RedisKeyConstant.TOKEN + byMobileForbidden.getUserId())) { | 
|             String hget = redisUtil.hget(RedisKeyConstant.USER_INFO, byMobileForbidden.getOpenId()); | 
|             if (StrUtil.isNotBlank(hget)) { | 
|                 UserInfoVo vo = JSONUtil.toBean(hget, UserInfoVo.class); | 
|                 UserInfoVo userInfoVo = queryUserInfoByUserId(byMobileForbidden.getUserId()); | 
|                 userInfoVo.setToken(vo.getToken()); | 
|                 redisUtil.hset(RedisKeyConstant.USER_INFO, byMobileForbidden.getOpenId(), JSONUtil.toJsonStr(userInfoVo)); | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     public UserInfo findById(String id) { | 
|         return userMapper.selectByPrimaryKey(id); | 
|     } | 
|   | 
|     public List<UserInfo> findByDistance() { | 
|         return userMapper.findByDistance(); | 
|     } | 
|   | 
|   | 
|     public List<UserInfo> find() { | 
|         UserInfo userInfo = new UserInfo(); | 
|         userInfo.setDelFlag(0); | 
|         userInfo.setIsProhibit(false); | 
|         List<UserInfo> userInfo1 = userMapper.select(userInfo); | 
|         return userInfo1; | 
|     } | 
|   | 
|   | 
|     public void updateById(UserInfo userInfo) { | 
|         userMapper.updateByPrimaryKeySelective(userInfo); | 
|     } | 
|   | 
|     public PageInfo<UserDTO> findOtherAll(int pageNo, int pageSize, String keyword) { | 
|         PageHelper.startPage(pageNo, pageSize); | 
|         List<UserDTO> list = userMapper.findOtherAll(keyword); | 
|         return new PageInfo<>(list); | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 查询手机号码 | 
|      * | 
|      * @param userId | 
|      * @param type   类型 0普通用户 1平台用户 | 
|      * @return | 
|      */ | 
|     public String findOtherByUserId(String userId, int type) { | 
|         if (businessUtil.isApp(request.getHeader("clientType"))) { | 
|             OtherUserInfo byId = otherUserService.findById(userId); | 
|             if (byId != null) return byId.getMobilePhone(); | 
|         } else { | 
|             UserInfo byId = userMapper.selectByPrimaryKey(userId); | 
|             if (byId != null) return byId.getMobilePhone(); | 
|         } | 
|         return "未知"; | 
|     } | 
|   | 
|   | 
|     public Map<String, Object> queryCuserForTimeList(UserModel userModel) { | 
|         List<String> partnerIds = cityPartnerService.queryPartnerByCurrent(); | 
|         String partnerId = ""; | 
|         if (null != partnerIds && partnerIds.size() > 0) { | 
|             partnerId = partnerIds.get(0); | 
|         } else { | 
|             partnerId = userModel.getPartnerId(); | 
|         } | 
|         String startTime = userModel.getStartTime(); | 
|         String endTime = userModel.getEndTime(); | 
|         String phone = userModel.getMobilePhone(); | 
|         String isProhibit = userModel.getIsProhibit(); | 
|   | 
|         if (null != startTime && !"".equals(startTime)) { | 
|             startTime = startTime + " 00:00:00"; | 
|         } | 
|         if (null != endTime && !"".equals(endTime)) { | 
|             endTime = endTime + " 23:59:59"; | 
|         } | 
|   | 
|         Map<String, Object> m = new HashMap<>(); | 
|         PageHelper.startPage(userModel.getPage(), userModel.getLimit()); | 
|         List<UserModel> map = userMapper.queryCuserForTimeList(phone, startTime, endTime, userModel.getUserType(), isProhibit, partnerId); | 
|         PageInfo<UserModel> pageInfo = new PageInfo<>(map); | 
|         List<String> orderStatus1 = new ArrayList<>(); | 
|         List<String> orderStatus2 = new ArrayList<>(); | 
|         orderStatus1.add("3"); | 
|         orderStatus2.add("4"); | 
|         orderStatus2.add("5"); | 
|         orderStatus2.add("7"); | 
|         for (UserModel mx : map) { | 
|   | 
|             //设置登录时间 | 
|             if (userModel.getExportFlag() == 0) { | 
|                 Example example = new Example(UserLoginInfo.class); | 
|                 Example.Criteria criteria = example.createCriteria(); | 
|                 criteria.andEqualTo("userId", mx.getUserId()); | 
|                 example.setOrderByClause("login_time desc"); | 
|                 List<UserLoginInfo> userLoginInfos = userLoginInfoMapper.selectByExample(example); | 
|                 if (CollUtil.isNotEmpty(userLoginInfos)) { | 
|                     mx.setLoginTime(CollUtil.getFirst(userLoginInfos).getLoginTime()); | 
|                 } | 
|             } | 
|   | 
|             if (!StringUtils.isEmpty(mx.getNickName())) { | 
|                 mx.setNickName(com.xzx.gc.common.utils.StringUtils.decode(mx.getNickName())); | 
|             } | 
|             // 待完成订单总数 | 
|             Map<String, Object> osMap = orderMapper.queryCuserOrderByUserIdCount1(mx.getUserId()); | 
|             mx.setOrderStatus3(Integer.parseInt(osMap.get("count1").toString())); | 
|             mx.setOrderStatus5(Integer.parseInt(osMap.get("count").toString())); | 
|   | 
|             //查询用户首次下单时间和最近下单时间 | 
|             List<OrderInfo> byCreateUserId = orderService.findByCreateUserId(mx.getUserId(), null); | 
|             if(CollUtil.isNotEmpty(byCreateUserId)) { | 
|                 mx.setOrderRecentTime(CollUtil.getFirst(byCreateUserId).getCreateTime()); | 
|                 mx.setOrderFirstTime(CollUtil.getLast(byCreateUserId).getCreateTime()); | 
|             } | 
|   | 
|             if (userModel.getExportFlag() == 0) { | 
|                 String yqName = userTargetInfoMapper.queryTgNameByRealUserId(mx.getMobilePhone()); | 
|                 String tgName = userTargetInfoMapper.queryTgNameByUserId(mx.getMobilePhone()); | 
|                 mx.setTgName(StrUtil.isBlank(tgName) ? "无" : tgName); | 
|                 mx.setYqName(StrUtil.isBlank(yqName) ? "无" : yqName); | 
|                 String upid = mx.getPartnerId(); | 
|                 StringBuffer partnerName = new StringBuffer(); | 
|                 if (null != upid && !"".equals(upid)) { | 
|                     String[] pIds = upid.split(","); | 
|                     for (String pid : pIds) { | 
|                         CityPartner cityPartner = cityPartnerService.findById(Convert.toInt(pid)); | 
|                         partnerName.append(cityPartner.getPartnerName()).append(","); | 
|                     } | 
|                     String ax = partnerName.toString(); | 
|                     if (null != ax && !"".equals(ax)) { | 
|                         ax = ax.substring(0, ax.length() - 1); | 
|                         mx.setPartnerName(ax); | 
|   | 
|                     } else { | 
|                         mx.setPartnerName("-"); | 
|                     } | 
|                 } else { | 
|                     mx.setPartnerName("-"); | 
|                 } | 
|             } | 
|         } | 
|         m.put("count", pageInfo.getTotal()); | 
|         m.put("data", map); | 
|         m.put("code", 0); | 
|   | 
|         //不是导出的情况 | 
|         if (userModel.getExportFlag() == 0) { | 
|             // 总用户量 | 
|             int allNomUser = userMapper.queryCuserForTimeListCount(null, null, null, null, partnerId); | 
|             // 今日新增用户 | 
|             String dbTime = DateUtil.today(); | 
|             String[] dt = dbTime.split(" "); | 
|             String stTime = dt[0] + " 00:00:00"; | 
|             String edTime = dt[0] + " 23:59:59"; | 
|             int todayNewUser = userMapper.queryCuserForTimeListCount(null, stTime, edTime, null, partnerId); | 
|             //日活跃用户 | 
|             //查询日活 | 
|             int userVisit = 0; | 
|             Map<String, Object> dayCountMap = userLoginInfoMapper.queryUserDayCount(userModel.getTownIds()); | 
|             if (null != dayCountMap && null != dayCountMap.get("userDayCount")) { | 
|                 userVisit = Integer.parseInt(dayCountMap.get("userDayCount").toString()); | 
|             } | 
|             m.put("allNomUser", allNomUser); | 
|             m.put("todayNewUser", todayNewUser); | 
|             m.put("userVisit", userVisit); | 
|         } | 
|         return m; | 
|     } | 
|   | 
|   | 
|     public void UpdateUserApiByUserId(String isProhibit, String userId, String userType) { | 
|         UserInfo userModel = findById(userId); | 
|         boolean bool = false; | 
|         if (isProhibit.equals("1")) { | 
|             bool = true; | 
|             if (userModel == null) { | 
|                 if (userType.equals("6")) { | 
|                     userTargetInfoMapper.UpdateUserApiByTargetUserId(bool, userId); | 
|                 } | 
|                 otherUserMapper.UpdateUserApiByOtherUserId(bool, userId, userType); | 
|             } else { | 
|                 if (userType.equals("6")) { | 
|                     userTargetInfoMapper.UpdateUserApiByTargetUserId(bool, userId); | 
|                 } | 
|                 userMapper.UpdateUserApiByUserId(bool, userId); | 
|             } | 
|   | 
|         } else { | 
|             if (userModel == null) { | 
|                 if (userType.equals("6")) { | 
|                     userTargetInfoMapper.UpdateUserApiByTargetUserId(bool, userId); | 
|                 } | 
|                 otherUserMapper.UpdateUserApiByOtherUserId(bool, userId, userType); | 
|             } else { | 
|                 if (userType.equals("6")) { | 
|                     userTargetInfoMapper.UpdateUserApiByTargetUserId(bool, userId); | 
|                 } | 
|                 userMapper.UpdateUserApiByUserId(bool, userId); | 
|   | 
|             } | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * C端用户管理---用户查询----详情 | 
|      * | 
|      * @param userId | 
|      * @param phone | 
|      * @param userType | 
|      * @return | 
|      */ | 
|     public Map<String, Object> queryCuserDetail(String userId, String phone, String userType, int limit, int page) { | 
|         int p = page; | 
|         p = (p - 1) * limit; | 
|         Map<String, Object> m = new HashMap<>(); | 
|         // 查询用户信息 | 
|         m.put("user", userMapper.queryCuserDetail(phone, userType)); | 
|         // 查询用户地址 | 
|         m.put("address", addressMapper.queryCuserAddress(phone, userId)); | 
|   | 
|         m.put("userOrderList", orderMapper.queryUserOrderList(userId)); | 
|         // 查询统计用户的订单, 这里面问题,如是普通用户对应为create_userid, 如是回收员或代丢员对应为recice | 
|         Integer[] x = new Integer[2]; | 
|         x[0] = 4; | 
|         x[1] = 5; | 
|         List<Map<String, Object>> om = orderMapper.queryCuserOrderCount(userId, x); | 
|         m.put("orderNum", om); | 
|         return m; | 
|     } | 
|   | 
|     /** | 
|      * 推广员列表 | 
|      */ | 
|     public Map<String, Object> queryPromoterApiList(UserModel userModel) { | 
|         List<String> partnerIds = new ArrayList<>(); | 
|         if (null != userModel.getPartnerId() && !"".equals(userModel.getPartnerId())) { | 
|             partnerIds.add(userModel.getPartnerId()); | 
|         } else { | 
|             partnerIds = cityPartnerService.queryPartnerByCurrent(); | 
|         } | 
|   | 
|         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"; | 
|         } | 
|         String phone = userModel.getMobilePhone(); | 
|         Map<String, Object> m = new HashMap<>(); | 
|   | 
|         List<UserModel> list = new ArrayList<>(); | 
|         PageHelper.startPage(userModel.getPage(), userModel.getLimit()); | 
|         list = otherUserMapper.queryPromoterApiList(phone, startTime, endTime, userModel.getIsProhibit(), partnerIds); | 
|         PageInfo<UserModel> pageInfo = new PageInfo<>(list); | 
|   | 
|         for (UserModel model : list) { | 
|             String nickName = model.getNickName(); | 
|             if (nickName != null && !"".equals(nickName)) { | 
|                 nickName = com.xzx.gc.common.utils.StringUtils.decode(model.getNickName()); | 
|             } | 
|             if (null != model.getFinishNum()) { | 
|                 model.setRegistNum(String.valueOf(Integer.parseInt(model.getFinishNum()) + Integer.parseInt(model.getRegistNum()))); | 
|             } else { | 
|                 model.setRegistNum(model.getRegistNum()); | 
|             } | 
|             model.setNickName(nickName); | 
|             if (null != model.getFinishNum()) { | 
|                 String finishNum = model.getFinishNum(); | 
|                 String registNum = model.getRegistNum(); | 
|                 BigDecimal rate = new BigDecimal("0"); | 
|                 if (null != registNum && !"".equals(registNum)) { | 
|                     if (registNum.equals("0")) { | 
|                         rate = new BigDecimal("0"); | 
|                     } else { | 
|                         rate = new BigDecimal(finishNum).divide(new BigDecimal(registNum), 3, BigDecimal.ROUND_DOWN); | 
|                     } | 
|                 } | 
|                 model.setFinishRate(rate.multiply(new BigDecimal("100")).toString() + "%"); | 
|             } else { | 
|                 model.setFinishRate("0" + "%"); | 
|             } | 
|         } | 
|         m.put("data", list); | 
|         m.put("count", pageInfo.getTotal()); | 
|         m.put("code", 0); | 
|         return m; | 
|     } | 
|   | 
|     public Map<String, Object> queryCollectorApiList(CollectorModel userModel) { | 
|         List<String> partnerIds = new ArrayList<>(); | 
|         if (null != userModel.getPartnerId() && !"".equals(userModel.getPartnerId())) { | 
|             partnerIds.add(userModel.getPartnerId()); | 
|         } else { | 
|             partnerIds = cityPartnerService.queryPartnerByCurrent(); | 
|         } | 
|         userModel.setPartnerIds(partnerIds); | 
|   | 
|         PageHelper.startPage(userModel.getPage(), userModel.getLimit()); | 
|         List<CollectorModel> list = otherUserMapper.queryCollectorApiList(userModel); | 
|         PageInfo<CollectorModel> pageInfo = new PageInfo<>(list); | 
|   | 
|         for (CollectorModel collectorModel : list) { | 
|             String nickName = ""; | 
|             if (null != collectorModel.getStorageWeight() && !"".equals(collectorModel.getStorageWeight())) { | 
|                 collectorModel.setStorageWeight(DoubleUtil.roundThree(collectorModel.getStorageWeight())); | 
|   | 
|             } else { | 
|                 collectorModel.setStorageWeight("0"); | 
|             } | 
|             if (null != collectorModel.getStorageMoney() && !"".equals(collectorModel.getStorageMoney())) { | 
|                 collectorModel.setStorageMoney(DoubleUtil.roundTwo(collectorModel.getStorageMoney())); | 
|   | 
|             } else { | 
|                 collectorModel.setStorageMoney("0"); | 
|             } | 
|             if (collectorModel.getNickName() != null) { | 
|                 nickName = com.xzx.gc.common.utils.StringUtils.decode(collectorModel.getNickName()); | 
|             } | 
|             collectorModel.setNickName(nickName); | 
|   | 
|             //回收员统计按重量支出返利 | 
|             String totalWeightMoney = payInfoMapper.queryCollectorWM(collectorModel.getUserId()); | 
|             collectorModel.setWeightMoney(DoubleUtil.roundTwo(totalWeightMoney)); | 
|         } | 
|   | 
|         //如果为入库员,需要管理订单数量 | 
|         if (userModel.getUserType().equals("4")) { | 
|             for (CollectorModel collectorModel : list) { | 
|                 String userId = collectorModel.getUserId(); | 
|                 int orderNum = 0; | 
|                 List<String> orderList = orderStorageInfoMapper.orderListByStorageUserId(userId); | 
|                 for (String orderIds : orderList) { | 
|                     orderNum = orderNum + orderIds.split(",").length; | 
|                 } | 
|                 collectorModel.setOrderNum(orderNum); | 
|                 //仓库名称 | 
|                 String sysStorage = sysStorageMapper.querySysStorageNameById(collectorModel.getSysStorageId()); | 
|                 collectorModel.setSysStorage(sysStorage); | 
|             } | 
|         } | 
|         Map<String, Object> resultMap = new HashMap<>(); | 
|         resultMap.put("code", 0); | 
|         resultMap.put("data", list); | 
|         resultMap.put("count", pageInfo.getTotal()); | 
|         return resultMap; | 
|     } | 
|   | 
|     public Map<String, Object> queryPackageApiList(CollectorModel userModel) { | 
|         List<String> partnerIds = new ArrayList<>(); | 
|         if (null != userModel.getPartnerId() && !"".equals(userModel.getPartnerId())) { | 
|             List<CityPartner> packageIdByPartnerId = cityPartnerService.findPackageIdByPartnerId(userModel.getPartnerId()); | 
|             if (CollUtil.isNotEmpty(packageIdByPartnerId)) { | 
|                 partnerIds = packageIdByPartnerId.stream().map(x -> x.getId().toString()).collect(Collectors.toList()); | 
|             } | 
|             partnerIds.add(userModel.getPartnerId()); | 
|   | 
|             //partnerIds.add(userModel.getPartnerId()); | 
|         } else { | 
|             partnerIds = cityPartnerService.queryPartnerByCurrent(); | 
|         } | 
|         if (null != partnerIds && partnerIds.size() > 0) { | 
|             List<CityPartner> packageIdByPartnerId = cityPartnerService.findPackageIdByPartnerId(partnerIds.get(0)); | 
|   | 
|             for (CityPartner packageId : packageIdByPartnerId) { | 
|                 partnerIds.add(packageId.getId().toString()); | 
|             } | 
|         } | 
|   | 
|         userModel.setPartnerIds(partnerIds); | 
|   | 
|         PageHelper.startPage(userModel.getPage(), userModel.getLimit()); | 
|         List<CollectorModel> list = otherUserMapper.queryCollectorApiList(userModel); | 
|         PageInfo<CollectorModel> pageInfo = new PageInfo<>(list); | 
|   | 
|         for (CollectorModel collectorModel : list) { | 
|             String nickName = ""; | 
|             if (null != collectorModel.getStorageWeight() && !"".equals(collectorModel.getStorageWeight())) { | 
|                 collectorModel.setStorageWeight(DoubleUtil.roundThree(collectorModel.getStorageWeight())); | 
|   | 
|             } else { | 
|                 collectorModel.setStorageWeight("0"); | 
|             } | 
|             if (null != collectorModel.getStorageMoney() && !"".equals(collectorModel.getStorageMoney())) { | 
|                 collectorModel.setStorageMoney(DoubleUtil.roundTwo(collectorModel.getStorageMoney())); | 
|   | 
|             } else { | 
|                 collectorModel.setStorageMoney("0"); | 
|             } | 
|             if (collectorModel.getNickName() != null) { | 
|                 nickName = com.xzx.gc.common.utils.StringUtils.decode(collectorModel.getNickName()); | 
|             } | 
|             collectorModel.setNickName(nickName); | 
|   | 
|             //回收员统计按重量支出返利 | 
|             String totalWeightMoney = payInfoMapper.queryCollectorWM(collectorModel.getUserId()); | 
|             collectorModel.setWeightMoney(DoubleUtil.roundTwo(totalWeightMoney)); | 
|         } | 
|         //如果为入库员,需要管理订单数量 | 
|         if (userModel.getUserType().equals("7")) { | 
|             for (CollectorModel collectorModel : list) { | 
|                 String userId = collectorModel.getUserId(); | 
|                 int orderNum = 0; | 
|                 List<String> orderList = orderStorageInfoMapper.orderListByStorageUserId(userId); | 
|                 for (String orderIds : orderList) { | 
|                     orderNum = orderNum + orderIds.split(",").length; | 
|                 } | 
|                 collectorModel.setOrderNum(orderNum); | 
|                 //仓库名称 | 
|                 String sysStorage = sysStorageMapper.querySysStorageNameById(collectorModel.getSysStorageId()); | 
|                 collectorModel.setSysStorage(sysStorage); | 
|             } | 
|         } | 
|         Map<String, Object> resultMap = new HashMap<>(); | 
|         resultMap.put("code", 0); | 
|         resultMap.put("data", list); | 
|         resultMap.put("count", pageInfo.getTotal()); | 
|         return resultMap; | 
|     } | 
|   | 
|   | 
|     public Map<String, Object> updateWarehouse(CollectorModel userModel) { | 
|         Map<String, Object> map = new HashMap<>(); | 
|         String type = userModel.getUserType(); | 
|         if (type.equals("0")) { | 
|             String sysStorageId = userModel.getSysStorageId(); | 
|             String name = userModel.getSysStorage(); | 
|             if (null != name) { | 
|                 sysStorageMapper.updateSysStorageName(sysStorageId, name); | 
|                 map.put("code", 0); | 
|                 map.put("message", "修改成功"); | 
|             } else { | 
|                 map.put("code", -1); | 
|                 map.put("message", "仓库名称不能为空"); | 
|             } | 
|         } else { | 
|             String userId = userModel.getUserId(); | 
|             String name = userModel.getName(); | 
|             OtherUserInfo otherUserInfo = new OtherUserInfo(); | 
|             otherUserInfo.setUserId(userId); | 
|             otherUserInfo.setName(name); | 
|             otherUserService.update(otherUserInfo); | 
|             map.put("code", 0); | 
|             map.put("message", "修改成功"); | 
|         } | 
|         return map; | 
|     } | 
|   | 
|     public Map<String, Object> queryUnregisteredApiList(CollectorModel collectorModel) { | 
|         List<String> partnerIds = new ArrayList<>(); | 
|         if (null != collectorModel.getPartnerId() && !"".equals(collectorModel.getPartnerId())) { | 
|             partnerIds.add(collectorModel.getPartnerId()); | 
|         } else { | 
|             partnerIds = cityPartnerService.queryPartnerByCurrent(); | 
|         } | 
|         collectorModel.setPartnerIds(partnerIds); | 
|         PageHelper.startPage(collectorModel.getPage(), collectorModel.getLimit()); | 
|         List<CollectorModel> list = userTargetInfoMapper.queryUnregisteredApiList(collectorModel); | 
|         PageInfo<CollectorModel> pageInfo = new PageInfo<>(list); | 
|         for (CollectorModel collect : list) { | 
|             if (null != collect.getNickName() && !"".equals(collect.getNickName())) { | 
|                 if (com.xzx.gc.common.utils.StringUtils.isBase64(collect.getNickName())) { | 
|                     collect.setNickName(cn.hutool.core.codec.Base64.decodeStr(collect.getNickName())); | 
|                 } | 
|             } | 
|             if (null != collect.getPartnerName() && !"".equals(collect.getPartnerName())) { | 
|   | 
|             } else { | 
|                 collect.setPartnerName("-"); | 
|             } | 
|         } | 
|         Map<String, Object> map = new HashMap<>(); | 
|         map.put("code", 0); | 
|         map.put("data", list); | 
|         map.put("count", pageInfo.getTotal()); | 
|         return map; | 
|     } | 
|   | 
|     public void updateUserNameApi(String userId, String name, String mobile, String type) { | 
|         if (null != type && !"".equals(type)) { | 
|             if (type != "1") { | 
|                 otherUserMapper.updateOtherUserName(userId, name, mobile); | 
|             } | 
|         } | 
|         userMapper.updateUserName(userId, name, mobile); | 
|     } | 
|   | 
|     public Map<String, Object> queryApiCuserDetail(String userId, String phone, String userType, int page, int limit) { | 
|   | 
|         Map<String, Object> m = new HashMap<>(); | 
|         // 查询用户信息 | 
|         m.put("user", userMapper.queryCuserDetail(phone, userType)); | 
|         // 查询用户地址 | 
|         m.put("address", addressMapper.queryCuserAddress(phone, userId)); | 
|         // 查询统计用户的订单, 这里面问题,如是普通用户对应为create_userid, 如是回收员或代丢员对应为recice | 
|         Integer[] x = new Integer[3]; | 
|         x[0] = 4; | 
|         x[1] = 5; | 
|         x[2] = 7; | 
|         List<Map<String, Object>> om = orderMapper.queryCuserOrderCount(userId, x); | 
|         PageHelper.startPage(page, limit); | 
|         List<Map<String, Object>> odlist = orderMapper.queryCuserOrderFinishList(userId, x); | 
|         PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(odlist); | 
|         for (Map<String, Object> map : odlist) { | 
|             map.put("money", DoubleUtil.roundTwo(map.get("money").toString())); | 
|             map.put("weight", DoubleUtil.roundThree(map.get("weight").toString())); | 
|             map.put("orderid", map.get("orderId").toString()); | 
|             map.put("createtime", map.get("createTime").toString()); | 
|         } | 
|         m.put("orderList", odlist); | 
|         m.put("count", pageInfo.getTotal()); | 
|         m.put("orderNum", om); | 
|         m.put("code", 0); | 
|   | 
|         return m; | 
|     } | 
|   | 
|     public void add(UserInfo userInfo) { | 
|         userMapper.insertSelective(userInfo); | 
|     } | 
|   | 
| } |