package com.ibeetl.admin.console.service; 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.ibeetl.admin.console.dao.*; import com.ibeetl.admin.console.model.OrderModel; import com.ibeetl.admin.console.model.OrderOperationLogModel; import com.ibeetl.admin.console.model.SysAddressLevelModel; import com.ibeetl.admin.console.model.UserModel; import com.ibeetl.admin.console.rabbitmq.MqConstants; import com.ibeetl.admin.console.rabbitmq.MqUtil; 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.entity.CoreUser; import com.ibeetl.admin.core.entity.XzxCityPartner; import com.ibeetl.admin.core.service.CorePlatformService; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.formula.functions.T; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @Service public class OrderManageService { static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Autowired XzxCityPartnerService cityPartnerService; private final Logger log = LoggerFactory.getLogger(this.getClass()); @Autowired OrderManageDao dao; @Autowired RedisService redisService; @Autowired CuserConsoleDao cuserConsoleDao; @Autowired ComplaintConsoleDao complaintConsoleDao; @Autowired SettingConsoleDao settingConsoleDao; @Autowired CorePlatformService platformService; @Autowired PayConsoleDao payConsoleDao; @Autowired CuserConsoleService cuserConsoleService; @Autowired MqUtil mqUtil; final Base64 base64 = new Base64(); /** * 统计 * @return */ public Map queryStaticData(){ // 入库后的数据 List> dmap = dao.queryStaticData(1); List> tmap = dao.queryStaticDataToday(sdf.format(new Date()) + " 00:00:00", sdf.format(new Date()) + " 23:59:59",null, 1); // 入库前的数据b List> bdmap = dao.queryStaticData(2); List> btmap = dao.queryStaticDataToday(sdf.format(new Date()) + " 00:00:00", sdf.format(new Date()) + " 23:59:59",null,2); // 计算前后的差值 // 总的 List> flist = subValue(dmap, bdmap); // 今天的 List> todayList = subValue(tmap, btmap); Map m = new HashMap<>(); m.put("afterTotal", flist); m.put("afterTodayToday", todayList); return m; } /** * 统计详情 * @param startTime * @param endTime */ public Map queryDetailList(String startTime, String endTime, String storageUserName, String receiverName, String page, String limit){ int p = Integer.parseInt(page)-1; p = p * Integer.parseInt(limit); if(!StringUtils.isEmpty(storageUserName)){ storageUserName = new String(Base64.encodeBase64(storageUserName.getBytes())); } /*if(!StringUtils.isEmpty(receiverName)){ receiverName = new String(Base64.encodeBase64(receiverName.getBytes())); }*/ int count = dao.queryDetailListCount(startTime, endTime, storageUserName, receiverName, "1"); List> list = dao.queryDetailList(startTime, endTime, storageUserName, receiverName, "1", p, Integer.parseInt(limit)); List> beforeList = dao.queryDetailList(startTime, endTime, storageUserName, receiverName, "2", p, Integer.parseInt(limit)); list = subValue2(list, beforeList); Map map = new HashMap<>(); map.put("count", count); map.put("data", list); return map; } /** * 还是统计 * @param startTime * @param endTime * @param receiverphone * @return */ public Map queryDetailTotal(String startTime, String endTime, String receiverphone){ List> tmap = dao.queryStaticDataToday(startTime, endTime, receiverphone, 1); List> btmap = dao.queryStaticDataToday(startTime, endTime, receiverphone,2); List> todayList = subValue(tmap, btmap); Map m = new HashMap<>(); m.put("afterTotal", todayList); m.put("beforeTotal", btmap); m.put("afterTotalx", tmap); return m; } /** * 查询回收员的订单详细,每一单里面多少东西 * @param startTime * @param endTime * @param phone */ public Map queryUserOrderNo(String startTime, String endTime, String phone, String page, String limit){ int p = Integer.parseInt(page)-1; p = p * Integer.parseInt(limit); List> map = dao.queryUserOrderNo(startTime, endTime, phone, p, Integer.parseInt(limit), 1); int count = dao.queryUserOrderNoCount(startTime, endTime, phone, 1); List> list = new ArrayList<>(); for(Map m : map){ Map mx = new HashMap<>(); mx.put("receiveTime", m.get("storageTime")); mx.put("storageId", m.get("storageId")); mx.put("data", dao.queryTotalForOrderNo(m.get("storageId").toString(), "1")); list.add(mx); } // 查询未入库之前的 List> beforeMap = dao.queryUserOrderNo(startTime, endTime, phone, p, Integer.parseInt(limit), 2); List> beforeList = new ArrayList<>(); for(Map m : beforeMap){ String orderIds = dao.queryOrderIdsByStorageId(m.get("storageId").toString()); String[] ids = orderIds.split(","); Map mx = new HashMap<>(); mx.put("receiveTime", m.get("storageTime")); mx.put("storageId", m.get("storageId")); //mx.put("data", dao.queryTotalForOrderNo(m.get("storageId").toString(), "2")); mx.put("data", dao.queryTotalOrderItemByIds(ids,m.get("storageId").toString())); beforeList.add(mx); } // List listSum = new ArrayList<>(); for(Map m : list){ Map mSum = new HashMap<>(); List> anlist = (List>)m.get("data"); mSum.put("receiveTime", m.get("receiveTime")); mSum.put("storageId", m.get("storageId")); if(m.get("storageId")==null){ mSum.put("afterData", anlist); listSum.add(mSum); break; } String strorageId = m.get("storageId").toString(); for(Map mx : beforeList){ if(strorageId.equals(mx.get("storageId").toString())){ List> bnlist = (List>)mx.get("data"); mSum.put("afterData", anlist); mSum.put("before", bnlist); listSum.add(mSum); break; } } } // list = subValue3(list, beforeList); Map m = new HashMap<>(); m.put("count", count); m.put("data", listSum); m.put("code", 0); return m; } /** * 根据订单好查询订单详细 * @param orderNo * @return */ public List> queryOrderByOrderno(String orderNo){ return dao.queryOrderByOrderno(orderNo); } /** * 根据订单好查询订单详细 * @param orderModel * @return */ public Map queryOrderByOrderno(OrderModel orderModel){ String orderNo = orderModel.getOrderId(); int page = orderModel.getPage(); int limit = orderModel.getLimit(); Map result = new HashMap<>(); int p = page-1; p = p * limit; List> list = dao.queryOrderPageByOrderno(orderNo,p,limit); String address="无配送地址"; String addressArea = ""; String remark =""; String reserveTime=""; if(null!=list&&list.size()>0){ Map pmap = list.get(0); if(null!=pmap.get("address")){ address = pmap.get("address").toString(); } if(null!=pmap.get("addressArea")){ addressArea = pmap.get("addressArea").toString(); } if(null!=pmap.get("reserveTime")){ reserveTime = pmap.get("reserveTime").toString(); } if(null!=pmap.get("remark")){ remark = pmap.get("remark").toString(); } } result.put("count",dao.queryOrderCountByOrderno(orderNo)); result.put("code",0); result.put("data",list); result.put("address",address); result.put("addressArea",addressArea); result.put("remark",remark); result.put("reserveTime",reserveTime); return result; } //------------------------------------------------------------- /** * 计算差值1 * @param tmap * @param btmap * @return */ List> subValue(List> tmap, List> btmap){ List> flist = new ArrayList<>(); for(Map atm : tmap){ String cvn = atm.get("configValueName").toString(); double amoney = Double.parseDouble(atm.get("money").toString()); double aweight = Double.parseDouble(atm.get("weight").toString()); for(Map btm : btmap){ Map fm = new HashMap<>(); if(cvn.equals(btm.get("configValueName"))){ fm.put("configValueName", btm.get("configValueName")); fm.put("moneySub", Double.parseDouble(btm.get("money").toString()) - amoney); fm.put("weightSub", Double.parseDouble(btm.get("weight").toString()) - aweight); flist.add(fm); break; } } } for (Map m : flist){ String cvn = m.get("configValueName").toString(); for(Map atm : tmap){ if(cvn.equals(atm.get("configValueName"))){ atm.put("moneySub", m.get("moneySub")); atm.put("weightSub", m.get("weightSub")); break; } } } return tmap; } /** * 计算差值2 * @param tmap * @param btmap * @return */ List> subValue2(List> tmap, List> btmap){ List> flist = new ArrayList<>(); String cvn = "--"; for(Map atm : tmap){ if(null!=atm.get("receiverName")){ cvn = atm.get("receiverName").toString(); } double amoney = Double.parseDouble(atm.get("money").toString()); double aweight = Double.parseDouble(atm.get("weight").toString()); for(Map btm : btmap){ Map fm = new HashMap<>(); if(null!=btm.get("receiverName")){ if(cvn.equals(btm.get("receiverName"))){ fm.put("receiverName", btm.get("receiverName")); fm.put("moneySub", Double.parseDouble(btm.get("money").toString()) - amoney); fm.put("weightSub", Double.parseDouble(btm.get("weight").toString()) - aweight); flist.add(fm); break; } }else{ if(cvn.equals("--")&&atm.get("receiverPhone").equals(btm.get("receiverPhone"))){ fm.put("receiverName", btm.get("receiverName")); fm.put("moneySub", Double.parseDouble(btm.get("money").toString()) - amoney); fm.put("weightSub", Double.parseDouble(btm.get("weight").toString()) - aweight); fm.put("receiverPhone", btm.get("receiverPhone")); flist.add(fm); break; } continue; } } } for (Map m : flist){ if(null!=m.get("receiverName")){ cvn = m.get("receiverName").toString(); } for(Map atm : tmap){ if(null!=m.get("receiverName")){ if(cvn.equals(atm.get("receiverName"))){ atm.put("moneySub", m.get("moneySub")); atm.put("weightSub", m.get("weightSub")); break; } }else{ if(m.get("receiverPhone").equals(atm.get("receiverPhone"))){ atm.put("moneySub", m.get("moneySub")); atm.put("weightSub", m.get("weightSub")); break; } continue; } } } return tmap; } /** * 计算差值3 * @param tmap * @param btmap * @return */ List> subValue3(List> tmap, List> btmap){ List> flist = new ArrayList<>(); for(Map atm : tmap){ List> anm = (List>)atm.get("data"); for(Map anmx : anm){ if(anmx.get("storageId") == null) { break; } String cvn = anmx.get("storageId").toString(); for(Map mx : btmap){ List> x = (List>)mx.get("data"); Map fm = new HashMap<>(); for(Map bx : x){ if(cvn.equals(bx.get("storageId"))){ fm.put("storageId", mx.get("storageId")); fm.put("moneySub", Double.parseDouble(bx.get("money").toString()) - Double.parseDouble(anmx.get("money").toString())); fm.put("weightSub", Double.parseDouble(bx.get("weight").toString()) - Double.parseDouble(anmx.get("weight").toString())); flist.add(fm); break; } } } } } for (Map m : flist){ String cvn = m.get("storageId").toString(); for(Map atm : tmap){ if(cvn.equals(atm.get("storageId"))){ List> x = (List>)atm.get("data"); for(Map bx : x){ bx.put("moneySub", m.get("moneySub")); bx.put("weightSub", m.get("weightSub")); break; } } } } return tmap; } //////////上门回收////////////////////////////////////////////////////////////////////////////////// /** * 订单列表查询 * @param orderStatus * @param startTime * @param endTime * @param page * @param limit * @return */ public Map queryOrderList(String orderStatus, String name, String mobilePhone, String startTime, String endTime, String orderType, String page, String limit){ int p = (Integer.parseInt(page) - 1) * Integer.parseInt(limit); List> maps = dao.queryOrderList(orderStatus, startTime,name, mobilePhone, endTime, orderType, p, Integer.parseInt(limit)); Map map = new HashMap<>(); map.put("data", maps); map.put("count", dao.queryOrderListCount(orderStatus, startTime,name, mobilePhone, endTime, orderType)); map.put("code", 0); return map; } public Map queryOrderApiList(OrderModel orderModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); String orderStatus = "1"; int p = (orderModel.getPage() - 1) * orderModel.getLimit(); String startTime = orderModel.getStartTime(); String endTime = orderModel.getEndTime(); if(null!=startTime&&!"".equals(startTime)){ startTime = startTime+ " 00:00:00"; } if(null!=endTime&&!"".equals(endTime)){ endTime = endTime+ " 23:59:59"; } orderModel.setStartTime(startTime); orderModel.setEndTime(endTime); OrderModel newOrderModel = new OrderModel(); newOrderModel.setOrderStatus(orderModel.getOrderStatus()); newOrderModel.setStartTime(startTime); newOrderModel.setName(orderModel.getName()); newOrderModel.setEndTime(endTime); newOrderModel.setOrderType(orderModel.getOrderType()); newOrderModel.setPage(p); newOrderModel.setLimit(orderModel.getLimit()); newOrderModel.setCreateType(orderModel.getCreateType()); newOrderModel.setOrderId(orderModel.getOrderId()); newOrderModel.setPartnerIds(partnerIds); if(!StringUtils.isEmpty(orderModel.getNickName())){ newOrderModel.setMobilePhone(orderModel.getNickName()); newOrderModel.setNickName(new String(Base64.encodeBase64(orderModel.getNickName().getBytes()))); } List maps= new ArrayList<>(); if(orderStatus.equals("1")){ List townIds = new ArrayList<>(); townIds = dao.queryTownIdsByPartnerIds(partnerIds); if(null!=partnerIds&&partnerIds.size()>0){ newOrderModel.setTownIds(townIds); } maps = dao.queryOrderByTownIdApiList(newOrderModel); }else{ maps = dao.queryOrderApiList(newOrderModel); } for (OrderModel model:maps) { //查询订单区域属于哪个合伙人 String townId = dao.queryOrderByPartnerId(model.getOrderId()); String partnerId = dao.queryTownIdByPartnerId(townId); model.setPartnerId(partnerId); if(null!=model.getOrderMoney()&&!"".equals(model.getOrderMoney())){ model.setOrderMoney(DoubleUtil.roundTwo(model.getOrderMoney())); } if(null!=model.getOrderWeight()&&!"".equals(model.getOrderWeight())){ model.setOrderWeight(DoubleUtil.roundThree(model.getOrderWeight())); } if(!StringUtils.isEmpty(model.getNickName())) { try { if(DateUtil.isBase64(model.getNickName())){ model.setNickName(new String(base64.decode(model.getNickName()), "UTF-8")); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } int count =0; if(orderStatus.equals("1")){ count = dao.queryOrderByTownIdsApiListCount(newOrderModel); }else{ count = dao.queryOrderApiListCount(newOrderModel); } Map map = new HashMap<>(); map.put("data", maps); map.put("count", count); map.put("code", 0); return map; } /** * 订单列表查询 * @param orderStatus * @param startTime * @param endTime * @param page * @param limit * @return */ public Map queryOrderApiList(String orderStatus, String name, String mobilePhone, String startTime, String endTime, String orderType, String page, String limit){ int p = (Integer.parseInt(page) - 1) * Integer.parseInt(limit); List> maps = dao.queryOrderList(orderStatus, startTime,name, mobilePhone, endTime, orderType, p, Integer.parseInt(limit)); for (Map model1:maps) { model1.put("ordermoney",DoubleUtil.roundTwo(model1.get("ordermoney").toString())); model1.put("orderweight",DoubleUtil.roundThree(model1.get("orderweight").toString())); } Map map = new HashMap<>(); map.put("data", maps); map.put("count", dao.queryOrderListCount(orderStatus, startTime,name, mobilePhone, endTime, orderType)); map.put("code", 0); return map; } /** * 根据用户类型查询用户列表 * @param userType * @param nikeName * @param phone */ public Map queryCuserByType(String userType, String nikeName, String phone, String page, String limit){ int p = (Integer.parseInt(page) - 1) * Integer.parseInt(limit); List> maps = cuserConsoleDao.queryCuserByTypeList(userType, nikeName, phone, p, Integer.parseInt(limit)); for(Map m : maps){ List> scount = dao.queryStatusByCuserId(m.get("userId").toString()); for(Map mx : scount){ m.put("o"+mx.get("orderstatus").toString(), mx.get("count")); } } Map m = new HashMap<>(); m.put("data", maps); m.put("count", cuserConsoleDao.queryCuserByTypeListCount(userType, nikeName, phone)); m.put("code", 0); return m; } /** * 根据用户类型查询用户列表 * @param orderModel */ public Map queryCuserApiByType(OrderModel orderModel){ String userType = orderModel.getUserType(); String nickName=orderModel.getNickName(); if(!StringUtils.isEmpty(nickName)) { nickName = new String(Base64.encodeBase64(nickName.getBytes())); } String phone =orderModel.getMobilePhone(); int page = orderModel.getPage(); int limit = orderModel.getLimit(); int p = (page- 1) * limit; List> maps = cuserConsoleDao.queryCuserByTypeList(userType, nickName,phone , p, limit); for(Map m : maps){ List> scount = dao.queryStatusByCuserId(m.get("userId").toString()); int unFinishOrder = 0 ; int finishOrder = 0 ; //m.put("unFinishOrder",) for(Map mx : scount){ if(mx.get("orderstatus").toString().equals("5")){ finishOrder = Integer.parseInt(mx.get("count").toString()); }else if(mx.get("orderstatus").toString().equals("2")){ unFinishOrder = unFinishOrder+ Integer.parseInt(mx.get("count").toString()); }else if(mx.get("orderstatus").toString().equals("3")){ unFinishOrder = unFinishOrder+ Integer.parseInt(mx.get("count").toString()); } } m.put("unFinishOrder",unFinishOrder); m.put("finishOrder",finishOrder); } Map m = new HashMap<>(); m.put("data", maps); m.put("count", cuserConsoleDao.queryCuserByTypeListCount(userType, nickName, phone)); m.put("code", 0); return m; } public Map cancelOrderData(OrderModel orderModel){ Map result = new HashMap<>(); String orderId = orderModel.getOrderId(); String cancelReasonName = orderModel.getCancelReasonName(); int num = dao.updateOrderStatus1(orderId,"6"); if(num>0){ //修改取消原因 int detailNum = dao.updateOrderDetailReData(orderId,cancelReasonName); String receiver = dao.queryOrderByOrderId(orderId); //修改缓存 if(null!=receiver&&!"".equals(receiver)){ Object obj = redisService.hmGet("xzx:order:orderNum",receiver); if(null!=obj){ int objNum = Integer.parseInt(obj.toString()); objNum =objNum-1; redisService.hmSet("xzx:order:orderNum",receiver,objNum+""); } } String msg = "您的订单"+orderId+"已经取消"; String msg1 = "订单"+orderId+"已经取消"; String userId = dao.queryUserIdByOrderId(orderId); payConsoleDao.insertMessage(msg,userId,"","1","取消订单",sdf1.format(new Date())); if(null!=receiver&&!"".equals(receiver)){ payConsoleDao.insertMessage(msg1,receiver,"","1","取消订单",sdf1.format(new Date())); } result.put("code",0); result.put("orderId",orderId); }else{ result.put("code",-1); result.put("orderId",orderId); } return result; } public Map queryStorageApiList(OrderModel orderModel){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); Map map = new HashMap<>(); int p = (orderModel.getPage()- 1) * orderModel.getLimit(); orderModel.setPage(p); String startTime = orderModel.getStartTime(); String endTime = orderModel.getEndTime(); if(null!=startTime&&!"".equals(startTime)){ orderModel.setStartTime(startTime+" 00:00:00"); } if(null!=endTime&&!"".equals(endTime)){ orderModel.setEndTime(endTime+" 23:59:59"); } orderModel.setPartnerIds(partnerIds); List> list = dao.queryStorageApiList(orderModel); for (Map pmap:list) { String storageWeight = "0"; String orderWeight = "0"; String storageMoney = "0"; String orderMoney = "0"; if(null!=pmap.get("storageweight")){ storageWeight=pmap.get("storageweight").toString(); } if(null!=pmap.get("recycleweight")){ orderWeight=pmap.get("recycleweight").toString(); } if(null!=pmap.get("storagemoney")){ storageMoney=pmap.get("storagemoney").toString(); } if(null!=pmap.get("recyclemoney")){ orderMoney=pmap.get("recyclemoney").toString(); } pmap.put("storageweight",DoubleUtil.roundThree(storageWeight)); pmap.put("recycleweight",DoubleUtil.roundThree(orderWeight)); pmap.put("storagemoney",DoubleUtil.roundTwo(storageMoney)); pmap.put("recyclemoney",DoubleUtil.roundTwo(orderMoney)); BigDecimal weightError1 = new BigDecimal(storageWeight).subtract(new BigDecimal(orderWeight)); BigDecimal moneyError1=new BigDecimal(storageMoney).subtract(new BigDecimal(orderMoney)); pmap.put("weightError",DoubleUtil.roundThree(weightError1.toString()));//重量误差 pmap.put("moneyError",DoubleUtil.roundTwo(moneyError1.toString()));//重量误差 if(null!=pmap.get("vehicleid")){ String vehicleId = pmap.get("vehicleid").toString(); BigDecimal batchError = new BigDecimal("0"); BigDecimal weightError = new BigDecimal("0"); String batchWeight = pmap.get("batchweight").toString(); String emptyWeight = pmap.get("emptyweight").toString(); batchError = new BigDecimal(batchWeight).subtract(new BigDecimal(emptyWeight)); System.out.println("vehicleId==="+vehicleId); pmap.put("emptyWeight",DoubleUtil.roundThree(emptyWeight)); //空车 pmap.put("batchWeight",DoubleUtil.roundThree(batchWeight));//载重 pmap.put("batchError",DoubleUtil.roundThree(batchError.toString()));//核算 // }else{ pmap.put("emptyWeight","0"); //空车 pmap.put("batchWeight","0");//载重 pmap.put("batchError","0");//核算 } } map.put("data",list); map.put("code",0); map.put("count",dao.queryStorageApiNum(orderModel)); return map; } public Map queryStorageDetailApiList(OrderModel orderModel){ Map map = new HashMap<>(); List> queryStorageDetailApiList = new ArrayList<>(); int p = (orderModel.getPage()- 1) * orderModel.getLimit(); int count = 0 ; String storageId = orderModel.getStorageId(); String orderIds = dao.queryOrderIdsByStorageId(storageId); String[] orderids = orderIds.split(","); List orderIdList = new ArrayList<>(); for (String orderId:orderids) { orderIdList.add(orderId); } if(orderIdList.size()>0){ if(null!=orderModel.getOrderType()){ if(orderModel.getOrderType().equals("1")){ queryStorageDetailApiList = dao.queryStroageDetailPageByOrderno(orderIdList,storageId,p,orderModel.getLimit()); count = dao.queryStroageDetailCountByOrderno(orderIdList,storageId); }else{ queryStorageDetailApiList = dao.queryStorageDetailApiList(orderIdList,p,orderModel.getLimit()); count = orderids.length; } }else{ queryStorageDetailApiList = dao.queryStorageDetailApiList(orderIdList,p,orderModel.getLimit()); count = orderids.length; } } for (Map obj:queryStorageDetailApiList) { String ordermoney ="0"; String orderweight ="0"; String moneyerror="0"; String weighterror="0"; if(null!=obj.get("recyclemoney")&&!"".equals(obj.get("recyclemoney"))){ obj.put("recycleMoney",DoubleUtil.roundTwo(obj.get("recyclemoney").toString())); moneyerror = new BigDecimal(obj.get("recyclemoney").toString()).subtract(new BigDecimal(obj.get("storagemoney").toString())).toString(); obj.put("moneyerror",DoubleUtil.roundTwo(moneyerror)); obj.put("storagemoney",DoubleUtil.roundTwo(obj.get("storagemoney").toString())); } if(null!=obj.get("recycleweight")&&!"".equals(obj.get("recycleweight"))){ obj.put("recycleweight",DoubleUtil.roundThree(obj.get("recycleweight").toString())); weighterror = new BigDecimal(obj.get("recycleweight").toString()).subtract(new BigDecimal(obj.get("storageweight").toString())).toString(); obj.put("weighterror",DoubleUtil.roundThree(weighterror)); obj.put("storageweight",DoubleUtil.roundThree(obj.get("storageweight").toString())); } if(null!=obj.get("ordermoney")&&!"".equals(obj.get("ordermoney"))){ ordermoney = obj.get("ordermoney").toString(); } if(null!=obj.get("orderweight")&&!"".equals(obj.get("orderweight"))){ orderweight = obj.get("orderweight").toString(); } obj.put("ordermoney",DoubleUtil.roundTwo(ordermoney)); obj.put("orderweight",DoubleUtil.roundThree(orderweight)); } map.put("count",count); map.put("code",0); map.put("data",queryStorageDetailApiList); return map; } public Map updateApirecByOrderId(OrderModel orderModel,String appkey,String screct){ //判断接单数量 修改回收员接单数+1 Map map= new HashMap<>(); String orderId = orderModel.getOrderId(); String receiver = dao.queryOrderByOrderId(orderId); String oldTrid=""; String newTrid=""; String obj = dao.queryOrderReNum(orderModel.getUserId()); if(null!=obj){ int objNum = Integer.parseInt(obj); Map m = settingConsoleDao.queryOrderTotal(); int configNum = Integer.parseInt(m.get("configValue").toString()); objNum = objNum+1; if(objNum>configNum){ map.put("code",-1); map.put("orderId",orderModel.getOrderId()); map.put("msg","回收员超过自身可接单数量!"); return map; } } String userId = orderModel.getUserId(); int num = 0; //生成轨迹Id String url ="https://tsapi.amap.com/v1/track/trace/add"; //key sid tid UserModel userModel = cuserConsoleService.queryUserOtherById(orderModel.getUserId()); String partnerId = userModel.getPartnerId(); XzxCityPartner partner = cityPartnerService.queryById(partnerId); String key = partner.getPartnerKey(); String tid=userModel.getTerminalId(); String sid = cityPartnerService.querySidByPid(partner.getId()+"","1"); Map map1 = new HashMap<>(); String result1=""; if(null!=key&&!"".equals(key)){ map1.put("key",key); map1.put("sid",sid); map1.put("tid",tid); result1 = HttpClientUtils.doPost(url,map1); }else{ return null; } Map maps1 = (Map) JSON.parse(result1); if(null!=maps1.get("data")){ String data = maps1.get("data").toString(); Map mapsHsy = (Map)JSON.parse(data); if(null!=mapsHsy.get("trid")){ String trid = mapsHsy.get("trid").toString(); num = dao.updateApirecByOrderId(orderId,userId,trid); newTrid=trid; } } UserModel apirecUserModel = cuserConsoleDao.queryUserOtherApiById(userId,"2"); int num1 = dao.updateApirecDetailByOrderId(orderId,apirecUserModel.getMobilePhone(),apirecUserModel.getName()); //发消息队列订单操作 sendOperationLog(orderModel); //发消息给回收员1 String message = "指派订单"+orderId+"给您,请准时到达现场"; payConsoleDao.insertMessage(message,userId,"","1","指派订单",sdf1.format(new Date())); if(null!=receiver&&!"".equals(receiver)){ UserModel uu = cuserConsoleService.queryUserOtherById(receiver); oldTrid = uu.getTerminalId(); String message1 = "订单"+orderId+"已更换骑手"; payConsoleDao.insertMessage(message1,receiver,"","1","订单变更",sdf1.format(new Date())); } //极光推送 Map newMap = new HashMap<>(); newMap.put("traceIds", newTrid); Map oldMap = new HashMap<>(); newMap.put("traceIds", oldTrid); sendByAnroid("", "轨迹", newMap, Audience.alias(userId),appkey,screct); sendByAnroid("", "轨迹", oldMap, Audience.alias(receiver),appkey,screct); if(num>0){ map.put("code",0); map.put("orderId",orderId); }else{ map.put("code",-1); map.put("orderId",orderId); } return map; } 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(); } } private void sendOperationLog(OrderModel orderModel){ OrderOperationLogModel operationLogModel = new OrderOperationLogModel(); operationLogModel.setOrderId(orderModel.getOrderId()); operationLogModel.setOperateContent("后台指派回收员"); operationLogModel.setOrderStatus("2"); operationLogModel.setOrderSecondStatus("1"); operationLogModel.setOperateTime(sdf1.format(new Date())); //CoreUser user = platformService.getCurrentUser(); operationLogModel.setOperateUserId(orderModel.getUserId()); mqUtil.send(MqConstants.ORDER_OPERATION_LOG_QUEUE,operationLogModel); // redisService.remove("xzx:order:status:"+orderModel.getOrderId()); } /** * 订单是待接单状态,后台直接指定接单员 * @param orderId 订单好 * @param receiveId 派单员ID * @param orderStatus 订单状态 */ public int updataOrderStatus(String flag, String orderId, String receiveId, String orderStatus, String complaintId, String complainPlan, String afterSleFlag){ // 等于1,说明是投诉那边派单的,需要更新投诉表的数据 if(flag.equals("1")){ complaintConsoleDao.updateComplaintFlag(complaintId, complainPlan, afterSleFlag); return dao.updateOrderStatus(orderId, receiveId, orderStatus); }else{ List> map = dao.queryOrderByOrderno(orderId); if(map.size() ==0){ return 0; }else { // 在更新前需要再次查询当前订单的状态是否为1 if(map.get(0).get("orderStatus").equals("1")){ return dao.updateOrderStatus(orderId, receiveId, orderStatus); }else { return 0; } } } } public List queryAdressArea(SysAddressLevelModel addressLevelModel){ if(addressLevelModel.getType().equals("0")){ return dao.queryProvince(); }else if(addressLevelModel.getType().equals("1")){ return dao.queryCityByProvinceId(addressLevelModel.getLevel1Id()); }else if(addressLevelModel.getType().equals("2")){ return dao.queryTownShipByCityId(addressLevelModel.getLevel2Id()); }else{ return null; } } }