package com.xzx.gc.order.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.xzx.gc.common.Result; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.dto.gdmap.FindTraceDto; import com.xzx.gc.common.dto.gdmap.TrackDto; import com.xzx.gc.common.dto.gdmap.UploadTraceLocationDto; import com.xzx.gc.common.utils.gdmap.GdTraceUtil; import com.xzx.gc.entity.CityPartner; import com.xzx.gc.entity.CoreUser; import com.xzx.gc.entity.OrderInfo; import com.xzx.gc.model.admin.*; import com.xzx.gc.order.mapper.*; import com.xzx.gc.util.DoubleUtil; import com.xzx.gc.util.SessionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Service @Transactional @Slf4j public class CityPartnerService { @Autowired private CityPartnerMapper cityPartnerMapper; @Autowired private SessionUtil platformService; @Autowired private PlatformAccountInfoMapper platformAccountInfoMapper; @Autowired private AccountLogMapper accountLogMapper; @Autowired private OtherUserMapper otherUserMapper; @Autowired private PlatformAccountLogMapper platformAccountLogMapper; @Autowired private OrderMapper orderMapper; @Autowired private AccountMapper accountMapper; @Autowired private FenceMapper fenceMapper; @Autowired private PartnerAccountMapper partnerAccountMapper; public CityPartner findByuserId(String userid,String partnerType){ CityPartner cityPartner=new CityPartner(); cityPartner.setDelFlag(0); cityPartner.setProhibit(false); cityPartner.setUserId(userid); cityPartner.setPartnerType(partnerType); return cityPartnerMapper.selectOne(cityPartner); } public List findByTypeWithDel(String type){ CityPartner cityPartner=new CityPartner(); cityPartner.setPartnerType(type); return cityPartnerMapper.select(cityPartner); } public CityPartner findById(Integer id){ return cityPartnerMapper.selectByPrimaryKey(id); } /** * 根据类型查找 分合伙人和打包站 * @param type * @return */ public List findByType(String type){ CityPartner cityPartner=new CityPartner(); cityPartner.setDelFlag(Constants.DEL_NOT_FLAG); cityPartner.setPartnerType(type); return cityPartnerMapper.select(cityPartner); } public AreaModel queryAreaLongiLati(AreaModel model) { return cityPartnerMapper.queryAreaLongiLati(model); } public List queryPackageIdList(String partnerId) { return cityPartnerMapper.queryPackageIdList(partnerId); } public void insertPartnerLogByPartner(PartnerAccountModel accountModel, String type, String money, String payOrderId,CityPartner partner,String newMoney) { //写入日志 PartnerAccountLogModel partnerLog = new PartnerAccountLogModel(); partnerLog.setAccountId(accountModel.getAccount()); partnerLog.setType(type); partnerLog.setCreateTime(DateUtil.now()); partnerLog.setRoleName("城市合伙人"); partnerLog.setUserName(partner.getPartnerName()); partnerLog.setUserPhone(partner.getMobilePhone()); if(type.equals("13")){ BigDecimal subMoney = new BigDecimal(money).multiply(new BigDecimal("-1")) ; partnerLog.setMoney(DoubleUtil.roundTwo(subMoney.toString())); }else{ partnerLog.setMoney(money); } partnerLog.setAccountMoney(accountModel.getHbb()); partnerLog.setHbb(newMoney); partnerLog.setFlowNo(payOrderId); partnerLog.setApproverStatus("1"); partnerLog.setDelFlag(0); partnerAccountMapper.addPartnerAccountLog(partnerLog); } public List queryPartnerByCurrent() { //查询合伙人列表 List partnerIds = new ArrayList<>(); CoreUser user = platformService.getCurrentUser(); //CoreUser user = cityPartnerMapper.queryCoreUser(); if (user.getId() == 1) { //如果是超管 显示全部投诉订单信息 partnerIds = null; } else { //如果是运营管理员 显示 if (user.getOrgId() == 10) { partnerIds = null; } else { //合伙人显示 该合伙人和名下合伙人的所有订单。 CityPartner partner = cityPartnerMapper.selectByPrimaryKey(user.getId()); if(null!=partner){ partnerIds.add(user.getId() + ""); }else{ partnerIds = null; } //多级合伙人带拓展 //List childPartnerIds = xzxOrderComplaintDao.queryChildPids(user.getId()+""); } } return partnerIds; } public int addPayInfo1(PayInfoModel model) { return cityPartnerMapper.addPayInfo1(model); } public void updateAccountPartner(UserAccountModel accountModel) { cityPartnerMapper.updateAccountPartner(accountModel); //return null } public void updatePartnerAccount(PartnerAccountModel partnerAccountModel) { partnerAccountMapper.updatePartnerAccount(partnerAccountModel); } public void insertAccountLogByPartner(UserAccountModel accountModel, String type, BigDecimal money, String payOrderId) { //写入日志 AccountLogModel log = new AccountLogModel(); log.setAccountId(accountModel.getAccountId()); log.setChannelType(type); log.setCreateTime(DateUtil.now()); log.setCreateUserId(accountModel.getUserId()); log.setNewFixedLimit(DoubleUtil.roundTwo("0")); log.setNewLimit(DoubleUtil.roundTwo("0")); log.setNewMoney(DoubleUtil.roundTwo(new BigDecimal(accountModel.getMoney()).add(money).toString())); log.setOldFixedLimit(DoubleUtil.roundTwo("0")); log.setOldLimit(DoubleUtil.roundTwo("0")); log.setOldMoney(DoubleUtil.roundTwo(accountModel.getMoney() + "")); log.setOrderId(payOrderId); accountLogMapper.insertAccountLog(log); } public void insertAccountLogByHsy(UserAccountModel accountModel, String type, BigDecimal money, String payOrderId) { //写入日志 AccountLogModel log = new AccountLogModel(); log.setAccountId(accountModel.getAccountId()); log.setChannelType(type); log.setCreateTime(DateUtil.now()); log.setCreateUserId(accountModel.getUserId()); log.setNewFixedLimit(DoubleUtil.roundTwo("0")); log.setNewLimit(DoubleUtil.roundTwo("0")); log.setNewMoney(DoubleUtil.roundTwo(new BigDecimal(accountModel.getMoney()).subtract(money).toString())); log.setOldFixedLimit(DoubleUtil.roundTwo("0")); log.setOldLimit(DoubleUtil.roundTwo("0")); log.setOldMoney(DoubleUtil.roundTwo(accountModel.getMoney() + "")); log.setOrderId(payOrderId); accountLogMapper.insertAccountLog(log); } public void insertPartnerAccountLog(PartnerAccountModel accountModel, String type, BigDecimal money, String payOrderId, String packageType) { //写入日志 AccountLogModel log = new AccountLogModel(); boolean flag = true; if(null!=accountModel.getAddType()&&!"".equals(accountModel.getAddType())){ log.setNewMoney(DoubleUtil.roundTwo(new BigDecimal(accountModel.getHbb()).add(money).toString())); }else{ flag = false; log.setNewMoney(DoubleUtil.roundTwo(new BigDecimal(accountModel.getHbb()).subtract(money).toString())); } CityPartner partner = cityPartnerMapper.queryEntityByUserIds(accountModel.getUserId()); PartnerAccountLogModel partnerLog = new PartnerAccountLogModel(); partnerLog.setFlowNo(payOrderId); partnerLog.setCreateTime(DateUtil.now()); partnerLog.setApproverStatus("1"); if(type.equals("14")){ if(!flag){ partnerLog.setMoney(DoubleUtil.roundTwo(money.multiply(new BigDecimal("-1")).toString())); }else{ partnerLog.setMoney(DoubleUtil.roundTwo(money.toString())); } }else{ if(!flag){ partnerLog.setMoney(DoubleUtil.roundTwo(money.multiply(new BigDecimal("-1")).toString())); }else{ partnerLog.setMoney(DoubleUtil.roundTwo(money.toString())); } } partnerLog.setHbb(log.getNewMoney()); partnerLog.setDelFlag(0); partnerLog.setAccountId(accountModel.getAccount()); partnerLog.setAccountMoney(DoubleUtil.roundTwo(accountModel.getHbb() + "")); partnerLog.setUserName(partner.getPartnerName()); if (null != packageType) { partnerLog.setType(packageType); } else { if(type.equals("9")){ partnerLog.setType("12"); }else if(type.equals("8")){ partnerLog.setType("7"); }else{ partnerLog.setType("1"); } } partnerLog.setUserPhone(partner.getMobilePhone()); partnerLog.setRoleName("城市合伙人"); partnerAccountMapper.addPartnerAccountLog(partnerLog); } public String queryAccountByAdminId() { return cityPartnerMapper.queryAccountByAdminId(); } public int updatePlatformHbb(String hbb) { return platformAccountInfoMapper.updatePlatformHbb(hbb); } public int updatePlatformMoney(String money) { return platformAccountInfoMapper.updatePlatformMoney(money); } public void insertPlatFormLog(PlatformAccountLogModel model) { platformAccountLogMapper.insertPlatFormLog(model); } public List queryPartnerFenceList(XzxCityPartnerModel model) { CoreUser user = platformService.getCurrentUser(); model.setId(user.getId() + ""); List list = fenceMapper.queryPartnerFenceList(model); return list; } public List queryPartnerFenceListByUser(XzxCityPartnerModel model) { CoreUser user = platformService.getCurrentUser(); List partnerIds = queryPartnerByCurrent(); if (user.getId() == 1) { model.setId(null); } else { model.setId(user.getId() + ""); } if (null != partnerIds && partnerIds.size() > 0) { model.setPartnerIds(partnerIds.get(0)); } List list = fenceMapper.queryPartnerFenceListByUser(model); return list; } public UserAccountModel queryPartnerAccountByUserId(String userId) { return accountMapper.getAccountByUserId(userId); } public String querySidByPid(String partnerId, String serviceType) { return cityPartnerMapper.querySidByPid(partnerId, serviceType); } public List queryTownIdsByPartnerId(String partnerId) { return cityPartnerMapper.queryTownIdsByPartnerId(partnerId); } public List> queryGaodeByUserId(XzxCityPartnerModel model) { List> list1 = new ArrayList<>(); CoreUser user = platformService.getCurrentUser(); List partnerIds = queryPartnerByCurrent(); CityPartner partner = cityPartnerMapper.queryPartnerById(user.getId()); String key = ""; if (null != model.getOrderId() && !"".equals(model.getOrderId())) { partner = cityPartnerMapper.queryPartnerKeyByOrder(model.getOrderId()); key = partner.getPartnerKey(); model.setUserType("2"); } else { model.setUserType("6"); } if (null != partner) { key = partner.getPartnerKey(); } else { UserModel userModel = otherUserMapper.queryUserOtherById(model.getUserId()); String partnerId = userModel.getPartnerId(); partner = queryById(partnerId); if (null != partner) { key = partner.getPartnerKey(); } else { return null; } } UserModel userModel = cityPartnerMapper.queryUserModelbyPartnerId(partnerIds, model.getUserType(), model.getUserId(), model.getOrderId()); if (null != model.getDayTime() && !"".equals(model.getDayTime())) { if (null != model.getDateTime() && !"".equals(model.getDateTime())) { String[] ss = model.getDateTime().split("-"); model.setStartTime(model.getDayTime() + " " + ss[0] + ":00"); model.setEndTime(model.getDayTime() + " " + ss[1] + ":59"); } } Map objMap = new HashMap<>(); String terminalId = userModel.getTerminalId(); Map map1 = new HashMap(); String url = ""; String type = null; if (userModel.getUserType().equals("2")) { type = "1"; map1.put("tid", terminalId); } else if (userModel.getUserType().equals("6")) { type = "2"; } String sid = cityPartnerMapper.querySidByPartnerId(partner.getId() + "", type); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); map1.put("key", key); map1.put("sid", sid); String result1 = ""; if (userModel.getUserType().equals("2")) { if (null != model.getOrderId()) { String trid = cityPartnerMapper.queryOrderById(model.getOrderId(), userModel.getUserId(), model.getStartTime(), model.getEndTime()); map1.put("trid", trid); FindTraceDto findTraceDto = BeanUtil.mapToBean(map1, FindTraceDto.class, true); Result> trace = GdTraceUtil.findTrace(findTraceDto); if (trace.getCode()==0) { List dataArr = trace.getData(); TrackDto mm = dataArr.get(0); objMap.put("distance", mm.getDistance()); objMap.put("totalTime", mm.getTime() / (1000 * 60)); objMap.put("counts", mm.getCounts()); List pointsList = mm.getPoints(); if (null != pointsList && pointsList.size() > 0) { List> propData = new ArrayList<>(); String address = ""; long t = 0; long tt1 = 0; for (UploadTraceLocationDto pp : pointsList) { Map propMap = new HashMap<>(); JSONObject jsonObject = JSONUtil.parseObj(pp.getProps()); String addressGD=jsonObject.getStr("address"); if (!"".equals(address)) { if (address.equals(addressGD)) { if (tt1 == 0) { tt1 = pp.getLocatetime() - t; } else { tt1 = tt1 + (pp.getLocatetime() - t); } continue; } else { propMap.put("stopTime", tt1 / (1000 * 60)); } } address = addressGD; propMap.put("address", address); t = pp.getLocatetime(); Date date = new Date(t); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tt = sdf1.format(date); propMap.put("time", tt); propData.add(propMap); } objMap.put("counts", propData.size()); objMap.put("propData", propData); } } } else { // List trids = cityPartnerMapper.queryOrderByIds(userModel.getUserId(), model.getStartTime(), model.getEndTime()); // for (int i = 0; i < trids.size(); i++) { // map1.put("trid", trids.get(i)); // String r1 = HttpClientUtils.doGet(url, map1); // if (i == 0) { // result1 = i + ":" + r1; // } else { // result1 = result1 + " " + i + ":" + r1; // } // } } } else if (userModel.getUserType().equals("6")) { try { Date date1 = simpleDateFormat.parse(model.getStartTime()); Date date2 = simpleDateFormat.parse(model.getEndTime()); long ts1 = date1.getTime(); long ts2 = date2.getTime(); map1.put("starttime", ts1 + ""); map1.put("endtime", ts2 + ""); map1.put("tid", terminalId); FindTraceDto findTraceDto = BeanUtil.mapToBean(map1, FindTraceDto.class, true); Result> trace = GdTraceUtil.findTrace(findTraceDto); if (trace.getCode()==0) { List dataArr = trace.getData(); TrackDto mm = dataArr.get(0); objMap.put("distance", mm.getDistance()); objMap.put("totalTime", mm.getTime() / (1000 * 60)); objMap.put("counts", mm.getCounts()); List pointsList = mm.getPoints(); if (null != pointsList && pointsList.size() > 0) { List> propData = new ArrayList<>(); String address = ""; long t = 0; long tt1 = 0; for (UploadTraceLocationDto pp : pointsList) { Map propMap = new HashMap<>(); JSONObject jsonObject = JSONUtil.parseObj(pp.getProps()); String addressGD=jsonObject.getStr("address"); if (!"".equals(address)) { if (address.equals(addressGD)) { if (tt1 == 0) { tt1 = pp.getLocatetime() - t; } else { tt1 = tt1 + (pp.getLocatetime() - t); } continue; } else { propMap.put("stopTime", tt1 / (1000 * 60)); } } address = addressGD; propMap.put("address", address); t = pp.getLocatetime(); Date date = new Date(t); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tt = sdf1.format(date); propMap.put("time", tt); propData.add(propMap); } objMap.put("counts", propData.size()); objMap.put("propData", propData); } } } catch (ParseException e) { e.printStackTrace(); } } objMap.put("userModel", userModel); list1.add(objMap); return list1; } public CityPartner queryById(String partnerId) { return cityPartnerMapper.selectByPrimaryKey(partnerId); } public List> queryOrderByHsy(XzxCityPartnerModel model) { if (null != model.getDayTime() && !"".equals(model.getDayTime())) { if (null != model.getDateTime() && !"".equals(model.getDateTime())) { String[] ss = model.getDateTime().split("-"); model.setStartTime(model.getDayTime() + " " + ss[0] + ":00"); model.setEndTime(model.getDayTime() + " " + ss[1] + ":59"); } else { model.setStartTime(model.getDayTime() + " 00:00:00"); model.setEndTime(model.getDayTime() + " 23:59:59"); } } else { String t = DateUtil.now(); String[] tl = t.split(" "); model.setStartTime(tl[0] + " 00:00:00"); model.setEndTime(tl[0] + " 23:59:59"); } List> list = cityPartnerMapper.queryOrderByHsy(model); return list; } public PartnerAccountModel queryAccountIdByUserId(String userId) { return partnerAccountMapper.queryAccountIdByUserId(userId); } public int deleteUserByPartnerId(String id, String accountId) { cityPartnerMapper.deleteAccount(accountId); return cityPartnerMapper.deleteUserByPartnerId(id); } public boolean update(CityPartner partner) { return cityPartnerMapper.updateByPrimaryKeySelective(partner)>0?true:false; } public CityPartner queryById(Long id) { return cityPartnerMapper.selectByPrimaryKey(id); } public CityPartner queryPartnerById(long l) { return cityPartnerMapper.queryPartnerById(l); } public String queryPidByTownId(String orderId) { OrderInfo info = orderMapper.findById(orderId); return cityPartnerMapper.queryPidByTownId(info.getTownId()); } }