liujie
2 天以前 f73e9c5419c82b9ff685b8e67d839fd942100073
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderController.java
@@ -252,7 +252,7 @@
            HashMap<String, Object> map1 = new HashMap<>();
            //TODO hzt
            map1.put("recv_no", "SR2024021195402");
            map1.put("recv_no", "SR2023081514001");
            // 手续费
            BigDecimal bigDecimal = allMoney.multiply(new BigDecimal("0.038")).setScale(2, RoundingMode.HALF_UP);
            payMoney = payMoney.subtract(bigDecimal);
@@ -301,6 +301,7 @@
            org.apache.http.HttpResponse response1 = post(LakalaConfig.getServerUrl() + "sit/api/v3/sacs/separate", jsonString, authorization1);
            String responseStr = IOUtils.toString(response1.getEntity().getContent(), ENCODING);
            System.err.println("分佣!!!!"+responseStr);
            JSONObject jsonObject = JSONObject.parseObject(responseStr);
            if ("成功".equals(jsonObject.getString("msg"))) {
@@ -323,6 +324,8 @@
    @RequestMapping("/messageSeparateHandle")
    @ApiOperation(value = "拉卡拉分账信息回调接口")
    public Object messageSeparateHandle(HttpServletRequest request) throws Exception {
        System.err.println("拉卡拉分账信息回调接口---------进入");
        String body = this.getBody(request);
        // 先处理支付完成  修改状态 后处理分账  后走分账回调
        JSONObject jsonObject1 = JSONObject.parseObject(body);
@@ -333,8 +336,9 @@
        JSONArray jsonArray = JSONArray.parseArray(detail_datas.toString());
        if("SEPARATE".equals(cmd_type.toString())){
            TErpProcurement erpProcurement = erpProcurementService.getOne(new LambdaQueryWrapper<TErpProcurement>().eq(TErpProcurement::getOutSeparateNo, o.toString()));
            if ( erpProcurement!=null && "SUCCESS".equals(status) && erpProcurement.getRefundStatus()!=1) {
            if ( erpProcurement!=null && "SUCCESS".equals(status) && erpProcurement.getRefundStatus()==1) {
                erpProcurement.setRefundStatus(1);
                erpProcurement.setIsPlatformCommission(1);
                erpProcurementService.updateById(erpProcurement);
                // 修改分账状态
                List<TErpProcurementGoods> list1 = erpProcurementGoodsService.list(new LambdaQueryWrapper<TErpProcurementGoods>().eq(TErpProcurementGoods::getProcurementId, erpProcurement.getId()));
@@ -346,6 +350,7 @@
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("code", "SUCCESS");
                jsonObject.put("message", "执行成功");
                System.err.println("拉卡拉分账信息回调接口---------完成");
                return jsonObject;
            }
        }else if("FALLBACK".equals(cmd_type.toString())){
@@ -371,21 +376,27 @@
                String apiPath = "sit/api/v3/rfd/refund_front/refund";
                String body1 = "{\n" +
                        "\t\"req_time\": \"" + time + "\",\n" +
                        "\t\"version\": \"3.0\",\n" +
                        "\t\"req_data\": {\n" +
                        "\t\t\"merchant_no\": \""+erpProcurement.getMerchantNo()+"\",\n" +
                        "\t\t\"term_no\": \""+erpProcurement.getTermNo()+"\",\n" +
                        "\t\t\"refund_amount\": " + refund_amount + ",\n" +
                        "\t\t\"out_trade_no\": \"" + outTradeNo + "\",\n" +
                        "\t\t\"refund_amount\": \"" + refund_amount + "\",\n" +
                        "\t\t\"refund_reason\": \"退款\",\n" +
                        "\t\t\"notify_url\": \"" + "http://221.182.45.100:8089/t-sys-order/messageRefundHandle" + "\",\n" +
                        "\t\t\"origin_log_no\": \"" + erpProcurement.getPayTransactionId() + "\",\n" +
                        "\t\t\"origin_out_trade_no\": \"" + erpProcurement.getPayNumber() + "\",\n" +
                        "\t\t\"refund_acc_mode\": \"00\",\n" +
                        "\t\t\"refund_amt_sts\": \"00\",\n" +
                        "\t\t\"location_info\": {\n" +
                        "\t\t\t\"request_ip\": \"" + ipAddr + "\"\n" +
                        "\t\t\t\"request_ip\": \"" + ipAddr + "\",\n" +
                        "\t\t\t\"location\": \"\"\n" +
                        "\t\t}\n" +
                        "\t\t},\n" +
                        "\t\"version\": \"3.0\",\n" +
                        "\t\"req_time\": \"" + time + "\"\n" +
                        "\t}\n" +
                        "}";
                String authorization = getAuthorization(body1);
                org.apache.http.HttpResponse response = post(LakalaConfig.getServerUrl() + apiPath, body1, authorization);
                if (response.getStatusLine().getStatusCode() != 200) {
                    return R.fail(500, "请求失败,statusCode  " + response.getStatusLine()
@@ -399,7 +410,7 @@
                erpProcurement.setRefundNo(outTradeNo);
                erpProcurementService.updateById(erpProcurement);
                System.err.println("拉卡拉分账信息回调接口---------完成"+responseStr);
                // 响应success
@@ -415,6 +426,7 @@
    @RequestMapping("/messageRefundHandle")
    @ApiOperation(value = "拉卡拉退款信息回调接口")
    public Object messageRefundHandle(HttpServletRequest request) throws Exception {
        System.err.println("拉卡拉退款信息回调接口---------进入");
        String body = this.getBody(request);
        // 先处理支付完成  修改状态 后处理分账  后走分账回调
        JSONObject jsonObject1 = JSONObject.parseObject(body);
@@ -441,17 +453,76 @@
    @ApiOperation(value = "退款")
    @PostMapping(value = "/refundOrder")
    @SneakyThrows
    public R<?> refundOrder(@RequestParam String id, HttpServletRequest request) {
    public synchronized R<?> refundOrder(@RequestParam String id, HttpServletRequest request) {
        SysUser user = tokenService.getLoginUser().getUser();
        try {
            // 先退分账  在退订单
            // 查出采购单 算出价格  下单  算出应该分佣金额 应该分给谁
            TErpProcurement erpProcurement = erpProcurementService.getById(id);
            // 还未分账成功不能退款
            if(erpProcurement.getStatus()==2){
                erpProcurement.setStatus(6);
                erpProcurementService.updateById(erpProcurement);
                return R.ok("操作成功");
            }
        if(erpProcurement.getStatus()==null || erpProcurement.getStatus()!=1){
            return R.fail("订单处理中,请稍后操作");
        }
            // 判断回退没有回退了直接退款
            long count = erpProcurementGoodsService.count(new LambdaQueryWrapper<TErpProcurementGoods>().eq(TErpProcurementGoods::getProcurementId, id).eq(TErpProcurementGoods::getStatus, 1));
            if(count==0){
                // 发起退款
                String time = DateUtils.dateTimeNow();
                String ipAddr = IpUtils.getIpAddr(request);
                // SYMBOLS 随机取4位数
                String str = "";
                for (int i = 0; i < 6; i++) {
                    str += SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
                }
                String outTradeNo = time + str;
                String refund_amount = erpProcurement.getPayMoney().multiply(BigDecimal.valueOf(100)).intValue() + "";
                String apiPath = "sit/api/v3/rfd/refund_front/refund";
                String body1 = "{\n" +
                        "\t\"req_data\": {\n" +
                        "\t\t\"merchant_no\": \""+erpProcurement.getMerchantNo()+"\",\n" +
                        "\t\t\"term_no\": \""+erpProcurement.getTermNo()+"\",\n" +
                        "\t\t\"out_trade_no\": \"" + outTradeNo + "\",\n" +
                        "\t\t\"refund_amount\": \"" + refund_amount + "\",\n" +
                        "\t\t\"refund_reason\": \"退款\",\n" +
                        "\t\t\"notify_url\": \"" + "http://221.182.45.100:8089/t-sys-order/messageRefundHandle" + "\",\n" +
                        "\t\t\"origin_out_trade_no\": \"" + erpProcurement.getPayNumber() + "\",\n" +
                        "\t\t\"refund_acc_mode\": \"00\",\n" +
                        "\t\t\"refund_amt_sts\": \"00\",\n" +
                        "\t\t\"location_info\": {\n" +
                        "\t\t\t\"request_ip\": \"" + ipAddr + "\",\n" +
                        "\t\t\t\"location\": \"\"\n" +
                        "\t\t}\n" +
                        "\t\t},\n" +
                        "\t\"version\": \"3.0\",\n" +
                        "\t\"req_time\": \"" + time + "\"\n" +
                        "\t}\n" +
                        "}";
                String authorization = getAuthorization(body1);
                org.apache.http.HttpResponse response = post(LakalaConfig.getServerUrl() + apiPath, body1, authorization);
                if (response.getStatusLine().getStatusCode() != 200) {
                    return R.fail(500, "请求失败,statusCode  " + response.getStatusLine()
                            + IOUtils.toString(response.getEntity().getContent(), ENCODING));
                }
                String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING);
                JSONObject jsonObject = JSONObject.parseObject(responseStr);
                JSONObject jsonObject2 = jsonObject.getJSONObject("resp_data");
                String code = jsonObject2.getString("log_no");
                erpProcurement.setRefundLogNo(code);
                erpProcurement.setRefundNo(outTradeNo);
                erpProcurementService.updateById(erpProcurement);
                return R.ok("操作成功");
            }
                // 还未分账成功不能退款
            if(erpProcurement.getIsPlatformCommission()==2){
                return R.fail("订单处理中,请稍后操作");
            }
            String time = DateUtils.dateTimeNow();
@@ -490,7 +561,7 @@
//            }
            HashMap<String, Object> map1 = new HashMap<>();
            // TODO hzt
            map1.put("recv_no", "SR2024021195402");
            map1.put("recv_no", "SR2023081514001");
            map1.put("amt", erpProcurement.getMoney().multiply(BigDecimal.valueOf(100)).intValue() + "");
            objects.add(map1);
            map.put("total_amt",erpProcurement.getMoney().multiply(BigDecimal.valueOf(100)).intValue() + "");
@@ -505,6 +576,7 @@
            String responseStr = IOUtils.toString(response1.getEntity().getContent(), ENCODING);
//            post.body(jsonString);
//            HttpResponse response = post.execute();
//            String responseStr = response.body();