package com.stylefeng.guns.modular.system.service.impl;
|
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
|
import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
|
import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
|
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
|
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsSpreadService;
|
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
|
import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
|
import com.stylefeng.guns.modular.system.dao.DispatchMapper;
|
import com.stylefeng.guns.modular.system.dao.ReassignMapper;
|
import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
|
import com.stylefeng.guns.modular.system.model.*;
|
import com.stylefeng.guns.modular.system.service.*;
|
import com.stylefeng.guns.modular.system.util.*;
|
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
|
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Isolation;
|
import org.springframework.transaction.annotation.Propagation;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
|
@Service
|
@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
public class ReassignServiceImpl extends ServiceImpl<ReassignMapper, Reassign> implements IReassignService {
|
|
@Resource
|
private ReassignMapper reassignMapper;
|
|
@Resource
|
private SensitiveWordsMapper sensitiveWordsMapper;
|
|
@Autowired
|
private IOrderService orderService;
|
|
@Autowired
|
private IDriverService driverService;
|
|
@Autowired
|
private ITransactionDetailsService transactionDetailsService;
|
|
@Autowired
|
private IPaymentRecordService paymentRecordService;
|
|
@Autowired
|
private PayMoneyUtil payMoneyUtil;
|
|
/*@Autowired
|
private ICBCPayUtil icbcPayUtil;*/
|
|
@Autowired
|
private IOrderTaxiService orderTaxiService;
|
|
@Autowired
|
private IIncomeService incomeService;
|
|
@Autowired
|
private ISystemNoticeService systemNoticeService;
|
|
@Autowired
|
private IOrderPrivateCarService orderPrivateCarService;
|
|
@Autowired
|
private IOrderCrossCityService orderCrossCityService;
|
|
@Autowired
|
private JGPushUtil jgPushUtil;
|
|
@Resource
|
private DispatchMapper dispatchMapper;
|
|
@Autowired
|
private IOrderLogisticsService orderLogisticsService;
|
|
@Value("${callbackPath}")
|
private String callbackPath;
|
|
|
|
/**
|
* 提交改派申请
|
* @param uid 申请司机id
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil saveData(Reassign reassign, Integer uid, Integer type) throws Exception {
|
type = null == type ? 2 : type;//现目前微信只支持小程序支付
|
String content = reassign.getRemark();
|
if(ToolUtil.isNotEmpty(content)){
|
List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
|
for(SensitiveWords s : sensitiveWords){
|
content = content.replaceAll(s.getContent(), "***");
|
}
|
}
|
reassign.setRemark(content);
|
ResultUtil resultUtil = ResultUtil.success();
|
Driver driver = driverService.selectById(uid);
|
// TODO: 2020/11/12 司机端不控制重复提交(如果重复提交且未支付,直接将之前的数据删除)
|
// Reassign query = reassignMapper.query(uid, null, null, null, 1);
|
// if(null != query){
|
// return ResultUtil.error("有未完成支付的改派申请");
|
// }
|
Reassign query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 1);
|
if(null != query){
|
// return ResultUtil.error("不能重复提交申请");
|
reassignMapper.deleteById(query.getId());
|
}
|
query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 2);
|
if(null != query){
|
return ResultUtil.error("您提交的申请正在处理中");
|
}
|
|
//获取支付金额
|
Double aDouble = orderService.queryReassignMoney(reassign.getOrderId(), reassign.getOrderType());
|
reassign.setMoney(aDouble);
|
reassign.setOriginalDriverId(uid);
|
reassign.setOriginalCarId(driver.getCarId());
|
reassign.setInsertTime(new Date());
|
this.insert(reassign);
|
|
systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
|
|
//开始支付
|
if(null != reassign.getPayType()){
|
if(reassign.getPayType() == 1){//微信支付
|
reassign.setState(1);
|
ResultUtil resultUtil1 = payMoneyUtil.weixinpay("改派订单",reassign.getId()+"",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/wxReassign","APP");
|
//Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 9, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
|
if(resultUtil1.getCode()==200){
|
paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 1, aDouble, null, 1);//添加预支付数据
|
resultUtil = resultUtil1;
|
}else{
|
resultUtil = ResultUtil.error("获取支付信息失败", "");
|
}
|
}
|
if(reassign.getPayType() == 2){//支付宝
|
reassign.setState(1);
|
ResultUtil resultUtil1 = payMoneyUtil.alipay("改派订单","改派订单",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/aliReassign");
|
//Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 10, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/aliReassign", "", 2, "");
|
if(resultUtil1.getCode()==200){
|
paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 2, aDouble, null, 1);//添加预支付数据
|
resultUtil = resultUtil1;
|
}else{
|
resultUtil = ResultUtil.error("获取支付信息失败", "");
|
}
|
}
|
if(reassign.getPayType() == 3){//余额
|
reassign.setState(2);
|
reassign.setPayTime(new Date());
|
reassignMapper.updateById(reassign);
|
|
Double balance = driver.getBalance();
|
Double laveBusinessMoney = driver.getLaveBusinessMoney();
|
Double laveActivityMoney = driver.getLaveActivityMoney();
|
if(null == balance || balance < aDouble){
|
throw new SystemException("账户余额不足");
|
}
|
if(null != laveBusinessMoney && laveBusinessMoney.compareTo(aDouble) >= 0){
|
driver.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
}else if(null != laveActivityMoney && laveActivityMoney.compareTo(aDouble) >= 0){
|
driver.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
}
|
driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driverService.updateById(driver);
|
//添加交易明细
|
transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, reassign.getOrderType(), reassign.getOrderId());
|
|
|
//修改改派通知状态
|
switch (reassign.getOrderType()){
|
case 1:
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
orderPrivateCar.setOldState(orderPrivateCar.getState());
|
orderPrivateCar.setState(11);
|
orderPrivateCar.setReassignNotice(2);
|
orderPrivateCarService.updateById(orderPrivateCar);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney());
|
break;
|
case 2:
|
OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId());
|
orderTaxi.setOldState(orderTaxi.getState());
|
orderTaxi.setState(11);
|
orderTaxi.setReassignNotice(2);
|
orderTaxiService.updateById(orderTaxi);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney());
|
break;
|
case 4:
|
OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId());
|
orderLogistics.setOldState(orderLogistics.getState());
|
orderLogistics.setState(11);
|
orderLogistics.setReassignNotice(2);
|
orderLogisticsService.updateById(orderLogistics);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderLogistics.getCompanyId(), 4, orderLogistics.getId(), orderLogistics.getType(), reassign.getMoney());
|
break;
|
case 5:
|
OrderLogistics orderLogistics1 = orderLogisticsService.selectById(reassign.getOrderId());
|
orderLogistics1.setOldState(orderLogistics1.getState());
|
orderLogistics1.setState(11);
|
orderLogistics1.setReassignNotice(2);
|
orderLogisticsService.updateById(orderLogistics1);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderLogistics1.getCompanyId(), 4, orderLogistics1.getId(), orderLogistics1.getType(), reassign.getMoney());
|
break;
|
}
|
|
systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
|
//开始推送调度单
|
Map<String, String> map = new HashMap<>();
|
map.put("orderId", reassign.getOrderId().toString());
|
map.put("orderType", reassign.getOrderType().toString());
|
List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
|
for(Dispatch dispatch : dispatches){
|
jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
|
}
|
}
|
}
|
return resultUtil;
|
}
|
|
|
|
|
/**
|
* 提交改派申请(跨城专用)
|
* @param uid 申请司机id
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil saveData_(Reassign reassign, String orderIds, Integer uid, Integer type) throws Exception {
|
type = null == type ? 2 : type;//现目前微信只支持小程序支付
|
String content = reassign.getRemark();
|
if(ToolUtil.isNotEmpty(content)){
|
List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
|
for(SensitiveWords s : sensitiveWords){
|
content = content.replaceAll(s.getContent(), "***");
|
}
|
}
|
reassign.setRemark(content);
|
ResultUtil resultUtil = ResultUtil.success();
|
Driver driver = driverService.selectById(uid);
|
// TODO: 2020/11/12 司机端不控制重复提交(如果重复提交且未支付,直接将之前的数据删除)
|
// Reassign query = reassignMapper.query(uid, null, null, null, 1);
|
// if(null != query){
|
// return ResultUtil.error("有未完成支付的改派申请");
|
// }
|
String[] split = orderIds.split(",");//获取支付金额
|
Double aDouble = orderService.queryReassignMoney(Integer.valueOf(split[0]), 3);
|
Double totalMoney = aDouble * split.length;
|
String ids = "";
|
for(String id : split){
|
Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
|
if(null != query){
|
// return ResultUtil.error("不能重复提交申请");
|
reassignMapper.deleteById(query.getId());
|
}
|
query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 2);
|
if(null != query){
|
return ResultUtil.error("您提交的申请正在处理中");
|
}
|
|
reassign.setMoney(aDouble);
|
reassign.setOrderId(Integer.valueOf(id));
|
reassign.setOrderType(3);
|
reassign.setOriginalDriverId(uid);
|
reassign.setOriginalCarId(driver.getCarId());
|
reassign.setInsertTime(new Date());
|
reassign.setState(1);
|
this.insert(reassign);
|
ids += reassign.getId() + ",";
|
}
|
ids = ids.substring(0, ids.length() - 1);
|
systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
|
|
//开始支付
|
if(null != reassign.getPayType()){
|
if(reassign.getPayType() == 1){//微信支付
|
String[] split1 = ids.split(",");
|
resultUtil = payMoneyUtil.weixinpay("改派订单",ids+"",ids + "_3",totalMoney+"","/base/wxReassign","APP");
|
//Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 9, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
|
if(resultUtil.getCode()==200){
|
for(String id : split1){
|
paymentRecordService.saveData(1, null, null, Integer.valueOf(id), 3, 1, aDouble, null, 1);//添加预支付数据
|
}
|
resultUtil = resultUtil;
|
}else{
|
resultUtil = ResultUtil.error("获取支付信息失败", "");
|
}
|
}
|
if(reassign.getPayType() == 2){//支付宝
|
String[] split1 = ids.split(",");
|
resultUtil = payMoneyUtil.alipay("改派订单","v",ids + "_3",totalMoney+"","/base/aliReassign");
|
//Map<String, String> map = icbcPayUtil.placeAnOrder(ids + "_3", 10, 5, uid.toString(), "改派订单", totalMoney, callbackPath + "/base/aliReassign", "", 2, "");
|
if(resultUtil.getCode()==200){
|
for(String id : split1){
|
paymentRecordService.saveData(1, null, null, Integer.valueOf(id), 3, 2, aDouble, null, 1);//添加预支付数据
|
}
|
resultUtil = resultUtil;
|
}else{
|
resultUtil = ResultUtil.error("获取支付信息失败", "");
|
}
|
}
|
if(reassign.getPayType() == 3){//余额
|
for(String id : split){
|
Reassign query = reassignMapper.query(uid, null, Integer.valueOf(id), 3, 1);
|
query.setState(2);
|
query.setPayTime(new Date());
|
reassignMapper.updateById(query);
|
//添加交易明细
|
transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, 3, Integer.valueOf(id));
|
}
|
Double balance = driver.getBalance();
|
if(null == balance || balance < totalMoney){
|
throw new SystemException("账户余额不足");
|
}
|
driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(totalMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
|
driverService.updateById(driver);
|
|
|
//修改改派通知状态
|
for(String id : split){
|
OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
|
orderCrossCity.setOldState(orderCrossCity.getState());
|
orderCrossCity.setState(11);
|
orderCrossCity.setReassignNotice(2);
|
orderCrossCityService.updateById(orderCrossCity);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderCrossCity.getCompanyId(), 4, orderCrossCity.getId(), 3, reassign.getMoney());
|
}
|
systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
|
//开始推送调度单
|
Map<String, String> map = new HashMap<>();
|
map.put("orderId", reassign.getOrderId().toString());
|
map.put("orderType", reassign.getOrderType().toString());
|
List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
|
for(Dispatch dispatch : dispatches){
|
jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
|
}
|
}
|
}
|
return resultUtil;
|
}
|
|
|
|
|
/**
|
* 获取列表数据
|
* @param uid
|
* @param pageNum
|
* @param size
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<Map<String, Object>> queryList(Integer uid, Integer pageNum, Integer size) throws Exception {
|
pageNum = (pageNum - 1) * size;
|
return reassignMapper.queryList(uid, pageNum, size);
|
}
|
|
|
/**
|
* 改派支付完成后的操作
|
* @param id 改派单id
|
* @param order_id 工行支付订单
|
* @param type 1=微信,2=支付宝
|
* @throws Exception
|
*/
|
@Override
|
public void payReassign(String id, String order_id, Integer type) throws Exception {
|
String[] s = id.split("_");
|
if(Integer.valueOf(s[1]) == 3){//跨城订单
|
String[] split = s[0].split(",");
|
List<Reassign> reassigns = this.selectBatchIds(Arrays.asList(split));
|
Driver driver = driverService.selectById(reassigns.get(0).getOriginalDriverId());
|
for(String key : split){
|
PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(key), 3, type, 1);
|
if(null != query){
|
//添加交易明细
|
transactionDetailsService.saveData(reassigns.get(0).getOriginalDriverId(), "司机改派支付", reassigns.get(0).getMoney(), 2, 1, 2, 3, Integer.valueOf(key));
|
for(Reassign reassign : reassigns){
|
reassign.setState(2);
|
reassign.setPayOrder(order_id);
|
reassign.setPayTime(new Date());
|
this.updateById(reassign);
|
//开始推送调度单
|
Map<String, String> map = new HashMap<>();
|
map.put("orderId", reassign.getOrderId().toString());
|
map.put("orderType", reassign.getOrderType().toString());
|
List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
|
for(Dispatch dispatch : dispatches){
|
jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
|
}
|
}
|
query.setState(2);
|
query.setCode(order_id);
|
paymentRecordService.updateById(query);
|
|
//修改改派通知状态
|
for(Reassign reassign : reassigns){
|
OrderCrossCity orderCrossCity1 = orderCrossCityService.selectById(reassign.getOrderId());
|
orderCrossCity1.setOldState(orderCrossCity1.getState());
|
orderCrossCity1.setState(11);
|
orderCrossCity1.setReassignNotice(2);
|
orderCrossCityService.updateById(orderCrossCity1);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderCrossCity1.getCompanyId(), 4, orderCrossCity1.getId(), 3, reassign.getMoney());
|
}
|
systemNoticeService.addSystemNotice(2, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功支付改派申请费用!", reassigns.get(0).getOriginalDriverId());
|
|
}else{
|
System.err.println("预支付数据异常(orderId = " + id + ")");
|
}
|
}
|
|
|
}else{//其他订单
|
Reassign reassign = this.selectById(s[0]);
|
Driver driver = driverService.selectById(reassign.getOriginalDriverId());
|
PaymentRecord query = paymentRecordService.query(1, null, null, reassign.getOrderId(), reassign.getOrderType(), type, 1);
|
if(null != query){
|
//添加交易明细
|
transactionDetailsService.saveData(reassign.getOriginalDriverId(), "司机改派支付", reassign.getMoney(), 2, 1, 2, reassign.getOrderType(), reassign.getOrderId());
|
reassign.setState(2);
|
reassign.setPayOrder(order_id);
|
reassign.setPayTime(new Date());
|
this.updateById(reassign);
|
|
query.setState(2);
|
query.setCode(order_id);
|
paymentRecordService.updateById(query);
|
|
//修改改派通知状态
|
switch (reassign.getOrderType()){
|
case 1:
|
OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
|
orderPrivateCar.setOldState(orderPrivateCar.getState());
|
orderPrivateCar.setState(11);
|
orderPrivateCar.setReassignNotice(2);
|
orderPrivateCarService.updateById(orderPrivateCar);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney());
|
break;
|
case 2:
|
OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId());
|
orderTaxi.setOldState(orderTaxi.getState());
|
orderTaxi.setState(11);
|
orderTaxi.setReassignNotice(2);
|
orderTaxiService.updateById(orderTaxi);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney());
|
break;
|
case 4:
|
OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId());
|
orderLogistics.setOldState(orderLogistics.getState());
|
orderLogistics.setState(11);
|
orderLogistics.setReassignNotice(2);
|
orderLogisticsService.updateById(orderLogistics);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderLogistics.getCompanyId(), 4, orderLogistics.getId(), 4, reassign.getMoney());
|
break;
|
case 5:
|
OrderLogistics orderLogistics1 = orderLogisticsService.selectById(reassign.getOrderId());
|
orderLogistics1.setOldState(orderLogistics1.getState());
|
orderLogistics1.setState(11);
|
orderLogistics1.setReassignNotice(2);
|
orderLogisticsService.updateById(orderLogistics1);
|
|
//添加已收入明细
|
incomeService.saveData(1, orderLogistics1.getCompanyId(), 4, orderLogistics1.getId(), 5, reassign.getMoney());
|
break;
|
}
|
systemNoticeService.addSystemNotice(2, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功支付改派申请费用!", reassign.getOriginalDriverId());
|
//开始推送调度单
|
Map<String, String> map = new HashMap<>();
|
map.put("orderId", reassign.getOrderId().toString());
|
map.put("orderType", reassign.getOrderType().toString());
|
List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
|
for(Dispatch dispatch : dispatches){
|
jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
|
}
|
}else{
|
System.err.println("预支付数据异常(orderId = " + id + ")");
|
}
|
}
|
|
|
}
|
}
|