liujie
2023-08-17 952bceec1ab0701a87af615b0bf691047f04b203
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -7,6 +7,8 @@
import com.supersavedriving.user.core.util.ToolUtil;
import com.supersavedriving.user.modular.system.model.*;
import com.supersavedriving.user.modular.system.service.*;
import com.supersavedriving.user.modular.system.util.GaoDe.MapUtil;
import com.supersavedriving.user.modular.system.util.GaoDe.model.District;
import com.supersavedriving.user.modular.system.util.MallBook.model.InterfaceResponse;
import com.supersavedriving.user.modular.system.util.MallBook.model.Receive;
import com.supersavedriving.user.modular.system.util.MallBook.model.ReceiveUser;
@@ -18,12 +20,16 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -35,6 +41,8 @@
@RestController
@RequestMapping("")
public class OrderController {
    Logger logger = LoggerFactory.getLogger(OrderController.class);
    @Autowired
    private IOrderService orderService;
@@ -55,7 +63,67 @@
    private IDriverService driverService;
    @Autowired
    private IBranchOfficeService branchOfficeService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @ResponseBody
    @PostMapping("/api/order/queryServerPrice")
//    @ServiceLog(name = "获取正在进行中的订单id", url = "/api/order/queryServerOrder")
    @ApiOperation(value = "根据定位获取恶劣天气+节假日信息", tags = {"用户端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(value = "纬度", name = "lat", required = true, dataType = "String"),
            @ApiImplicitParam(value = "经度", name = "lon", required = true, dataType = "String"),
    })
    public ResponseWarpper<Integer> queryServerPrice(String lat,String lon){
        try {
            Integer i =0; // 0为不能接单 1为恶劣天气  2为节假日 3为恶劣+节假日
            District geocode = MapUtil.geocode(lon, lat);
            String districtCode = geocode.getDistrictCode();
            List<BranchOffice> districtCode1 = branchOfficeService.selectList(new EntityWrapper<BranchOffice>().eq("districtCode", districtCode).eq("status",1));
            if(districtCode1.size()>0){
                BranchOffice branchOffice = districtCode1.get(0);
                Integer id = branchOffice.getId();
                SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8).eq("companyId", id));
                SystemConfig systemConfig9 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 9).eq("companyId", id));
                if(systemConfig!=null && systemConfig9!=null){
                    String content = systemConfig.getContent();
                    JSONObject jsonObject = JSONObject.parseObject(content);
                    String num1 = jsonObject.get("num1").toString();
                    String content9 = systemConfig9.getContent();
                    JSONObject jsonObject9 = JSONObject.parseObject(content9);
                    String num9 = jsonObject9.get("num1").toString();
                    if("1".equals(num1)){
                        i=1;
                    }
                    if("1".equals(num9)){
                        i=2;
                    }
                    if("1".equals(num1)&&"1".equals(num9)){
                        i=3;
                    }
                }
            }
            return ResponseWarpper.success(i);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @Autowired
    private IRechargeRecordService rechargeRecordService;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    @Autowired
    private IDivisionRecordService divisionRecordService;
@@ -84,6 +152,7 @@
            return new ResponseWarpper(500, e.getMessage());
        }
    }
@@ -244,7 +313,7 @@
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<OrderPriceWarpper> queryOrderPrice(Long orderId){
    public ResponseWarpper<OrderPriceInfoWarpper> queryOrderPrice(Long orderId){
        if(null == orderId){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
@@ -253,7 +322,7 @@
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            OrderPriceWarpper orderPriceWarpper = orderService.queryOrderPrice(uid, orderId);
            OrderPriceInfoWarpper orderPriceWarpper = orderService.queryOrderPrice(uid, orderId);
            return ResponseWarpper.success(orderPriceWarpper);
        }catch (Exception e){
            e.printStackTrace();
@@ -346,39 +415,41 @@
    /**
     * 订单微信支付回调处理
     * @param request
     * @param response
     */
    @ResponseBody
    @PostMapping("/base/order/orderPayCallback")
    public void orderPayCallback(HttpServletRequest request, HttpServletResponse response){
    public void orderPayCallback(@RequestBody InterfaceResponse interfaceResponse, HttpServletResponse response){
        try {
            String code = request.getParameter("code");
            String version = request.getParameter("version");
            String msg = request.getParameter("msg");
            String date = request.getParameter("date");
            String result = request.getParameter("result");
            String sign = request.getParameter("sign");
            InterfaceResponse interfaceResponse = new InterfaceResponse();
            interfaceResponse.setCode(code);
            interfaceResponse.setVersion(version);
            interfaceResponse.setMsg(msg);
            interfaceResponse.setDate(date);
            interfaceResponse.setResult(result);
            interfaceResponse.setSign(sign);
            // 验签
            boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign());
            if (verify) {//验签成功业务处理逻辑
                JSONObject jsonObject = JSON.parseObject(result);
                String merOrderId = jsonObject.getString("merOrderId");
                String orderId = jsonObject.getString("parameter1");
                ResultUtil resultUtil = orderService.orderPayCallback(orderId, merOrderId);
                if(resultUtil.getCode() == 10000){
                    response.setStatus(200);
                    PrintWriter out = response.getWriter();
                    out.print("OK");
                    out.flush();
                    out.close();
                if("0000".equals(interfaceResponse.getCode())){
                    JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
                    Integer status = jsonObject.getInteger("status");
                    String orderId = jsonObject.getString("parameter1");
                    String parameter2 = jsonObject.getString("parameter2");
                    if(2 == status){
                        Order order = orderService.selectById(orderId);
                        AccountChangeDetail accountChangeDetail = accountChangeDetailService.selectById(parameter2);
                        Double m = new BigDecimal(accountChangeDetail.getOldData()).subtract(new BigDecimal(accountChangeDetail.getNewData())).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                        AppUser appUser1 = appUserService.selectById(order.getUserId());
                        appUser1.setAccountBalance(new BigDecimal(appUser1.getAccountBalance()).add(new BigDecimal(m)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
                        appUserService.updateById(appUser1);
                        accountChangeDetailService.deleteById(accountChangeDetail.getId());
                        System.err.println("支付失败");
                    }
                    if(1 == status){
                        String merOrderId = jsonObject.getString("merOrderId");
                        ResultUtil resultUtil = orderService.orderPayCallback(orderId, merOrderId);
                        if(resultUtil.getCode() == 10000){
                            response.setStatus(200);
                            PrintWriter out = response.getWriter();
                            out.print("OK");
                            out.flush();
                            out.close();
                        }
                    }
                }
            } else {//验签失败业务处理逻辑
                System.err.println("支付回调验签失败");
@@ -402,7 +473,7 @@
                JSONObject jsonObject = JSON.parseObject(execute.getResult());
                Integer status = jsonObject.getInteger("status");//0:待处理;1:成功;2:失败
                if(2 == status){
                    System.err.println("转账失败");
                    logger.warn("转账失败");
                    return;
                }
                String parameter1 = jsonObject.getString("parameter1");
@@ -415,7 +486,7 @@
                out.flush();
                out.close();
            }else{
                System.err.println("转账失败:" + execute.getMsg());
                logger.warn("转账失败:" + execute.getMsg());
                return;
            }
        }catch (Exception e){
@@ -439,44 +510,44 @@
                    JSONObject jsonObject = JSON.parseObject(execute.getResult());
                    Integer status = jsonObject.getInteger("status");
                    if(2 == status){
                        System.err.println("异步分账回调异常");
                        logger.warn("异步分账回调异常");
                        return;
                    }
                    String merOrderId = jsonObject.getString("merOrderId");
                    String orderId = jsonObject.getString("parameter1");
                    String divisionRecordId = jsonObject.getString("parameter1");
                    DivisionRecord divisionRecord = divisionRecordService.selectById(divisionRecordId);
                    if(divisionRecord.getState() == 2){
                    }
                    //确认收货
                    new Timer().schedule(new TimerTask() {
                        @Override
                        public void run() {
                            Order order = orderService.selectById(orderId);
                            List<Revenue> revenues = revenueService.selectList(new EntityWrapper<Revenue>().eq("userType", 2).eq("orderId", order.getId()));
                            Receive receive = new Receive();//确认收货
                            receive.setOriginalMerOrderId(merOrderId);
                            receive.setRcvAmount(String.valueOf(order.getPayMoney() * 100));
                            receive.setRcvAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
                            List<ReceiveUser> splitList = new ArrayList<>();
                            for (Revenue revenue : revenues) {
                                Driver driver = driverService.selectById(revenue.getUserId());
                                ReceiveUser receiveUser = new ReceiveUser();
                                receiveUser.setSplitUserId(driver.getMerchantNumber());
                                receiveUser.setRcvSplitAmount(revenue.getAmount().toString());
                                splitList.add(receiveUser);
                            }
                            ReceiveUser receiveUser = new ReceiveUser();
                            receiveUser.setSplitUserId(divisionRecord.getMerchantNumber());
                            receiveUser.setRcvSplitAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
                            splitList.add(receiveUser);
                            receive.setSplitList(splitList);
                            TrhRequest<Receive> request1 = new TrhRequest();
                            InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE);
                            if(!"0000".equals(execute.getCode())){
                                System.err.println("确认收货" + execute.getMsg());
                                logger.warn("确认收货" + execute.getMsg());
                            }
                            JSONObject jsonObject = JSON.parseObject(execute.getResult());
                            String status = jsonObject.getString("status");
                            if("2".equals(status)){
                                System.err.println("确认收货失败");
                                logger.warn("确认收货失败");
                            }
                            if("0".equals(status)){
                                System.err.println("确认收货处理中");
                                logger.warn("确认收货处理中");
                            }
                        }
                    }, 15000);
                    }, 60000);
                    response.setStatus(200);
                    PrintWriter out = response.getWriter();
                    out.print("OK");