xuhy
22 小时以前 37ba49430c8c6896020d8d1e8552022d786f31a0
ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TReassignController.java
@@ -11,9 +11,7 @@
import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.HttpRequestUtil;
import com.stylefeng.guns.modular.system.util.PushURL;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.*;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -26,6 +24,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -356,8 +355,201 @@
    @Autowired
    private ITPubTransactionDetailsService itPubTransactionDetailsService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    /**
     * 操作跨城改派管理
     * optType 1=拒绝 2=取消
     */
    @RequestMapping(value = "/optCross")
    @ResponseBody
    public Object optCross(@RequestParam Integer tReassignId,@RequestParam Integer optType) {
        try {
            TReassign tReassign = tReassignService.selectById(tReassignId);
            if(tReassign.getState() == 3){//已改派
                return "不能重复操作";
            }
            if(tReassign.getState() == 4){//已改派
                return "不能重复操作";
            }
            if(tReassign.getState() == 5){//已改派
                return "不能重复操作";
            }
            Integer state = tReassign.getState();
            ShiroUser user = ShiroKit.getUser();
            if (1 == optType){
                tReassign.setState(5);
                tReassign.setReviewer(user.getId());
                tReassign.setReviewerType(2);
                tReassignService.updateById(tReassign);
                TOrderCrossCity orderCrossCity = itOrderCrossCityService.selectById(tReassign.getOrderId());
                orderCrossCity.setState(orderCrossCity.getOldState());
                itOrderCrossCityService.updateById(orderCrossCity);
            }else if (2 == optType){
                tReassign.setState(4);
                tReassign.setReviewer(user.getId());
                tReassign.setReviewerType(2);
                tReassignService.updateById(tReassign);
                TOrderCrossCity orderCrossCity = itOrderCrossCityService.selectById(tReassign.getOrderId());
                if(orderCrossCity.getState() > 5 && orderCrossCity.getState() != 11){
                    return ResultUtil.error("订单状态不在可取消范围内");
                }
                orderCrossCity.setState(10);
                itOrderCrossCityService.updateById(orderCrossCity);
                //修改司机信息
                LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
                lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
                        lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
                String seat = "";
                String[] split = orderCrossCity.getSeatNumber().split(",");
                for(String s : split){
                    seat += s + ",";
                }
                seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
                //总和大于总座位数的情况
                if(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
                    seat = "";
                    for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
                        seat += i + ",";
                    }
                    seat = seat.substring(0, seat.length() - 1);
                }
                lineShiftDriver.setLaveSeatNumber(seat);
                lineShiftDriverMapper.updateById(lineShiftDriver);
                if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
                    TDriver driver = itDriverService.selectById(tReassign.getOriginalDriverId());
                    driver.setState(2);
                    itDriverService.updateById(driver);
                }
                //调用推送
                Map<String,String> map = new HashMap<>();
                map.put("id", orderCrossCity.getId().toString());
                map.put("orderType", "3");
                String result = HttpRequestUtil.postRequest(PushURL.cancel_order_url, map);
                System.out.println("跨城取消:【orderId="+orderCrossCity.getId().toString()+"】,调用接口:"+result);
                //已支付的情况下进行退款操作
                if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){
                    if(orderCrossCity.getPayType() == 3){//余额支付
                        TUser tUser = userService.selectById(orderCrossCity.getUserId());
                        tUser.setBalance(tUser.getBalance().add(orderCrossCity.getPayMoney()));
                        userService.updateById(tUser);
                        //添加交易明细
                        transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城改派取消退款", orderCrossCity.getPayMoney().doubleValue(), 1, 1, 1, 3, tReassign.getOrderId());
                    }else{
                        PaymentRecord query = paymentRecordService.query(1, null, null, tReassign.getOrderId(), 3, null, 2).get(0);
                        if(null == query){
                            return ResultUtil.error("订单还未进行支付");
                        }
                        if(query.getPayType() == 1){//微信
                            Map<String, String> map1 = payMoneyUtil.wxRefund(query.getCode(), orderCrossCity.getId() + "_3_" + UUIDUtil.getRandomCode(3), query.getAmount().toString(), query.getAmount().toString(), "/user/base/cancleOrderWXPay");
                            if(!"SUCCESS".equals(map1.get("return_code"))){
                                return ResultUtil.error(map1.get("return_msg"));
                            }
                            //添加交易明细
                            transactionDetailsService.saveData(query.getUserId(), "跨城改派取消退款", query.getAmount(), 1, 1, query.getType(), 3, orderCrossCity.getId());
                        }else{//支付宝
//                            Map<String, String> map1 = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString());
//                            if(!"10000".equals(map1.get("code"))){
//                                return ResultUtil.error(map1.get("msg"));
//                            }
//                            //添加交易明细
//                            transactionDetailsService.saveData(query.getUserId(), "跨城改派取消退款", query.getAmount(), 1, 1, query.getType(), 3, orderCrossCity.getId());
                        }
                    }
                    //添加负的收入明细
                    List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", tReassign.getOrderId()).eq("orderType", 3));
                    for(Income income : incomes){
                        if(income.getUserType() == 2){//处理司机的收入
                            TDriver driver = itDriverService.selectById(income.getObjectId());
                            driver.setBalance(driver.getBalance().subtract(new BigDecimal(income.getMoney())));
                            driver.setLaveBusinessMoney(new BigDecimal(driver.getLaveBusinessMoney()).subtract(new BigDecimal(income.getMoney())).doubleValue());
                            itDriverService.updateById(driver);
                        }
                        Income income1 = new Income();
                        BeanUtils.copyProperties(income, income1);
                        income1.setMoney(income.getMoney() * -1);
                        income1.setId(null);
                        income1.setInsertTime(new Date());
                        incomeService.insert(income1);
                    }
                }
                //添加取消记录
                OrderCancel orderCancel = new OrderCancel();
                orderCancel.setOrderId(tReassign.getOrderId());
                orderCancel.setOrderType(tReassign.getOrderType());
                orderCancel.setReason("调度端取消订单");
                orderCancel.setRemark("调度“" + user.getName() + "-" + user.getId() + "”执行取消操作");
                orderCancel.setState(2);
                orderCancel.setInsertTime(new Date());
                orderCancel.setUserType(3);
                orderCancel.setUserId(user.getId());
                orderCancelMapper.insert(orderCancel);
            }
            if(state == 2){//退款操作
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
                String out_refund_no = sdf.format(new Date()) + "_" + tReassign.getId();
                Double money = tReassign.getMoney();
                if(tReassign.getPayType() == 1){//微信
                    Map<String, String> map = payMoneyUtil.wxRefund(tReassign.getPayOrder(), out_refund_no, money.toString(), money.toString(), "/dispatch/base/order/reassignRefundCallback");
                    if(null == map || !"SUCCESS".equals(map.get("return_code"))){
                        System.err.println(map.get("return_msg"));
                        return ResultUtil.error(map.get("return_msg"));
                    }
                    tReassign.setReviewer(ShiroKit.getUser().getId());
                    tReassign.setReviewerType(2);
                    tReassignService.updateById(tReassign);
                    //添加交易明细
                    transactionDetailsService.saveData(tReassign.getOriginalDriverId(), "跨城改派拒绝退款", money, 1, 1, 2, 3, tReassign.getOrderId());
                }
                if(tReassign.getPayType() == 2){//支付宝
//                    Map<String, String> map = payMoneyUtil.aliRefund(tReassign.getPayOrder(), money.toString());
//                    if(null != map && "10000".equals(map.get("code"))){
//                        tReassign.setReviewer(ShiroKit.getUser().getId());
//                        tReassign.setReviewerType(2);
//                        tReassignService.updateById(tReassign);
//                        //添加交易明细
//                        transactionDetailsService.saveData(tReassign.getOriginalDriverId(), "跨城改派拒绝退款", money, 1, 1, 2, 3, tReassign.getOrderId());
//                    }
//                    if(null == map || !"10000".equals(map.get("code"))){
//                        System.err.println(map.get("msg"));
//                        return ResultUtil.error(map.get("msg"));
//                    }
                }
                if(tReassign.getPayType() == 3){//余额
                    TDriver tDriver = itDriverService.selectById(tReassign.getOriginalDriverId());
                    tDriver.setBalance(tDriver.getBalance().add(new BigDecimal(money)));
                    itDriverService.updateById(tDriver);
                }
            }
            //增加交易明细
            TPubTransactionDetails details = new TPubTransactionDetails();
            details.setUserId(tReassign.getOriginalDriverId());
            details.setInsertTime(new Date());
            details.setRemark("【跨城改派】:改派失败或订单取消");
            details.setMoney(new BigDecimal(tReassign.getMoney()));
            details.setState(1);
            details.setType(1);
            details.setUserType(2);
            details.setOrderType(3);
            details.setOrderId(tReassign.getOrderId());
            itPubTransactionDetailsService.insert(details);
        }catch (Exception e){
            e.printStackTrace();
        }
        return SUCCESS_TIP;
    }