| 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<ComplaintFindResDto> find(ComplaintFindDto complaintFindDto) {  | 
|         List<ComplaintFindResDto> 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<ComplaintFindResDto> detail(String orderId) {  | 
|         List<ComplaintFindResDto> 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<String, Object> queryComplaintApiList(XzxOrderComplaintModel model) {  | 
|         String afterSaleFlag = model.getAfterSaleFlag();  | 
|         String startTime = model.getStartTime();  | 
|         String endTime = model.getEndTime();  | 
|         //int p = (model.getPage() - 1) * model.getLimit();  | 
|         Map<String, Object> 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<String> 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<XzxOrderComplaintModel> list =orderComplaintMapper.queryComplaintApiList(x, startTime, endTime, model.getOrderId(),model.getUserPhone(),model.getCollectorName(),model.getCollectorPhone(),partnerIds);  | 
|         PageInfo<XzxOrderComplaintModel> 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<ComplaintModel> 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<ComplaintModel> 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<ComplaintModel> 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<OrderComplaint> 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);  | 
|     }  | 
|   | 
| }  |