package com.xzx.gc.order.service; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.DateUtils; import com.xzx.gc.common.utils.IdUtils; import com.xzx.gc.common.utils.StringUtils; import com.xzx.gc.entity.CityPartner; import com.xzx.gc.entity.OrderComplaint; import com.xzx.gc.entity.OrderInfo; import com.xzx.gc.entity.OtherUserInfo; import com.xzx.gc.model.admin.*; import com.xzx.gc.order.dto.ComplaintFindDto; import com.xzx.gc.order.dto.ComplaintFindResDto; import com.xzx.gc.order.mapper.AccountMapper; import com.xzx.gc.order.mapper.OrderComplaintMapper; import com.xzx.gc.order.mapper.OrderMapper; import com.xzx.gc.util.DoubleUtil; import com.xzx.gc.util.SessionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @Service @Transactional public class OrderComplaintService { @Autowired SessionUtil platformService; @Autowired private CityPartnerService cityPartnerService; @Autowired private BusinessUtil businessUtil; @Autowired private OrderService orderService; @Autowired private PayInfoService payInfoService; @Autowired private OrderMapper orderMapper; @Autowired private OrderComplaintMapper orderComplaintMapper; @Autowired private AccountMapper accountMapper; @Autowired private OtherUserService otherUserService; @Autowired private IdUtils idUtils; public int add(OrderComplaint orderComplaint) { if(StringUtils.isNotBlank(orderComplaint.getComplaintReason())){ orderComplaint.setComplaintReason(Base64.encode(orderComplaint.getComplaintReason())); } return orderComplaintMapper.insertSelective(orderComplaint); } public List find(ComplaintFindDto complaintFindDto) { List complaintFindResDtos = orderComplaintMapper.find(complaintFindDto); if(CollUtil.isNotEmpty(complaintFindResDtos)){ for (ComplaintFindResDto complaintFindResDto : complaintFindResDtos) { String receiver = complaintFindResDto.getReceiver(); OtherUserInfo byId = otherUserService.findById(receiver); if(byId!=null){ complaintFindResDto.setReceiverName(byId.getName()); }else { if(StrUtil.isNotBlank(complaintFindResDto.getReceiverName())){ complaintFindResDto.setReceiverName(Base64.decodeStr(complaintFindResDto.getReceiverName())); } } } } return complaintFindResDtos; } public List detail(String orderId) { List complaintFindResDtos = orderComplaintMapper.detail(orderId); if(CollUtil.isNotEmpty(complaintFindResDtos)){ for (ComplaintFindResDto complaintFindResDto : complaintFindResDtos) { String receiver = complaintFindResDto.getReceiver(); OtherUserInfo byId = otherUserService.findById(receiver); if(byId!=null){ complaintFindResDto.setReceiverName(byId.getName()); }else { if(StrUtil.isNotBlank(complaintFindResDto.getReceiverName())){ complaintFindResDto.setReceiverName(Base64.decodeStr(complaintFindResDto.getReceiverName())); } } } } return complaintFindResDtos; } /** * 根据条件查询投诉列表 * @param model * @return */ public Map queryComplaintApiList(XzxOrderComplaintModel model) { String afterSaleFlag = model.getAfterSaleFlag(); String startTime = model.getStartTime(); String endTime = model.getEndTime(); //int p = (model.getPage() - 1) * model.getLimit(); Map m = new HashMap<>(); String[] x = null; if (!org.apache.commons.lang3.StringUtils.isEmpty(afterSaleFlag)) { if (afterSaleFlag.equals("1")) { //完成包含 1 未处理 2 取消订单 3重新派单 afterSaleFlag = "1,2,3"; } x = afterSaleFlag.split(","); } if (null != startTime && !"".equals(startTime)) { startTime = startTime + " 00:00:00"; } if (null != endTime && !"".equals(endTime)) { endTime = endTime + " 23:59:59"; } List partnerIds = new ArrayList<>(); if(null!=model.getPartnerId()&&!"".equals(model.getPartnerId())){ partnerIds.add(model.getPartnerId()); }else{ partnerIds = cityPartnerService.queryPartnerByCurrent(); } PageHelper.startPage(model.getPage(),model.getLimit()); List list =orderComplaintMapper.queryComplaintApiList(x, startTime, endTime, model.getOrderId(),model.getUserPhone(),model.getCollectorName(),model.getCollectorPhone(),partnerIds); PageInfo pageInfo=new PageInfo<>(list); for (XzxOrderComplaintModel orderModel:list) { if(orderModel.getNickName()!=null&&!"".equals(orderModel.getNickName())){ String nickName =""; nickName =Base64.decodeStr(orderModel.getNickName()); orderModel.setNickName(nickName); } if(orderModel.getComplaintReason()!=null&&!"".equals(orderModel.getComplaintReason())){ String complaintReason =""; complaintReason = Base64.decodeStr(orderModel.getComplaintReason()); orderModel.setComplaintReason(complaintReason); } } m.put("data", list); m.put("count",pageInfo.getTotal()); m.put("code", 0); return m; } /** * 根据ID更新投诉单状态 * @param model */ public int updateComplaintFlagApi(XzxOrderComplaintModel model){ // OrderManageService为2是取消订单,需要更新订单状态为6 if(model.getAfterSaleFlag().equals("2")){ orderMapper.updateOrderStatus(model.getOrderId(), null, "6"); } return orderComplaintMapper.updateComplaintFlagApi(model.getId().toString(), model.getComplaintPlan(), model.getAfterSaleFlag()); } public PageInfo queryComplaintList(ComplaintModel model) { if(null!=model.getStartTime()&&!"".equals(model.getStartTime())){ model.setStartTime(DateUtils.changeTimeBigin(model.getStartTime())); } if(null!=model.getEndTime()&&!"".equals(model.getEndTime())){ model.setEndTime(DateUtils.changeTimeEnd(model.getEndTime())); } PageHelper.startPage(model.getPage(),model.getLimit()); List list = orderComplaintMapper.queryAdminComplaintList(model); for (ComplaintModel cModel:list) { if(StrUtil.isNotBlank(cModel.getMoney())) { cModel.setMoney(businessUtil.changeMoney(cModel.getMoney())); } if(StrUtil.isNotBlank(cModel.getWeight())) { cModel.setWeight(businessUtil.changeWeight(cModel.getWeight())); } String partnerId = cModel.getPartnerId(); if(null!=partnerId&&!"".equals(partnerId)){ CityPartner partner = cityPartnerService.queryById(Long.parseLong(partnerId)); cModel.setPartnerName(partner.getPartnerName()); } } PageInfo pageInfo=new PageInfo<>(list); return pageInfo; } private void insertUserAccountLog(String userId,BigDecimal money,String type,String payOrderId,String userType){ UserAccountModel userAccountModel = cityPartnerService.queryPartnerAccountByUserId(userId); if(userType.equals("1")){ cityPartnerService.insertAccountLogByPartner(userAccountModel,type,money,payOrderId); }else{ cityPartnerService.insertAccountLogByHsy(userAccountModel,type,money,payOrderId); } if(type.equals("16")){ }else{ PayInfoModel payInfoModel = new PayInfoModel(); payInfoModel.setPayOrderId(payOrderId); payInfoModel.setCreateUserId(userId); payInfoModel.setMoney(DoubleUtil.roundTwo(money.toString())); payInfoModel.setAccountId(userAccountModel.getAccountId()); payInfoModel.setStatus("3"); payInfoModel.setPayTime(DateUtil.now()); payInfoService.addPayInfo(payInfoModel); } } public String updateComplaintMoney(ComplaintModel model) { String orderMoney = orderService.queryMoneyByOrderId(model.getOrderId()); OrderInfo order = orderService.findById(model.getOrderId()); BigDecimal totalMoney = new BigDecimal(orderMoney); BigDecimal money= new BigDecimal("0"); if(model.getType().equals("1")){ money = totalMoney.multiply(new BigDecimal("0.1")); }else{ money = totalMoney.multiply(new BigDecimal("0.05")); } String payOrderId=idUtils.generate("ZF",0); String partnerId=""; String userId = order.getCreateUserId(); if(model.getWithholdingAgent().equals("1")){ //扣合伙人 partnerId = cityPartnerService.queryPidByTownId(model.getOrderId()); CityPartner partner = cityPartnerService.queryPartnerById(Long.parseLong(partnerId)); if(null!=partner){ PartnerAccountModel partnerAccount = cityPartnerService.queryAccountIdByUserId(partner.getUserId()); BigDecimal hbb = new BigDecimal(partnerAccount.getHbb()); BigDecimal fl = hbb.subtract(money); if(fl.compareTo(BigDecimal.ZERO)==-1){ return "合伙人账户余额不足,无法扣款!"; }else{ insertUserAccountLog(order.getCreateUserId(),money,"16",payOrderId,"1"); cityPartnerService.insertPartnerLogByPartner(partnerAccount,"13",DoubleUtil.roundTwo(money.toString()),payOrderId,partner,DoubleUtil.roundTwo(fl.toString())); partnerAccount.setHbb(DoubleUtil.roundTwo(fl.toString())); cityPartnerService.updatePartnerAccount(partnerAccount); } }else{ return "合伙人缺失账户!"; } }else{ //扣骑手 UserAccountModel userAccountModel = cityPartnerService.queryPartnerAccountByUserId(order.getReceiver()); if(null!=userAccountModel){ BigDecimal hbb = new BigDecimal(userAccountModel.getMoney()); BigDecimal fl = hbb.subtract(money); if(fl.compareTo(BigDecimal.ZERO)==-1){ return "骑手账户余额不足,无法扣款!"; }else{ insertUserAccountLog(order.getCreateUserId(),money,"16",payOrderId,"1"); insertUserAccountLog(order.getReceiver(),money,"16",payOrderId,"2"); UserAccountModel recAccount = accountMapper.getAccountByUserId(order.getReceiver()); BigDecimal oldAccMoney = new BigDecimal(recAccount.getMoney()); BigDecimal newAccMoney =oldAccMoney.subtract(money); updateComplanitUserMoney(order.getReceiver(),DoubleUtil.roundTwo(newAccMoney.toString())); } }else{ return "没有该骑手账号!"; } } UserAccountModel accountModel = accountMapper.getAccountByUserId(userId); BigDecimal oldMoney = new BigDecimal(accountModel.getMoney()); BigDecimal newMoney =oldMoney.add(money); updateComplanitUserMoney(userId,DoubleUtil.roundTwo(newMoney.toString())); OrderComplaint orderComplaint = new OrderComplaint(); orderComplaint.setOrderId(order.getOrderId()); List oldList = orderComplaintMapper.select(orderComplaint); if(null!=oldList&&oldList.size()>0){ for (OrderComplaint old:oldList) { old.setAfterSaleFlag(1); orderComplaintMapper.updateByPrimaryKey(old); } }else{ orderComplaint.setAfterSaleFlag(1); orderComplaint.setDelFlag(0); orderComplaint.setCreateTime(DateUtil.now()); orderComplaint.setPartnerId(partnerId); orderComplaint.setComplaintPlan("平台处理"); orderComplaint.setComplaintType(5); orderComplaintMapper.insert(orderComplaint); } return null; } public void updateByPrimaryKeySelective(OrderComplaint orderComplaint) { orderComplaintMapper.updateByPrimaryKeySelective(orderComplaint); } public void updateComplanitUserMoney(String userId,String newMoney){ UserAccountModel uaccount = new UserAccountModel(); uaccount.setUserId(userId); uaccount.setMoney(Double.parseDouble(newMoney)); cityPartnerService.updateAccountPartner(uaccount); } public int queryByOrderNoCount(String orderId) { return orderComplaintMapper.queryByOrderNoCount(orderId); } }