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);
|
}
|
|
}
|