package com.ibeetl.admin.console.service; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Singleton; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; import cn.hutool.json.JSONUtil; import cn.jiguang.common.ClientConfig; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang.common.resp.APIRequestException; import cn.jpush.api.JPushClient; import cn.jpush.api.push.model.Platform; import cn.jpush.api.push.model.PushPayload; import cn.jpush.api.push.model.audience.Audience; import cn.jpush.api.push.model.notification.Notification; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ibeetl.admin.console.dao.*; import com.ibeetl.admin.console.model.*; import com.ibeetl.admin.console.rabbitmq.MqConstants; import com.ibeetl.admin.console.rabbitmq.MqUtil; import com.ibeetl.admin.console.util.ChineseToSpell; import com.ibeetl.admin.console.util.DateUtil; import com.ibeetl.admin.console.util.DoubleUtil; import com.ibeetl.admin.console.util.HttpClientUtils; import com.ibeetl.admin.core.conf.PasswordConfig; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.XzxCityPartner; import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.util.fileexport.FileExportUtil; import com.ibeetl.admin.core.web.JsonResult; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.beetl.sql.core.kit.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.management.remote.rmi._RMIConnection_Stub; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; /** * 用户管理----->身份设定 */ @Service public class CuserConsoleService { @Value("${file.export.path}") String exportPaht; @Autowired CuserConsoleDao dao; @Autowired OrderManageDao orderManageDao; @Autowired MoneyConsoleDao moneyConsoleDao; @Autowired EchartConsoleDao echartConsoleDao; @Autowired RedisService redisService; @Autowired CuserConsoleDao cuserConsoleDao; @Autowired SettingConsoleDao settingConsoleDao; @Autowired XzxOrderAppraiseInfoDao xzxOrderAppraiseInfoDao; @Autowired CorePlatformService platformService; @Autowired XzxElectronicFenceService eleService; @Autowired XzxCityPartnerService cityPartnerService; @Autowired MqUtil mqUtil; //抢单 public static final String GRAB_ORDER_TAG="grabOrder"; private final Logger log = LoggerFactory.getLogger(this.getClass()); final Base64 base64 = new Base64(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); /** * C端用户管理---用户查询 * @param userType * @param name * @param phone * @param page * @param limit * @return */ public Map queryCuserList(String userType, String name, String phone, String page, String limit){ int p = Integer.parseInt(page); p = (p - 1) * Integer.parseInt(limit); if(!StringUtils.isEmpty(name)){ name = new String(Base64.encodeBase64(name.getBytes())); } Map m = new HashMap<>(); List map = dao.queryCuserList(userType, name, phone, p, Integer.parseInt(limit)); List orderStatus1=new ArrayList<>(); List orderStatus2=new ArrayList<>(); orderStatus1.add("3"); orderStatus2.add("4"); orderStatus2.add("5"); orderStatus2.add("7"); for(UserModel mx : map){ // 普通用户 if(mx.getUserTypex().equals("1")){ // 待完成订单总数 mx.setOrderStatus3(orderManageDao.queryCuserOrderByUserIdCount(mx.getUserId(), orderStatus1)); // 累计完成订单总数 mx.setOrderStatus5(orderManageDao.queryCuserOrderByUserIdCount(mx.getUserId(), orderStatus2)); }else if(mx.getUserTypex().equals("2") || mx.getUserTypex().equals("3")){ // 回收员,代丢员 // 待完成订单总数 mx.setOrderStatus3(orderManageDao.queryCuserOrderByUserIdCountx(mx.getUserId(), orderStatus1)); // 累计完成订单总数 mx.setOrderStatus5(orderManageDao.queryCuserOrderByUserIdCountx(mx.getUserId(), orderStatus2)); } } m.put("count", dao.queryCuserListCount(userType, name, phone)); m.put("data", map); m.put("code", 0); return m; } public void UpdateUserApiByUserId(String isProhibit,String userId,String userType){ UserModel userModel = new UserModel(); userModel = dao.queryUserById(userId); boolean bool = false; if(isProhibit.equals("1")){ bool = true; if (userModel == null) { if(userType.equals("6")){ dao.UpdateUserApiByTargetUserId(bool,userId); } dao.UpdateUserApiByOtherUserId(bool,userId,userType); }else{ if(userType.equals("6")){ dao.UpdateUserApiByTargetUserId(bool,userId); } dao.UpdateUserApiByUserId(bool ,userId); } }else{ if (userModel == null) { if(userType.equals("6")){ dao.UpdateUserApiByTargetUserId(bool,userId); } dao.UpdateUserApiByOtherUserId(bool,userId,userType); }else { if(userType.equals("6")){ dao.UpdateUserApiByTargetUserId(bool,userId); } dao.UpdateUserApiByUserId(bool, userId); } } } public Map updateWarehouse(CollectorModel userModel) { Map map = new HashMap<>(); String type = userModel.getUserType(); if(type.equals("0")){ String sysStorageId = userModel.getSysStorageId(); String name = userModel.getSysStorage(); if(null!=name){ dao.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(); dao.updateStorageUserNameById(userId,name); map.put("code",0); map.put("message","修改成功"); } return map; } public Map queryPackageApiList(CollectorModel userModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); userModel.setPartnerIds(partnerIds); int page = userModel.getPage(); int limit = userModel.getLimit(); int p = page; p = (p - 1) * limit; userModel.setPage(p); List list = dao.queryCollectorApiList(userModel); 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){ try { nickName =new String(base64.decode(collectorModel.getNickName()), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } collectorModel.setNickName(nickName); //回收员统计按重量支出返利 String totalWeightMoney = dao.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 orderList = dao.orderListByStorageUserId(userId); for (String orderIds:orderList) { orderNum = orderNum+orderIds.split(",").length; } collectorModel.setOrderNum(orderNum); //仓库名称 String sysStorage = dao.querySysStorageNameById(collectorModel.getSysStorageId()); collectorModel.setSysStorage(sysStorage); } } Map resultMap = new HashMap<>(); resultMap.put("code",0); resultMap.put("data",list); resultMap.put("count",dao.queryCollectorApiCount(userModel)); return resultMap; } public Map queryCollectorApiList(CollectorModel userModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); userModel.setPartnerIds(partnerIds); int page = userModel.getPage(); int limit = userModel.getLimit(); int p = page; p = (p - 1) * limit; userModel.setPage(p); List list = dao.queryCollectorApiList(userModel); 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){ try { nickName =new String(base64.decode(collectorModel.getNickName()), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } collectorModel.setNickName(nickName); //回收员统计按重量支出返利 String totalWeightMoney = dao.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 orderList = dao.orderListByStorageUserId(userId); for (String orderIds:orderList) { orderNum = orderNum+orderIds.split(",").length; } collectorModel.setOrderNum(orderNum); //仓库名称 String sysStorage = dao.querySysStorageNameById(collectorModel.getSysStorageId()); collectorModel.setSysStorage(sysStorage); } } Map resultMap = new HashMap<>(); resultMap.put("code",0); resultMap.put("data",list); resultMap.put("count",dao.queryCollectorApiCount(userModel)); return resultMap; } public Map queryUserOrderApiList(UserModel userModel){ Map m = new HashMap<>(); int page = userModel.getPage(); int limit = userModel.getLimit(); int p = page; p = (p - 1) * limit; List userOrderList = dao.queryUserOrderApiList(userModel.getUserId(),p,userModel.getLimit()); int count = dao.queryUserOrderApiCount(userModel.getUserId()); m.put("count", count); m.put("data", userOrderList); m.put("code", 0); return m; } public Map queryCuserForTimeList(UserModel userModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); if(null!=partnerIds&&partnerIds.size()>0){ String partnerId = partnerIds.get(0); List townIds = cityPartnerService.queryTownIdsByPartnerId(partnerId); userModel.setTownIds(townIds); } int page = userModel.getPage(); int limit = userModel.getLimit(); int p = page; p = (p - 1) * limit; 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 m = new HashMap<>(); List map = dao.queryCuserForTimeList(phone,startTime, endTime, p, limit,userModel.getUserType(),isProhibit,partnerIds,userModel.getTownIds()); List orderStatus1=new ArrayList<>(); List orderStatus2=new ArrayList<>(); orderStatus1.add("3"); orderStatus2.add("4"); orderStatus2.add("5"); orderStatus2.add("7"); for(UserModel mx : map){ // 普通用户 if(mx.getUserTypex().equals("1")){ if(!StringUtils.isEmpty(mx.getNickName())){ try { mx.setNickName(new String(base64.decode(mx.getNickName()), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } // 待完成订单总数 Map osMap = orderManageDao.queryCuserOrderByUserIdCount1(mx.getUserId()); mx.setOrderStatus3(Integer.parseInt(osMap.get("count1").toString())); mx.setOrderStatus5(Integer.parseInt(osMap.get("count").toString())); String tgName = dao.queryTgNameByRealUserId(mx.getMobilePhone()); if(null!=tgName&&!"".equals(tgName)){ mx.setTgName(tgName); }else{ mx.setTgName("无"); } }else if(mx.getUserTypex().equals("2") || mx.getUserTypex().equals("3")){ // 回收员,代丢员 // 待完成订单总数 mx.setOrderStatus3(orderManageDao.queryCuserOrderByUserIdCountx(mx.getUserId(), orderStatus1)); // 累计完成订单总数 mx.setOrderStatus5(orderManageDao.queryCuserOrderByUserIdCountx(mx.getUserId(), orderStatus2)); } } int count = dao.queryCuserForTimeListCount(phone,startTime,endTime,userModel.getUserType(),partnerIds,userModel.getTownIds()); m.put("count", count); m.put("data", map); m.put("code", 0); // 总用户量 int allNomUser=dao.queryCuserForTimeListCount(null,null,null,null,partnerIds,userModel.getTownIds()); // 今日新增用户 String dbTime = echartConsoleDao.queryDbTime(); String[] dt = dbTime.split(" "); String stTime = dt+" 00:00:00"; String edTime = dt+" 23:59:59"; int todayNewUser=dao.queryCuserForTimeListCount(null,stTime,edTime,null,partnerIds,userModel.getTownIds()); //日活跃用户 //查询日活 int userVisit = 0; Map dayCountMap = cuserConsoleDao.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 Map queryPromoterApiList(UserModel userModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); int page = userModel.getPage(); int limit = userModel.getLimit(); int p = page; p = (p - 1) * limit; 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 m = new HashMap<>(); List list = new ArrayList<>(); list = dao.queryPromoterApiList(phone,startTime, endTime, p, limit,userModel.getIsProhibit(),partnerIds); for (UserModel model:list) { String nickName = model.getNickName(); if(nickName!=null&&!"".equals(nickName)){ try { nickName =new String(base64.decode(model.getNickName()), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } 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(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",dao.queryPromoterApiCount(phone,startTime, endTime,userModel.getIsProhibit(),partnerIds)); m.put("code",0); return m; } /** * C端用户管理---用户查询----详情 * @param userId * @param phone * @param userType * @return */ public Map queryCuserDetail(String userId, String phone, String userType,int limit,int page){ int p = page; p = (p - 1) * limit; Map m = new HashMap<>(); // 查询用户信息 m.put("user", dao.queryCuserDetail(phone, userType, "xzx_user_info")); // 查询用户地址 m.put("address", dao.queryCuserAddress(phone, userId)); m.put("userOrderList",dao.queryUserOrderList(userId)); // 查询统计用户的订单, 这里面问题,如是普通用户对应为create_userid, 如是回收员或代丢员对应为recice Integer[] x = new Integer[2]; x[0] = 4; x[1] = 5; List> om = dao.queryCuserOrderCount(userId, x); m.put("orderNum", om); return m; } /** * C端用户管理---用户查询----详情 * @param userId * @param phone * @param userType * @return */ public Map queryApiCuserDetail(String userId, String phone, String userType,int page,int limit){ Map m = new HashMap<>(); // 查询用户信息 m.put("user", dao.queryCuserDetail(phone, userType, "xzx_user_info")); // 查询用户地址 m.put("address", dao.queryCuserAddress(phone, userId)); // 查询统计用户的订单, 这里面问题,如是普通用户对应为create_userid, 如是回收员或代丢员对应为recice Integer[] x = new Integer[3]; x[0] = 4; x[1] = 5; x[2] = 7; List> om = dao.queryCuserOrderCount(userId, x); int p = page; p = (p - 1) * limit; List> odlist = dao.queryCuserOrderFinishList(userId, x,p,limit); for (Map map:odlist) { map.put("money",DoubleUtil.roundTwo(map.get("money").toString())); map.put("weight",DoubleUtil.roundThree(map.get("weight").toString())); } m.put("orderList",odlist); m.put("count",dao.queryCuserOrderFinishCount(userId, x)); m.put("orderNum", om); m.put("code",0); return m; } /** * 根据用户ID查询 * @param userId * @return */ public UserModel queryUserById(String userId){ return dao.queryUserById(userId); } public UserModel queryUserOtherById(String userId){ return dao.queryUserOtherById(userId); } public List queryUserOtherByPhone(String phone){ return dao.queryUserOtherByPhone(phone); } public List queryOrderByPhone(String phone){ return dao.queryOrderByPhone(phone); } public UserModel queryUserOtherByIdC(String userId){ return dao.queryUserOtherByIdC(userId); } /** * C端用户管理---用户查询----详情 订单列表 * @param userId * @param orderStatus * @param page * @param limit * @return */ public Map queryCuserOrder(String userId, List orderStatus, String userType, int page, int limit){ page = (page - 1) * limit; Map m = new HashMap<>(); if(userType.equals("1")){ m.put("count", orderManageDao.queryCuserOrderByUserIdCount(userId, orderStatus)); m.put("data", orderManageDao.queryCuserOrderByUserId(userId, orderStatus, page, limit)); m.put("code", 0); }else if(userType.equals("2") || userType.equals("3")){ m.put("count", orderManageDao.queryCuserOrderByUserIdCountx(userId, orderStatus)); m.put("data", orderManageDao.queryCuserOrderByUserIdx(userId, orderStatus, page, limit)); m.put("code", 0); } return m; } /** * 根据用户ID查询用户的充值和体现记录 * @param userId * @param payType * @param tStatus * @param page * @param limit * @return */ public Map queryCuserMoneyLog(String userId, String payType, String tStatus,String xStatus, int page, int limit){ page = (page - 1) * limit; Map m = new HashMap<>(); m.put("data", moneyConsoleDao.queryCuserMoneyLog(userId, payType, tStatus,xStatus, page, limit)); m.put("count", moneyConsoleDao.queryCuserMoneyLogCount(userId, payType,xStatus, tStatus)); m.put("code", 0); return m; } /** * 根据手机号码查询用户 * @param phone * @return */ public Map queryCuserByPhoneList(String phone,String page,String limit){ int p = Integer.parseInt(page); p = (p - 1) * Integer.parseInt(limit); List map = dao.queryCuserByPhoneList(phone, "xzx_user_other_info", p, Integer.parseInt(limit)); int count = dao.queryCuserByPhoneCount(phone, "xzx_user_other_info"); Map m = new HashMap<>(); m.put("data", map); m.put("count", count); m.put("code", 0); return m; } /** * 根据手机号码查询用户 * @param phone * @return */ public Map queryCuserByPhone(String phone){ List map = dao.queryCuserByPhone(phone, "xzx_user_other_info"); List temp = dao.queryCuserByPhone(phone, "xzx_user_info"); for(UserModel m : temp){ map.add(m); } Map m = new HashMap<>(); m.put("data", map); m.put("count", map.size()); m.put("code", 0); return m; } public UserModel queryCuserByUsertype(String phone, String uesrType,String normal){ return dao.queryUserByUsertype(phone, uesrType, "0", "xzx_user_info",normal,null); } public List> queryStoreList(){ return dao.queryStoreList(); } public String queryAreaName(String type,String id){ if(type.equals("1")){ return dao.queryProvinceById(id); }else if(type.equals("2")){ return dao.queryCityByCityId(id); }else{ return dao.queryTownShipByTownId(id); } } @Transactional(rollbackFor = {}) public int insertUserOtherInfo(UserModel userModel){ return dao.insertUserOtherInfo(userModel); } /** * 获取设备标识 15位 Android设备一般使用imei号码,iOS一般使用idfv号 * @param diu * @return */ public static String getDiu(String diu){ if(StrUtil.isBlank(diu)){ return RandomUtil.randomString(15); }else { if (diu.length() > 15) { return StrUtil.subWithLength(diu, 0, 15); } else if(diu.length()<15){ return StrUtil.fill(diu, Convert.toChar("0"), 15, false); }else{ return diu; } } } private List stringArray2List(List data, Class clazz) throws Exception { List ts = new ArrayList<>(); Field[] fields = clazz.getDeclaredFields(); int len = data.size()/fields.length; int m = data.size()%fields.length; if(m>0){ len = len+1; } for(int i=0;i> listObjectFir = (List>) JSONArray.parse(listStr); System.out.println("利用JSONArray中的parse方法来解析json数组字符串"); System.out.println("===="+listObjectFir.size()); for(Map mapList : listObjectFir){ Object value = mapList.get("fence_info"); //JSONObject obj= (JSONObject)mapList.get("fence_info"); Map maps3 = JSONObject.parseObject(JSONObject.toJSONString(value), Map.class); gid =maps3.get("fence_gid").toString(); break; } } return gid; } public static void main(String[] args) { String orderId=DateUtil.generate("DD", 1); } @Transactional(rollbackFor = {}) public UserModel insertUserInfo(OrderModel orderModel,String appKey,String secret,List keys,String isNomal){ String eleId =""; String townCode =dao.queryTownCodeByTownName(orderModel.getTownshipId()); List townList = eleService.queryTownListByArea(townCode,null); if(townList.size()>0){ eleId = townList.get(0); } UserModel userModel = new UserModel(); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String orderId=DateUtil.generate("DD", 1); userModel.setUserType("1"); userModel.setMobilePhone(orderModel.getMobilePhone()); if(!StringUtils.isEmpty(orderModel.getNickName())){ userModel.setNickName(new String(Base64.encodeBase64(orderModel.getNickName().getBytes()))); } if(isNomal.equals("0")){ String salt =DateUtil.getRandomNickname(16); String pass = DateUtil.encrypt(salt,"123456"); userModel.setSalt(salt); userModel.setPassword(pass); userModel.setOrderNum(0); userModel.setDelFlag("0"); } //添加地址 String proviceId =dao.queryProvinceByName(orderModel.getProvinceId()); String cityId =dao.queryCityByCityName(orderModel.getCityId()); String townId =dao.queryTownShipByTownName(orderModel.getTownshipId()); if(null==proviceId){ proviceId = orderModel.getProvinceId(); } if(null==cityId){ cityId = orderModel.getCityId(); } if(null==townId){ townId = orderModel.getTownshipId(); } userModel.setProvince(ChineseToSpell.getPingYin(orderModel.getProvinceId())); userModel.setCity(ChineseToSpell.getPingYin(orderModel.getCityId())); userModel.setLongitude(orderModel.getLongitude()); userModel.setLatitude(orderModel.getLatitude()); //判断是否为第一次电话下单用户 String userType = "1"; UserModel oldUserModel = new UserModel(); if(isNomal.equals("0")){ oldUserModel =queryCuserByUsertype(orderModel.getMobilePhone(), userType,"3"); }else{ oldUserModel =queryCuserByUsertype(orderModel.getMobilePhone(), userType,null); } if(oldUserModel != null){ userModel.setRegistType(oldUserModel.getRegistType()); dao.updateUserInfo(userModel); //if(dao.updateUserInfo(userModel)>0){ //修改地址 UserAddressModel paramUserAddress = new UserAddressModel(); paramUserAddress.setUserId(oldUserModel.getUserId()); paramUserAddress.setMobilePhone(orderModel.getMobilePhone()); List addressModels = dao.queryUserAddressList(paramUserAddress); boolean bool =true; String addressId= null; for (UserAddressModel obj:addressModels) { if(isNomal.equals("1")){ addressId=obj.getAddressId(); break; } if(obj.getDetailAddress().equals(orderModel.getDetailAddress())){ bool = false; addressId = obj.getAddressId(); break; } } if(!bool){ UserAddressModel userAddressModel = updateUserAddress(orderModel,oldUserModel.getUserId(),cityId,proviceId,townId); }else{ UserAddressModel paramModel = new UserAddressModel(); paramModel.setUserId(orderModel.getUserId()); paramModel.setMobilePhone(orderModel.getMobilePhone()); paramModel.setAddressId(addressId); UserAddressModel userAddressModel=updateUserAddressTwo(paramModel); } if(null!=orderModel.getOrderId()&&!"".equals(orderModel.getOrderId())){ }else{ orderModel.setOrderId(orderId); } orderModel.setUserId(oldUserModel.getUserId()); String point = orderModel.getLongitude()+","+orderModel.getLatitude(); //判断是否在围栏中 boolean bool1 = false; if(null!=eleId&&!"".equals(eleId)){ bool1 = true; }else{ String gid=""; for (String key:keys){ gid = checkElectricByLocations(orderId,key,point); if(null!=gid&&!"".equals(gid)){ bool1 = true; break; } } /*if(!bool1){ return null; }*/ //查询电子围栏Id eleId = dao.queryEleIdByGid(gid); } UserAddressModel userAddressModel = insertUserAddress(orderModel,oldUserModel.getUserId(),cityId,proviceId,townId); orderModel.setAddressId(userAddressModel.getAddressId()); orderModel.setCreateUserId(userModel.getNickName()); //添加订单,订单详情,订单物品表 insertOrder(orderModel,eleId); //发队列 和更新redis缓存 sendOperationLog(orderModel); //极光推送发抢单 Map objectObjectHashMap = new HashMap<>(); objectObjectHashMap.put("newOrder", "{}"); sendByAnroid("您有新的订单", "抢单", objectObjectHashMap, Audience.tag(GRAB_ORDER_TAG + "_" + townId),appKey,secret); //} }else{ String userId= DateUtil.generate("YH", 3); userModel.setUserId(userId); if(dao.insertUserInfo(userModel)>0){ //新建普通用户账号 String id="ZH"+snowflake.nextIdStr(); Map setMap = new HashMap<>(); String value = "0"; orderModel.setOrderId(orderId); String point = orderModel.getLongitude()+","+orderModel.getLatitude(); //判断是否在围栏中 boolean bool = false; if(null!=eleId&&!"".equals(eleId)){ bool = true; }else{ String gid=""; for (String key:keys){ gid = checkElectricByLocations(orderId,key,point); if(null!=gid&&!"".equals(gid)){ bool = true; break; } } if(!bool){ return null; } //查询电子围栏Id eleId = dao.queryEleIdByGid(gid); } dao.addCuserAccountRole(id, orderModel.getMobilePhone(), userId,value); UserAddressModel userAddressModel = insertUserAddress(orderModel,userId,cityId,proviceId,townId); orderModel.setUserId(userId); //添加订单,订单详情,订单物品表 orderModel.setAddressId(userAddressModel.getAddressId()); orderModel.setCreateUserId(userModel.getNickName()); insertOrder(orderModel,eleId); //发队列 和更新redis缓存 sendOperationLog(orderModel); //极光推送发抢单 Map objectObjectHashMap = new HashMap<>(); objectObjectHashMap.put("newOrder", "{}"); sendByAnroid("您有新的订单", "抢单", objectObjectHashMap, Audience.tag(GRAB_ORDER_TAG + "_" + townId),appKey,secret); } } return userModel; } public String queryTownShipByTownName(String townId){ return dao.queryTownShipByTownName(townId); } public List queryElectricTownIds(String partnerId){ return dao.queryElectricTownIds(partnerId); } public List queryTownIdsByCode(List townIds){ return dao.queryTownIdsByCode(townIds); } private void sendOperationLog(OrderModel orderModel){ OrderOperationLogModel operationLogModel = new OrderOperationLogModel(); operationLogModel.setOrderId(orderModel.getOrderId()); operationLogModel.setOperateContent("创建订单"); operationLogModel.setOrderStatus("1"); operationLogModel.setOrderSecondStatus("1"); operationLogModel.setOperateTime(sdf.format(new Date())); CoreUser user = platformService.getCurrentUser(); operationLogModel.setOperateUserId(String.valueOf(user.getId())); mqUtil.send(MqConstants.ORDER_OPERATION_LOG_QUEUE,operationLogModel); // redisService.set("xzx:order:status:"+orderModel.getOrderId(),"0"); } private void insertOrder(OrderModel orderModel,String townId){ //String orderId=DateUtil.generate("DD", 1); //orderModel.setOrderId(orderId); orderModel.setReserveTime(orderModel.getReserveDay()+" "+orderModel.getReserveDate()+":00"); orderModel.setCreateUserId(orderModel.getUserId()); orderModel.setTownshipId(townId); orderModel.setOrderStatus("1"); if(null!=orderModel.getStoreId()&&!"".equals(orderModel.getStoreId())){ orderManageDao.addOrderInfoApi(orderModel); }else{ orderModel.setStoreId(null); orderManageDao.addOrderInfoApi(orderModel); } orderManageDao.addOrderDetailApi(orderModel); if(!StringUtils.isEmpty(orderModel.getItemIds())){ String itemIds = orderModel.getItemIds(); String[] items = itemIds.split(","); List list = new ArrayList<>(); for (String itemType:items) { OrderItemModel itemModel = new OrderItemModel(); itemModel.setOrderId(orderModel.getOrderId()); itemModel.setItemType(itemType); list.add(itemModel); } orderManageDao.addOrderItem(list); } } /** * 添加地址表 * @param orderModel * @param userId * @return */ private UserAddressModel insertUserAddress(OrderModel orderModel,String userId,String cityId,String proviceId,String townId){ //添加地址 UserAddressModel addressModel = new UserAddressModel(); addressModel.setAddressArea(orderModel.getAddressArea()); addressModel.setMobilePhone(orderModel.getMobilePhone()); addressModel.setCityId(cityId); addressModel.setProvinceId(proviceId); addressModel.setDetailAddress(orderModel.getDetailAddress()); addressModel.setLatitude(orderModel.getLatitude()); addressModel.setLongitude(orderModel.getLongitude()); addressModel.setTownshipId(townId); addressModel.setUserId(userId); addressModel.setRelaPhone(orderModel.getMobilePhone()); addressModel.setRelaName(orderModel.getNickName()); dao.insertUserAddress(addressModel); addressModel = dao.queryUserAddressInfo(userId,orderModel.getMobilePhone()); return addressModel; } private UserAddressModel updateUserAddress(OrderModel orderModel,String userId,String cityId,String proviceId,String townId){ //添加地址 UserAddressModel addressModel = new UserAddressModel(); addressModel.setMobilePhone(orderModel.getMobilePhone()); addressModel.setUserId(userId); dao.updateUserAddress(addressModel); UserAddressModel newAddressModel = new UserAddressModel(); newAddressModel.setAddressArea(orderModel.getAddressArea()); newAddressModel.setCityId(cityId); newAddressModel.setProvinceId(proviceId); newAddressModel.setDetailAddress(orderModel.getDetailAddress()); newAddressModel.setLatitude(orderModel.getLatitude()); newAddressModel.setLongitude(orderModel.getLongitude()); newAddressModel.setTownshipId(townId); newAddressModel.setUserId(userId); newAddressModel.setRelaPhone(orderModel.getMobilePhone()); newAddressModel.setRelaName(orderModel.getNickName()); addressModel.setMobilePhone(orderModel.getMobilePhone()); dao.insertUserAddress(addressModel); return addressModel; } private UserAddressModel updateUserAddressTwo(UserAddressModel addressModel){ //添加地址 UserAddressModel model = new UserAddressModel(); addressModel.setMobilePhone(addressModel.getMobilePhone()); addressModel.setUserId(addressModel.getUserId()); addressModel.setFlag("0"); dao.updateUserAddress(addressModel); addressModel.setFlag("1"); dao.updateUserAddress(addressModel); return addressModel; } @Transactional(rollbackFor = {}) public void delCuserById(String id, String phone, String userType){ UserAccountModel account = cityPartnerService.queryPartnerAccountByUserId(id); if(null==account.getOverdraftLimit()&&"".equals(account.getOverdraftLimit())){ account.setOverdraftLimit("0"); } BigDecimal overLimit = new BigDecimal(account.getOverdraftLimit()); //要把可用余额加入到合伙人 UserModel userModel1 = queryUserOtherByIdC(id); if(null!=userModel1){ if(overLimit.compareTo(BigDecimal.ZERO)==1){ if(null!=userModel1.getPartnerId()){ //调整额度时需要扣除合伙人额度 String partnerId = userModel1.getPartnerId(); XzxCityPartner partner = cityPartnerService.queryById(partnerId); UserAccountModel partnerAccount = cityPartnerService.queryPartnerAccountByUserId(partner.getUserId()); PartnerAccountModel partnerAccountModel = cityPartnerService.getPartnerAccountByUserId(partner.getUserId()); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF"+snowflake.nextIdStr(); partnerAccount.setAddType("1"); cityPartnerService.insertPartnerAccountLog(partnerAccount,"8",overLimit,payOrderId,"7"); BigDecimal newPartnerMoney = new BigDecimal(partnerAccount.getMoney()).add(overLimit); partnerAccount.setMoney(newPartnerMoney.doubleValue()); //partnerAccountModel.setMoney(DoubleUtil.roundTwo(newPartnerMoney.toString())); partnerAccountModel.setHbb(DoubleUtil.roundTwo(newPartnerMoney.toString())); cityPartnerService.updateAccountPartner(partnerAccount); cityPartnerService.updatePartnerAccount(partnerAccountModel); } } } // 删除user_info dao.delCuserById(id, "xzx_user_other_info"); // 删除account dao.delCuserAccountById(id); if(userType.equals("普通用户")){ // 删除地址 dao.delUserAddress(id, phone); } // 删除redis token UserModel userModel = dao.queryUserByUsertype(phone, "1", "0", "xzx_user_info",null,null); // redisService.removeToken(userModel.getUserId()); redisService.remove("xzx:user:token:"+id); if(null!=userModel){ redisService.remove("xzx:user:token:"+userModel.getUserId()); } List> userIdList = dao.queryCuserByPhoneRedisDelList(phone); for (Map map:userIdList) { String userId = map.get("userId").toString(); redisService.remove("xzx:user:token:"+userId); } redisService.remove(phone); } /** * 添加角色 * @param phone * @param userType * @return */ /* @Transactional(rollbackFor = {}) public int (String phone, String userType,String password,String area,String name){ // 判断此用户类型是否addCuserRole已经删除过,如果已经删除了需要重新恢复 String[] type =userType.split("_"); UserModel userModels = dao.queryUserByUsertype1(phone, type[0], "1", "xzx_user_other_info",null,null); Snowflake snowflake = IdUtil.getSnowflake(1, 3); String id="USER"+snowflake.nextIdStr(); String partnerId = dao.queryPartnerId(area); //userEditroleModel.setPartnerId(partnerId); if(userModels == null){ // 添加角色需要添加到2个表,一个是用户表,一个是账号表 // 一个账号不能有相同的角色 if(dao.queryUserByUsertype1(phone, type[0], "0", "xzx_user_other_info",null,null) != null){ return 0; } // 插入用户表 dao.addCuserRole(id, phone, type[0], sdf.format(new Date()), "xzx_user_other_info"); String salt =DateUtil.getRandomNickname(16); String pass = DateUtil.encrypt(salt,password); dao.updateDelflag(phone,type[0], type[1],name, "xzx_user_other_info",pass,salt,area,partnerId); System.out.println("userOtherInfoId==="+id); }else{ String salt =DateUtil.getRandomNickname(16); String pass = DateUtil.encrypt(salt,password); dao.updateDelflag(phone, type[0],type[1],name, "xzx_user_other_info",pass,salt,area,partnerId); } // 查询主键 UserModel u = dao.queryUserByUsertype1(phone, type[0], "0", "xzx_user_other_info",null,null); // 添加账号表 id="ZH"+snowflake.nextIdStr(); dao.addCuserAccountRole(id, phone, u.getUserId(),"0"); // 删除redis 缓存 // redis为map, key为user id, 先根据手机号码查询所有id, 进行遍历删除 UserModel userModel = dao.queryUserByUsertype(phone, "1", "0", "xzx_user_info",null,null); // redisService.removeToken(userModel.getUserId()); redisService.remove("xzx:user:token:"+userModel.getUserId()); redisService.remove("xzx:user:token:"+id); List> userIds = dao.queryCuserByPhoneRedisDelList(phone); for (Map map:userIds) { String userId = map.get("userId").toString(); redisService.remove("xzx:user:token:"+userId); } redisService.remove(phone); return 1; }*/ /** * 推送给安卓 */ private String sendByAnroid(String alert, String title, Map extras, Audience audience,String appKey,String secret){ Map map=new HashMap<>(); map.put("alert",alert); map.put("title",title); map.put("extras",extras); map.put("audience",audience); try { PushPayload tag1 = PushPayload.newBuilder() .setPlatform(Platform.android()) .setAudience(audience) .setNotification(Notification.android(alert, title, extras)) .build(); JPushClient jpushClient = new JPushClient(secret, appKey, null, ClientConfig.getInstance()); //JPushClient jPushClient = Singleton.get(JPushClient.class); jpushClient.sendPush(tag1); log.info("极光推送成功:{}", JSONUtil.toJsonPrettyStr(map)); return null; } catch (APIConnectionException | APIRequestException e) { log.error("极光推送失败:内容【"+JSONUtil.toJsonPrettyStr(map) +"】",e); return e.getMessage(); } } /** * 修改角色 * @param phone * @param userType * @return */ @Transactional(rollbackFor = {}) public int updateCuserRole(String phone, String userType,String password,String area,String name,String cityId,String storageId){ // 判断此用户类型是否已经删除过,如果已经删除了需要重新恢复 String[] type =userType.split("_"); UserModel userModels = dao.queryUserOldUserType(phone, type[0], "xzx_user_other_info"); Snowflake snowflake = IdUtil.getSnowflake(1, 3); String id="USER"+snowflake.nextIdStr(); String salt =DateUtil.getRandomNickname(16); String pass = DateUtil.encrypt(salt,password); String partnerId = dao.queryPartnerId(area); //userEditroleModel.setPartnerId(partnerId); if(type.equals("4")){ dao.updateDelflag(phone, type[0],type[1],name, "xzx_user_other_info",pass,salt,area,partnerId,cityId,storageId); }else{ dao.updateDelflag(phone, type[0],type[1],name, "xzx_user_other_info",pass,salt,area,partnerId,cityId,null); } // 查询主键 UserModel u = dao.queryUserByUsertype1(phone, type[0], "0", "xzx_user_other_info",null,null); // 添加账号表 id="ZH"+snowflake.nextIdStr(); dao.addCuserAccountRole(id, phone, u.getUserId(),"0"); // 删除redis 缓存 // redis为map, key为user id, 先根据手机号码查询所有id, 进行遍历删除 UserModel userModel = dao.queryUserByUsertype(phone, "1", "0", "xzx_user_info",null,null); // redisService.removeToken(userModel.getUserId()); redisService.remove("xzx:user:token:"+userModel.getUserId()); redisService.remove("xzx:user:token:"+id); List> userIds = dao.queryCuserByPhoneRedisDelList(phone); for (Map map:userIds) { String userId = map.get("userId").toString(); redisService.remove("xzx:user:token:"+userId); } redisService.remove(phone); return 1; } public int queryUserByPhone(String phone){ UserModel userModel = dao.queryUserByUsertype(phone, "1", "0", "xzx_user_info",null,null); if(null!=userModel){ return 1; }else{ return 0; } } public UserAddressModel queryUserAddressInfo(String userId,String mobilePhone){ UserAddressModel addressModel = dao.queryUserAddressInfo(userId,mobilePhone); return addressModel; } public List queryUserByPhoneNormal(String phone,String normal){ String nickName=""; if(!StringUtils.isEmpty(phone)){ try { nickName = new String(base64.decode(phone), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } List userModel = dao.queryUserByUsertypeList(phone, "1", "0", "xzx_user_info",normal,nickName); return userModel; } /** * 查询所有角色 * @return */ public List> queryAllRole(){ return dao.queryAllRole(); } public List> queryAllAPPRole(){ return dao.queryAllAPPRole(); } public List> querySysStrangeList(){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); if(null!=partnerIds&&partnerIds.size()>0){ List townIds = cityPartnerService.queryTownIdsByPartnerIdList(partnerIds); List> list = dao.querySysStrangeList(townIds); return list; }else{ List> list = dao.querySysStrangeList(null); return list; } } /** * C端用户导出 * @param userType * @param name * @param phone */ public void exportCuser(String userType, String name, String phone, HttpServletResponse response){ if(!StringUtils.isEmpty(name)){ name = new String(Base64.encodeBase64(name.getBytes())); } int count = dao.queryCuserListCount(userType, name, phone); // 当总数大于60000条需分多次导出 int size = 60000; int exportNum = count > size ? count / size + 1 : 1; for(int i = 0; i < exportNum; i++){ List maps = dao.queryCuserList(userType, name, phone, i * size, size); cuserService(maps, response); } } void cuserService(List maps, HttpServletResponse response){ Map> map = new HashMap<>(); String[] strArray = { "用户id", "角色", "昵称", "手机号码" }; for(UserModel m : maps){ List list = new ArrayList<>(); list.add(m.getUserId()); list.add(m.getUserType()); list.add(new String(Base64.decodeBase64(m.getNickName().getBytes())) + ""); list.add(m.getMobilePhone()); map.put( m.getUserId(), list); } HSSFWorkbook wbb = FileExportUtil.createExcel(map, strArray, exportPaht+ UUID.randomUUID().toString().replace("-", "")); try{ FileExportUtil.setResponseInfo(response, wbb, UUID.randomUUID().toString().replace("-", "")); }catch (Exception e){ e.printStackTrace(); } } /** * 通过用户的ID更新name * @param userId * @param name */ public int updateUserName(String userId, String name, String mobile){ return dao.updateUserName(userId, name, mobile); } public void updateOtherUserById(String partnerId){ dao.updateOtherUserById1(partnerId); } public int updateUserNameApi(String userId, String name, String mobile,String type){ if(null!=type&&!"".equals(type)){ if(type!="1"){ int num = dao.updateOtherUserName(userId, name, mobile); } } return dao.updateUserName(userId, name, mobile); } public int updatePromoterName(String userId, String name, String mobile){ return dao.updatePromoterName(userId, name, mobile); } public Map queryStorageList(UserModel userModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); userModel.setPartnerIds(partnerIds); int pa = userModel.getPage(); pa = (pa - 1) * userModel.getLimit(); userModel.setPage(pa); String nickName=null; if(!StringUtils.isEmpty(userModel.getName())){ //nickName = new String(Base64.encodeBase64(nickName.getBytes())); //userModel.setNickName(nickName); 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=dao.queryStorageNum(partnerIds); Map result = new HashMap<>(); List> storageList = dao.queryStorageList(userModel); 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",orderIds.length); } int count = dao.queryStorageCount(userModel).size(); result.put("storageNum",storageNum); result.put("data", storageList); result.put("count", count); result.put("code", 0); return result; } public Map queryPackageStorageList(UserModel userModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); userModel.setPartnerIds(partnerIds); List townIds = new ArrayList<>(); if(null!=partnerIds&&partnerIds.size()>0){ String partnerId= partnerIds.get(0); townIds = cityPartnerService.queryTownIdsByPartnerId(partnerId); //storageModel.setTownIds(townIds); } int pa = userModel.getPage(); pa = (pa - 1) * userModel.getLimit(); userModel.setPage(pa); String nickName=null; if(!StringUtils.isEmpty(userModel.getName())){ //nickName = new String(Base64.encodeBase64(nickName.getBytes())); //userModel.setNickName(nickName); 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=dao.queryPackageStorageNum(townIds); Map result = new HashMap<>(); userModel.setUserType("7"); List> storageList = dao.queryStorageList1(userModel); 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",orderIds.length); } int count = 0 ; if(storageList.size()==0){ if(storageNum>0){ storageList = dao.queryStorageList1(userModel); for (Map map:storageList) { map.put("orderNum",0); } count=storageNum; } }else{ count = dao.queryStorageCount1(userModel).size(); } result.put("storageNum",storageNum); result.put("data", storageList); result.put("count", count); result.put("code", 0); return result; } public Map queryCollectorList(PromoterModel promoterModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); promoterModel.setPartnerIds(partnerIds); int pa = promoterModel.getPage(); pa = (pa - 1) * promoterModel.getLimit(); promoterModel.setPage(pa); Map result = new HashMap<>(); //查询回收员总数 List collectorNum = dao.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 =dao.totalWeightAndMoney(null,partnerIds); String paramName = promoterModel.getParamName(); if(null!=paramName&&!"".equals(paramName)){ if(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); List map = dao.queryCollectorPageList(promoterModel); int count = dao.queryCollectorPageCount(promoterModel).size(); 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.roundThree(storageWeight.toString())); model.setStorageMoney(DoubleUtil.roundTwo(storageMoney.toString())); model.setRecycleWeight(DoubleUtil.roundThree(recycleWeight.toString())); model.setRecycleMoney(DoubleUtil.roundTwo(recycleMoney.toString())); model.setWeightError(DoubleUtil.roundThree(weightError.toString())); model.setMoneyError(DoubleUtil.roundTwo(moneyError.toString())); int orderNum=0; List orderIds = dao.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"),2); 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.roundThree(totalWeight.toString())); result.put("weightError",DoubleUtil.roundThree(weightError.toString())); result.put("storageMoney",DoubleUtil.roundTwo(totalMoney.toString())); result.put("moneyError",DoubleUtil.roundTwo(moneyError.toString())); result.put("data", map); result.put("count", count); result.put("code", 0); return result; } /** * 查询推广员的信息 * @param promoterModel * @return */ public Map queryQromoterList(PromoterModel promoterModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); promoterModel.setPartnerIds(partnerIds); int pa = promoterModel.getPage(); pa = (pa - 1) * promoterModel.getLimit(); promoterModel.setPage(pa); if(!StringUtils.isEmpty(promoterModel.getNickName())){ promoterModel.setNickName(new String(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); } int count = dao.queryQromoterListCount(promoterModel); // 查询订单数据 Long beginTime2 = new Date().getTime(); System.out.println("333333333333"+beginTime2); List list = dao.queryQromoterLeven(promoterModel); Long totalConsumedTime2=new Date().getTime()-beginTime2; System.out.println("333333333333"+totalConsumedTime2); for(PromoterModel p : list) { p.setTurnoverRate("0"); // 未注册总数 if(null!=p.getUnregistCount()){ p.setUnregistCount(p.getUnregistCount()); } // 已注册总数 if(null!=p.getRegistCount()){ p.setRegistCount(String.valueOf(Integer.parseInt(p.getRegistCount())+Integer.parseInt(p.getCount()))); }else{ p.setRegistCount(p.getRegistCount()); } // 已成交总数 if(null!=p.getCount()){ p.setOrderCount(p.getCount()); } 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 = dao.queryPromoterOrderWeightMoney(p.getUserId(),promoterModel.getStartTime(),promoterModel.getEndTime()); 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"); } int allOrderNum = dao.queryAllOrderByUserId(p.getUserId(),promoterModel.getStartTime(),promoterModel.getEndTime()); p.setAllOrderNum(allOrderNum); } Map m = new HashMap<>(); m.put("data", list); m.put("count", count); m.put("code", 0); return m; } /** * 推广员查看页 * @param userId * @param phone * @param userType * @return */ public Map queryPromoterDetail(String userId, String phone, String userType){ Map m = new HashMap<>(); // 查询用户信息 m.put("user", dao.queryCuserDetail(phone, userType, "xzx_user_other_info")); PromoterModel promoterModel = new PromoterModel(); promoterModel.setUserId(userId); List list = dao.queryQromoterLeven(promoterModel); Map mx = new HashMap<>(); mx.put("regsterCount", 0); mx.put("unregsterCount", 0); mx.put("orderCount", 0); for (PromoterModel pm : list) { // 未注册总数 mx.put("unregsterCount", pm.getUnregistCount()); // 已注册总数 mx.put("regsterCount", Integer.parseInt(pm.getRegistCount()) + Integer.parseInt(pm.getCount())); // 已成交总数 mx.put("orderCount", Integer.parseInt(pm.getCount())); } m.put("count", mx); return m; } /** * 推广员详情里面的总数 * @param userId * @param startTime * @param endTime * @returnS */ public Map queryxxxx(String userId, String startTime, String endTime){ Map map = dao.queryPromoterOrderCount(userId, startTime, endTime); int count = dao.queryPromoterRegiterTimeCount(userId, startTime, endTime, "xzx_user_other_info"); map.put("count", count); return map; } /** * 根据用户ID和手机号码查询账号信息 * @param userId * @param phone */ public UserAccountModel queryAccountInfo(String userId, String phone){ return dao.queryAccountInfo(userId, phone); } public UserModel queryRecoveryById(String userId,String userType){ return dao.queryRecoveryById(userId,userType); } public List> queryCuserListByName(String userId){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); return dao.queryCuserListByName(userId,partnerIds); } public Map querySysStorageList(StorageModel storageModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); if(null!=partnerIds&&partnerIds.size()>0){ String partnerId = partnerIds.get(0); List townIds = cityPartnerService.queryTownIdsByPartnerId(partnerId); storageModel.setTownIds(townIds); } int pa = storageModel.getPage(); pa = (pa - 1) * storageModel.getLimit(); storageModel.setPage(pa); Map result = new HashMap<>(); List> list = dao.querySysStorageList(storageModel); BigDecimal allWeight = new BigDecimal("0"); BigDecimal allMoney = new BigDecimal("0"); //相隔的天数 ,查询日均 int dayNum = dao.queryDayDiff(storageModel); for (Map map:list) { StorageModel pModel = new StorageModel(); String id = map.get("id").toString(); pModel.setSysStorageId(id); pModel.setStartTime(storageModel.getStartTime()); pModel.setEndTime(storageModel.getEndTime()); pModel.setPartnerIds(partnerIds); Map rMap = dao.querySysStorageAll(pModel); List allOrderNumBySsId= dao.sysStorageOrderNum(pModel); BigDecimal allOrderNum = new BigDecimal("0") ; for (String orderIds:allOrderNumBySsId) { String[] ossid = orderIds.split(","); allOrderNum = allOrderNum.add(new BigDecimal(ossid.length)); } map.put("orderNum",allOrderNum); if(null!=rMap){ allWeight = allWeight.add(new BigDecimal(rMap.get("storageweight").toString())); allMoney =allMoney.add(new BigDecimal(rMap.get("storagemoney").toString())); BigDecimal storageWeight = new BigDecimal(rMap.get("storageweight").toString()); storageWeight = storageWeight.divide(new BigDecimal("1000"),3,RoundingMode.HALF_UP); BigDecimal storageMoney = new BigDecimal(rMap.get("storagemoney").toString()); storageMoney = storageMoney.divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP); BigDecimal recycleweight = new BigDecimal(rMap.get("recycleweight").toString()); recycleweight = recycleweight.divide(new BigDecimal("1000"),3,RoundingMode.HALF_UP); BigDecimal recyclemoney = new BigDecimal(rMap.get("recyclemoney").toString()); recyclemoney = recyclemoney.divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP); map.put("storageWeight",DoubleUtil.roundThree(storageWeight.toString())); map.put("storageMoney",DoubleUtil.roundTwo(storageMoney.toString())); map.put("recycleWeight",DoubleUtil.roundThree(recycleweight.toString())); map.put("recycleMoney",DoubleUtil.roundTwo(recyclemoney.toString())); //日均重量 BigDecimal sw = new BigDecimal(rMap.get("storageweight").toString()); if(dayNum>0){ BigDecimal dayw = sw.divide(new BigDecimal(dayNum),3, RoundingMode.HALF_UP); map.put("dayStorageWeight",dayw.divide(new BigDecimal("1000"),3,RoundingMode.HALF_UP)); }else{ sw =sw.divide(new BigDecimal("1000"),3,RoundingMode.HALF_UP); map.put("dayStorageWeight",DoubleUtil.roundThree(sw.toString())); } //日均金额 BigDecimal sm = new BigDecimal(rMap.get("storagemoney").toString()); if(dayNum>0){ BigDecimal daym = sm.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP); map.put("dayStorageMoney",daym.divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP)); }else{ map.put("dayStorageMoney",sm.divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP)); } } } if(dayNum==0){ dayNum=1; } BigDecimal alldayw = allWeight.divide(new BigDecimal(dayNum),3,RoundingMode.HALF_UP); BigDecimal alldaym = allMoney.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP); allWeight = allWeight.divide(new BigDecimal("1000"),3,RoundingMode.HALF_UP); alldayw = alldayw.divide(new BigDecimal("1000"),3,RoundingMode.HALF_UP); alldaym = alldaym.divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP); allMoney = allMoney.divide(new BigDecimal("10000"),2,RoundingMode.HALF_UP); int count = dao.querySysStorageCount(storageModel); result.put("count",count); result.put("code",0); result.put("data",list); result.put("allWeight",DoubleUtil.roundThree(allWeight.toString())); result.put("allMoney",DoubleUtil.roundTwo(allMoney.toString())); result.put("allDayWeight",DoubleUtil.roundThree(alldayw.toString())); result.put("allDayMoney",DoubleUtil.roundTwo(alldaym.toString())); return result; } public Map queryStorageObjectList(StorageModel storageModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); int pa = storageModel.getPage(); pa = (pa - 1) * storageModel.getLimit(); storageModel.setPage(pa); storageModel.setPartnerIds(partnerIds); Map result = new HashMap<>(); List> list = dao.queryStorageObjectList(storageModel); 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())); } int count = dao.queryStorageObjectCount(storageModel).size(); result.put("count",count); result.put("code",0); result.put("data",list); return result; } public Map queryStorageByUserId(StorageModel storageModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); int pa = storageModel.getPage(); pa = (pa - 1) * storageModel.getLimit(); storageModel.setPage(pa); 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); List list = dao.queryStorageByUserId(storageModel); for (StorageModel model:list) { if(null!=model.getRecycleWeight()&&!"".equals(model.getRecycleWeight())){ model.setRecycleWeight(DoubleUtil.roundThree(model.getRecycleWeight())); } if(null!=model.getRecycleMoney()&&!"".equals(model.getRecycleMoney())){ model.setRecycleMoney(DoubleUtil.roundTwo(model.getRecycleMoney())); } model.setWeightError(DoubleUtil.roundThree(model.getWeightError())); model.setMoneyError(DoubleUtil.roundTwo(model.getMoneyError())); } int count = dao.queryStorageByUserIdCount(storageModel); Map result = new HashMap<>(); result.put("data", list); result.put("count", count); result.put("code", 0); return result; } /** * 仓库数据统计 * @param storageModel * @return */ public Map querySysStorageDetail(StorageModel storageModel) { Map result = new HashMap<>(); List> weekOrMonthList = new ArrayList<>(); List> weekOrMonthImgList = new ArrayList<>(); //相隔天数 int dayNum = dao.queryDayDiff(storageModel); Map allRMap = dao.querySysStorageAll(storageModel); BigDecimal allWeight = new BigDecimal(allRMap.get("storageweight").toString()); BigDecimal allMoney = new BigDecimal(allRMap.get("storagemoney").toString()); BigDecimal alldayw = new BigDecimal("0"); BigDecimal alldaym = new BigDecimal("0"); if(dayNum>0){ alldayw = allWeight.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP); alldaym = allMoney.divide(new BigDecimal(dayNum),2,RoundingMode.HALF_UP); } result.put("allWeight",DoubleUtil.roundThree(allWeight.toString())); result.put("allMoney",DoubleUtil.roundTwo(allMoney.toString())); result.put("alldayw",DoubleUtil.roundThree(alldayw.toString())); result.put("alldaym",DoubleUtil.roundTwo(alldaym.toString())); List> weekOrderList = new ArrayList<>(); List> weekMoneyAndWeightList = new ArrayList<>(); List> detailImage = new ArrayList<>(); if(null!=storageModel.getTimeType()&&!"".equals(storageModel.getTimeType())){ if(storageModel.getTimeType().equals("week")){ weekOrMonthList = DateUtil.query12WeekStartTimeAndEndTime(); }else{ weekOrMonthList = DateUtil.query12MonthStartTimeAndEndTime(); } for (Map map:weekOrMonthList) { String startTime = map.get("startTime"); String endTime = map.get("endTime"); if(map.get("storageweight")!=null){ String storageweight = DoubleUtil.roundThree(map.get("storageweight")); map.put("storageweight",storageweight); } if(map.get("recycleweight")!=null){ String recycleweight = DoubleUtil.roundThree(map.get("recycleweight")); map.put("recycleweight",recycleweight); } //周订单数 weekOrderList = getWeekOrderList(startTime,endTime,storageModel.getSysStorageId(),weekOrderList); //周金额(入库金额,订单金额,入库重量,订单重量) weekMoneyAndWeightList = getWeekMoneyAndWeightList(startTime,endTime,storageModel.getSysStorageId(),weekMoneyAndWeightList); } }else{ weekOrMonthList = DateUtil.query12WeekStartTimeAndEndTime(); for (Map map:weekOrMonthList) { String startTime = map.get("startTime"); String endTime = map.get("endTime"); if(map.get("storageweight")!=null){ String storageweight = DoubleUtil.roundThree(map.get("storageweight")); map.put("storageweight",storageweight); } if(map.get("recycleweight")!=null){ String recycleweight = DoubleUtil.roundThree(map.get("recycleweight")); map.put("recycleweight",recycleweight); } //周订单数 weekOrderList = getWeekOrderList(startTime,endTime,storageModel.getSysStorageId(),weekOrderList); //周金额(入库金额,订单金额,入库重量,订单重量) weekMoneyAndWeightList = getWeekMoneyAndWeightList(startTime,endTime,storageModel.getSysStorageId(),weekMoneyAndWeightList); } } Map lastMap = new HashMap<>(); if(null!=storageModel.getImageType()&&!"".equals(storageModel.getImageType())) { if (storageModel.getImageType().equals("week")) { weekOrMonthImgList = DateUtil.query12WeekStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } else { weekOrMonthImgList = DateUtil.query12MonthStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } }else{ weekOrMonthImgList = DateUtil.query12WeekStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } detailImage = getSysStorageTypeName(storageModel.getSysStorageId(), lastMap.get("startTime"),lastMap.get("endTime"),null); for (Map obj:weekMoneyAndWeightList) { if(obj.get("storageweight")!=null){ String storageweight = DoubleUtil.roundThree(obj.get("storageweight").toString()); obj.put("storageweight",storageweight); } if(obj.get("recycleweight")!=null){ String recycleweight = DoubleUtil.roundThree(obj.get("recycleweight").toString()); obj.put("recycleweight",recycleweight); } } result.put("weekOrMonthOrderList",weekOrderList); result.put("weekOrMonthMoneyAndWeightList",weekMoneyAndWeightList); result.put("detailImage",detailImage); return result; } private List> getSysStorageTypeName(String sysStorageId,String startTime,String endTime,String typeName){ List> resultMap = new ArrayList<>(); StorageModel storageModel1 = new StorageModel(); storageModel1.setStartTime(startTime); storageModel1.setEndTime(endTime); storageModel1.setSysStorageId(sysStorageId); List orderIdBySysStorageId = dao.sysStorageOrderNum(storageModel1); List orderIds = new ArrayList<>(); for (String ids:orderIdBySysStorageId) { String[] orderIdsTemp = ids.split(","); for (String orderId:orderIdsTemp) { orderIds.add(orderId); } } List> list = new ArrayList<>(); if(orderIds!=null&&orderIds.size()>0){ list = dao.getSysStorageTypeName(orderIds,null,null,typeName); } //总金额 BigDecimal totalMoney = new BigDecimal("0"); for (Map map:list) { totalMoney = totalMoney.add(new BigDecimal(map.get("money").toString())); } //查询占比 for (Map map:list) { BigDecimal rate = new BigDecimal(map.get("money").toString()).divide(totalMoney,2,RoundingMode.HALF_UP); map.put("rate",rate.multiply(new BigDecimal("100")).toString()+"%"); map.put("weight",DoubleUtil.roundThree(map.get("weight").toString())); map.put("money",DoubleUtil.roundTwo(map.get("money").toString())); } Map imageData = new HashMap<>(); imageData.put("totalMoney",DoubleUtil.roundTwo(totalMoney.toString())); imageData.put("data",list); resultMap.add(imageData); return resultMap; } private List> getWeekMoneyAndWeightList(String startTime,String endTime,String sysStorageId,List> weekOrderList) { //入库、订单重量 入库、订单金额 StorageModel storageModel2 = new StorageModel(); storageModel2.setStartTime(startTime); storageModel2.setEndTime(endTime); storageModel2.setSysStorageId(sysStorageId); Map rMap = dao.querySysStorageAll(storageModel2); String[] startStr = startTime.split(" "); String[] endStr = endTime.split(" "); rMap.put("startTime",startStr[0]); rMap.put("endTime",endStr[0]); weekOrderList.add(rMap); return weekOrderList; } /** * 按照仓库图表统计周订单数 * @param startTime * @param endTime * @param sysStorageId * @param weekOrderList * @return */ private List> getWeekOrderList(String startTime,String endTime,String sysStorageId,List> weekOrderList){ Map paramMap = new HashMap<>(); //订单量 入库、订单重量 入库、订单金额 StorageModel storageModel1 = new StorageModel(); storageModel1.setStartTime(startTime); storageModel1.setEndTime(endTime); storageModel1.setSysStorageId(sysStorageId); List orderIdBySysStorageId = dao.sysStorageOrderNum(storageModel1); int orderNum = 0 ; for (String orderIds:orderIdBySysStorageId) { orderNum = orderIds.split(",").length; } String[] startStr = startTime.split(" "); String[] endStr = endTime.split(" "); paramMap.put("startTime",startStr[0]); paramMap.put("endTime",endStr[0]); paramMap.put("orderNum",orderNum); weekOrderList.add(paramMap); return weekOrderList; } public List> queryApiArea(){ List> areaList = dao.queryApiArea(); return areaList; } public Map queryTypeData(StorageModel storageModel){ int p = storageModel.getPage(); p = (p - 1) * storageModel.getLimit(); List> weekOrMonthImgList = new ArrayList<>(); Map lastMap = new HashMap<>(); Map detailImage = new HashMap<>(); if(null!=storageModel.getImageType()&&!"".equals(storageModel.getImageType())) { if (storageModel.getImageType().equals("day")) { //weekOrMonthImgList = DateUtil.query12WeekStartTimeAndEndTime(); lastMap.put("startTime",sdf1.format(new Date())+" 00:00:00"); lastMap.put("endTime",sdf1.format(new Date())+" 23:59:59"); //lastMap = weekOrMonthImgList.get(0); } else { weekOrMonthImgList = DateUtil.query12MonthStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0); } detailImage = queryPageSysStorageTypeName(lastMap.get("startTime"),lastMap.get("endTime"),storageModel.getTypeName(),p,storageModel.getLimit()); }else{ /*weekOrMonthImgList = DateUtil.query12WeekStartTimeAndEndTime(); lastMap = weekOrMonthImgList.get(0);*/ detailImage = queryPageSysStorageTypeName(null,null,storageModel.getTypeName(),p,storageModel.getLimit()); } return detailImage; } private Map queryPageSysStorageTypeName(String startTime,String endTime,String typeName,int page,int limit){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); //storageModel.setPartnerIds(partnerIds); StorageModel storageModel1 = new StorageModel(); storageModel1.setStartTime(startTime); storageModel1.setEndTime(endTime); List orderIdBySysStorageId = dao.sysStorageOrderNum(storageModel1); List orderIds = new ArrayList<>(); for (String ids:orderIdBySysStorageId) { String[] orderIdsTemp = ids.split(","); for (String orderId:orderIdsTemp) { orderIds.add(orderId); } } //判断是否是 该合伙人的订单 orderIds = dao.queryOrderIdsByPartners(partnerIds); List> list = new ArrayList<>(); int count =0; if(orderIds!=null&&orderIds.size()>0){ list = dao.queryPageSysStorageTypeName(orderIds,startTime,endTime,typeName,page,limit); count = dao.queryCountSysStorageTypeName(orderIds,startTime,endTime,typeName); } List> sda = dao.queryStorageDetailAll(startTime,endTime,typeName); //总金额 BigDecimal totalMoney = new BigDecimal("0"); for (Map map:list) { totalMoney = totalMoney.add(new BigDecimal(map.get("money").toString())); } //查询占比 for (Map map:list) { BigDecimal moneyError = new BigDecimal("0"); BigDecimal weightError = new BigDecimal("0"); BigDecimal rate = new BigDecimal("0"); if(totalMoney.compareTo(BigDecimal.ZERO)==1){ rate = new BigDecimal(map.get("money").toString()).divide(totalMoney,2,RoundingMode.HALF_UP); } map.put("rate",rate.multiply(new BigDecimal("100")).toString()+"%"); for (Map eMap :sda) { if(null!=eMap.get("title")&&null!=map.get("title")){ if(map.get("id").toString().equals(eMap.get("id").toString())){ moneyError = new BigDecimal(eMap.get("money").toString()).subtract(new BigDecimal(map.get("money").toString())); weightError = new BigDecimal(eMap.get("weight").toString()).subtract(new BigDecimal(map.get("weight").toString())); break; } } } //金额是万元 重量是吨 BigDecimal money = new BigDecimal(map.get("money").toString()).divide(new BigDecimal("10000"),2); BigDecimal moneyErrorBig = new BigDecimal(moneyError.toString()).divide(new BigDecimal("10000"),2); BigDecimal weight = new BigDecimal(map.get("weight").toString()).divide(new BigDecimal("1000"),3); BigDecimal weightErrorBig = new BigDecimal(weightError.toString()).divide(new BigDecimal("1000"),3); map.put("money",DoubleUtil.roundTwo(money.toString())); map.put("weight",DoubleUtil.roundThree(weight.toString())); map.put("moneyError",DoubleUtil.roundTwo(moneyErrorBig.toString())); map.put("weightError",DoubleUtil.roundThree(weightErrorBig.toString())); } Map imageData = new HashMap<>(); imageData.put("totalMoney",DoubleUtil.roundTwo(totalMoney.toString())); imageData.put("data",list); imageData.put("count",count); return imageData; } public Map queryUnregisteredApiList(CollectorModel collectorModel) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); collectorModel.setPartnerIds(partnerIds); int p = collectorModel.getPage(); p = (p - 1) * collectorModel.getLimit(); collectorModel.setPage(p); List list = dao.queryUnregisteredApiList(collectorModel); Map map = new HashMap<>(); map.put("code",0); map.put("data",list); map.put("count",dao.queryUnregisteredApiCount(collectorModel)); return map; } /** * 根据手机号码查询用户 * @param model * @return */ public Map queryEditroleApi(UserEditroleModel model){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); model.setPartnerIds(partnerIds); int p = model.getPage(); p = (p - 1) * model.getLimit(); model.setPage(p); List list = dao.queryEditroleApi(model); for (UserEditroleModel userModel:list) { if(userModel.getUserTypeValue().equals("7")){ userModel.setUserType("打包员"); } if(!StringUtils.isEmpty(userModel.getNickName())){ try { userModel.setNickName(new String(base64.decode(userModel.getNickName()), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } int count = dao.queryEditroleApiCount(model); Map m = new HashMap<>(); m.put("data", list); m.put("count", count); m.put("code", 0); return m; } public String createServiceTerminal(String key,String sid,String userId){ String url="https://tsapi.amap.com/v1/track/terminal/add"; Map map = new HashMap<>(); map.put("key",key); map.put("sid",sid); map.put("name",userId); String result = HttpClientUtils.doPost(url,map); Map maps1 = (Map) JSON.parse(result); if(null!=maps1.get("data")){ String str1=maps1.get("data").toString(); Map maps2 = (Map) JSON.parse(str1); return maps2.get("tid").toString(); } return null; } public void deleteServiceTerminal(String key,String sid,String tid,String url){ Map map = new HashMap<>(); map.put("key",key); map.put("sid",sid); map.put("tid",tid); String result = HttpClientUtils.doPost(url,map); System.out.println("删除终端返回==============="+result); } private boolean checkOtherUserByType(String userType,String mobilePhone){ List list = dao.checkOtherUserByType(userType,mobilePhone); if(null!=list&&list.size()>0){ return false; }else{ return true; } } /** * 添加角色 * @param userEditroleModel * @return */ @Transactional(rollbackFor = {}) public int addEditroleApi(UserEditroleModel userEditroleModel){ // 判断此用户类型是否已经删除过,如果已经删除了需要重新恢复 String type =userEditroleModel.getUserTypeValue(); String phone = userEditroleModel.getMobilePhone(); String roleId = userEditroleModel.getRoleId(); String password = userEditroleModel.getPassword(); String name = userEditroleModel.getName(); String area = userEditroleModel.getArea(); String cityId="0"; String storageId = userEditroleModel.getStorageId(); if(null!=userEditroleModel.getCityId()&&!"".equals(userEditroleModel.getCityId())){ cityId = userEditroleModel.getCityId(); } String partnerId=""; if(null!=area&&!"".equals(area)){ String[] areaList= area.split(","); partnerId= dao.queryPartnerId(areaList[0]); } if(null!=userEditroleModel.getPartnerId()&&!"".equals(userEditroleModel.getPartnerId())){ //userEditroleModel.setPartnerId(partnerId); partnerId = userEditroleModel.getPartnerId(); }else{ List partnerIds = cityPartnerService.queryPartnerByCurrent(); if(null!=partnerIds&&partnerIds.size()>0){ userEditroleModel.setPartnerId(partnerIds.get(0)); partnerId = partnerIds.get(0); } } if(null!=roleId&&!"".equals(roleId)){ type =dao.queryUserTypeById(roleId); } if(null==area&&"".equals(area)){ return 0; } UserModel userModels = dao.queryUserByUsertype1(phone, type, "1", "xzx_user_other_info",null,null); Snowflake snowflake = IdUtil.getSnowflake(1, 3); String id="USER"+snowflake.nextIdStr(); boolean bool = true; if(userModels == null){ // 添加角色需要添加到2个表,一个是用户表,一个是账号表 // 一个账号不能有相同的角色 UserModel oldModel = dao.queryUserByUsertype1(phone, type, "0", "xzx_user_other_info",null,null); if(oldModel!=null){ if(type.equals("2")){ boolean flag = checkOtherUserByType("4",phone); if(!flag){ return -1; } }else if(type.equals("4")){ boolean flag = checkOtherUserByType("2",phone); if(!flag){ return -1; }else{ flag = checkOtherUserByType("6",phone); if(!flag){ return -2; } } }else if(type.equals("6")){ boolean flag = checkOtherUserByType("4",phone); if(!flag){ return -2; } } String salt=null; String pass=null; if(null!=password&&!"".equals(password)){ salt =DateUtil.getRandomNickname(16); pass = DateUtil.encrypt(salt,password); }else{ } if(type.equals("4")){ dao.updateDelflag(phone, type,roleId,name, "xzx_user_other_info",pass,salt,area,partnerId,cityId,storageId); }else{ dao.updateDelflag(phone, type,roleId,name, "xzx_user_other_info",pass,salt,area,partnerId,cityId,null); } XzxCityPartner partner = cityPartnerService.queryById(partnerId); String serviceType=""; if(type.equals("2")){ serviceType="1"; }else if(type.equals("6")){ serviceType="2"; } String sid = cityPartnerService.querySidByPid(partnerId,serviceType); if(null!=oldModel.getTerminalId()&&!"".equals(oldModel.getTerminalId())){ String delUrl="https://tsapi.amap.com/v1/track/terminal/delete"; if(oldModel.getUserType().equals("2")){ if(type.equals("6")){ deleteServiceTerminal(partner.getPartnerKey(),sid,oldModel.getTerminalId(),delUrl); String tid = createServiceTerminal(partner.getPartnerKey().split(",")[0],sid,id); dao.updateOtherUserById(tid,id,type); } }else if(oldModel.getUserType().equals("6")){ if(type.equals("2")){ deleteServiceTerminal(partner.getPartnerKey(),sid,oldModel.getTerminalId(),delUrl); String tid = createServiceTerminal(partner.getPartnerKey().split(",")[0],sid,id); dao.updateOtherUserById(tid,id,type); } } }else{ if(null!=serviceType&&!"".equals(serviceType)){ String tid = createServiceTerminal(partner.getPartnerKey().split(",")[0],sid,oldModel.getUserId()); dao.updateOtherUserById(tid,oldModel.getUserId(),type); } } // 删除redis 缓存 // redis为map, key为user id, 先根据手机号码查询所有id, 进行遍历删除 UserModel userModel = dao.queryUserByUsertype(phone, "1", "0", "xzx_user_info",null,null); // redisService.removeToken(userModel.getUserId()); if(null!=userModel){ redisService.remove("xzx:user:token:"+userModel.getUserId()); redisService.remove("xzx:user:token:"+id); List> userIds = dao.queryCuserByPhoneRedisDelList(phone); for (Map map:userIds) { String userId = map.get("userId").toString(); redisService.remove("xzx:user:token:"+userId); } redisService.remove(phone); } return 1; }else{ if(type.equals("7")){ return -2; } //新增用户 回收员不能与入库员共存 if(type.equals("2")){ boolean flag = checkOtherUserByType("4",phone); if(!flag){ return -1; } }else if(type.equals("4")){ boolean flag = checkOtherUserByType("2",phone); if(!flag){ return -1; } } } // 插入用户表 String salt =DateUtil.getRandomNickname(16); String pass=""; if(null!=password&&!"".equals(password)){ pass = DateUtil.encrypt(salt,password); }else{ pass = DateUtil.encrypt(salt,"123456"); } if(type.equals("4")){ dao.addCuserRole(id, phone, pass,type, "xzx_user_other_info",area,partnerId,name,salt, roleId,cityId,storageId); }else{ dao.addCuserRole(id, phone, pass,type, "xzx_user_other_info",area,partnerId,name,salt, roleId,cityId,null); } //创建终端 XzxCityPartner partner = cityPartnerService.queryById(partnerId); String serviceType=""; if(type.equals("2")){ serviceType="1"; }else if(type.equals("6")){ serviceType="2"; } if(null!=serviceType&&!"".equals(serviceType)){ String sid = cityPartnerService.querySidByPid(partnerId,serviceType); String tid = createServiceTerminal(partner.getPartnerKey().split(",")[0],sid,id); dao.updateOtherUserById(tid,id,type); } }else{ if(type.equals("7")){ return -2; } if(dao.queryUserByUsertype1(phone, type, "1", "xzx_user_other_info",null,null)!=null){ //如果有账号就修改,没有就新增 bool = false; } if(type.equals("2")){ boolean flag = checkOtherUserByType("4",phone); if(!flag){ return -1; } }else if(type.equals("4")){ boolean flag = checkOtherUserByType("2",phone); if(!flag){ return -1; } } String salt =null; String pass=null; if(type.equals("4")){ dao.updateDelflag(phone, type,roleId,name, "xzx_user_other_info",pass,salt,area,partnerId,cityId,storageId); }else{ dao.updateDelflag(phone, type,roleId,name, "xzx_user_other_info",pass,salt,area,partnerId,cityId,null); } } UserModel u = dao.queryUserByUsertype1(phone, type, "0", "xzx_user_other_info",null,null); // 添加账号表 id="ZH"+snowflake.nextIdStr(); Map setMap = new HashMap<>(); if(type.equals("4")){ setMap = settingConsoleDao.queryWarehousingPrice(); }else{ setMap = settingConsoleDao.queryOverdrawPrice(); } String value = setMap.get("configValue").toString(); if(!bool){ dao.updateCuserAccount(phone,u.getUserId()); //dao.addCuserAccountRole(id, phone, u.getUserId(),value); }else{ dao.addCuserAccountRole(id, phone, u.getUserId(),value); } // 删除redis 缓存 // redis为map, key为user id, 先根据手机号码查询所有id, 进行遍历删除 UserModel userModel = dao.queryUserByUsertype(phone, "1", "0", "xzx_user_info",null,null); // redisService.removeToken(userModel.getUserId()); //redisService.remove("xzx:user:token:"+userModel.getUserId()); //redisService.remove("xzx:user:token:"+id); List> userIds = dao.queryCuserByPhoneRedisDelList(phone); for (Map map:userIds) { String userId = map.get("userId").toString(); redisService.remove("xzx:user:token:"+userId); } redisService.remove(phone); return 1; } /** * 根据用户ID查询 * @param userId * @return */ public UserModel queryUserOtherInfoById(String userId){ return dao.queryUserOtherInfoById(userId); } public String queryConfigByTagCodeOne(String typeCode){ return xzxOrderAppraiseInfoDao.queryConfigByTagCodeOne(typeCode); } }