package com.szwl.controller; import cn.com.crbank.ommo.bean.ResultMessage; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.szwl.feign.bean.PayFeign; import com.szwl.model.bo.JoinpayConstant; import com.szwl.model.bo.R; import com.szwl.model.bo.ResponseModel; import com.szwl.model.entity.*; import com.szwl.model.utils.Constant; import com.szwl.service.*; import com.szwl.service.es.EsTOrderService; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.List; /** *

* 前端控制器 *

* * @author wuhs * @since 2022-04-23 */ @RestController @RequestMapping("/tOrder") public class TOrderController { @Autowired TAdminService tAdminService; @Autowired TEquipmentService tEquipmentService; @Autowired TOrderService orderService; @Autowired PayFeign payFeign; @Autowired TShandeMchService tShandeMchService; @Autowired EsTOrderService esTOrderService; @Autowired TPriceService priceService; @Autowired TJoinpayMchService joinpayMchService; /** * 退款 * @param * @return */ @PostMapping("/refund") public ResponseEntity refund(@RequestBody TOrder torder) { TOrder order = R.getDataIfSuccess(payFeign.getOrder(String.valueOf(torder.getId()))); TEquipment equipment = tEquipmentService.getById(order.getEquipmentId()); Long equipmentId = equipment.getId(); if (order.getProductName().equals("280充值")) { return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(false) .setData("订单不退款") .setMessage("订单不退款")); } if (order.getStatus().equals("0")) { return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(false) .setData("订单非支付状态") .setMessage("订单非支付状态")); } // TAdmin admin = tAdminService.selectEntityById(order.getAdminId()); // if(admin.getIsRefund()!=null&&admin.getIsRefund().equals("0")){ //// return JsonMessage.error("机器设定不退款"); // } String notifyUrl = JoinpayConstant.Notify_Refund_Url; JSONArray altInfoArray = JSONArray.parseArray(order.getAltInfo()); JSONArray altRefInfo = new JSONArray(); BigDecimal price = BigDecimal.ZERO; for (int i = 0; i < altInfoArray.size(); i++) { JSONObject altInfoObject = altInfoArray.getJSONObject(i); JSONObject refInfo = new JSONObject(); refInfo.put("altMchNo", altInfoObject.getString("altMchNo")); refInfo.put("altRefAmount", altInfoObject.getString("altAmount")); price = price.add(altInfoObject.getBigDecimal("altAmount")); if (!altInfoObject.getBigDecimal("altAmount").toString().equals("0.00")) { altRefInfo.add(refInfo); } } // 特殊处理下:添加多一个平台方分销的金额 // 平台获得的收益 BigDecimal adminPrice = new BigDecimal(order.getPrice().toString()).subtract(price); JSONObject refInfo = new JSONObject(); refInfo.put("altMchNo", JoinpayConstant.mch_no); refInfo.put("altRefAmount", adminPrice.toString()); price = price.add(adminPrice); if (!adminPrice.toString().toString().equals("0.00")) { altRefInfo.add(refInfo); } String text = ""; //需要知道订单是哪一个平台的,不能以账号的为标准 0或null为汇聚,1为杉德支付 String payPlatform = order.getPayPlatform(); if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) { try { String refund = tShandeMchService.refund(order.getId(), orderService.initRefundSn(equipmentId).toString(), price, "", altRefInfo.toString()); com.gexin.fastjson.JSONObject jsonObject = com.gexin.fastjson.JSON.parseObject(refund); String sub_code = jsonObject.getString("sub_code"); //订单号 if (StringUtils.isNotEmpty(sub_code)&&sub_code.equals("REFUND_SUCCESS")) { order.setStatus(3); String refund_settle_amount = jsonObject.getString("refund_settle_amount"); String refund_plat_trx_no = jsonObject.getString("refund_plat_trx_no"); order.setRefundTrxNo(refund_plat_trx_no); order.setRefundAmount(new BigDecimal(refund_settle_amount)); order.setRefundDate(new Date()); payFeign.updateOrder(order); //金额表今日金额要改 要分类型 TAdmin admin = tAdminService.getById(order.getAdminId()); Integer orderType = order.getType(); switch (orderType) { case 0: BigDecimal agencyProportion = order.getAgencyProportion(); // 代理分销获得利润 BigDecimal agencyPrice = price.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); //修改金额表的今日金额 LambdaQueryWrapper query = Wrappers.lambdaQuery(); query.eq(TShandeMch::getAdminId,order.getAdminId()); List list = tShandeMchService.list(query); if(list.size()>0){ TShandeMch shandeMch = list.get(0); BigDecimal todayBalance = shandeMch.getTodayBalance(); todayBalance = todayBalance.subtract(agencyPrice).setScale(2, RoundingMode.HALF_DOWN); shandeMch.setTodayBalance(todayBalance); shandeMch.setModifyDate(new Date()); tShandeMchService.updateById(shandeMch); } break; case 1: BigDecimal agencyProportion1 = order.getAgencyProportion(); BigDecimal merchantProportion1 = order.getMerchantProportion(); // 代理分销获得利润 BigDecimal agencyPrice1 = price.multiply(agencyProportion1.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); // 经销商分销获得利润 BigDecimal merchantAmount1 = price.multiply(merchantProportion1.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); //修改代理金额表的今日金额 // TShandeMchExample shandeMchExample1 = new TShandeMchExample(); // TShandeMchExample.Criteria shandeMchExampleCriteria1 = shandeMchExample1.createCriteria(); // shandeMchExampleCriteria1.andAdminIdEqualTo(admin.getParentId()); // List list1 = tShandeMchService.selectByOption(shandeMchExample1); LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(TShandeMch::getAdminId,order.getAgencyId()); List list1 = tShandeMchService.list(query1); if(list1.size()>0){ TShandeMch shandeMch = list1.get(0); BigDecimal todayBalance = shandeMch.getTodayBalance(); todayBalance = todayBalance.subtract(agencyPrice1).setScale(2, RoundingMode.HALF_DOWN); shandeMch.setTodayBalance(todayBalance); shandeMch.setModifyDate(new Date()); tShandeMchService.updateById(shandeMch); } //修改经销商金额表的今日金额 // TShandeMchExample shandeMchExample2 = new TShandeMchExample(); // TShandeMchExample.Criteria shandeMchExampleCriteria2 = shandeMchExample2.createCriteria(); // shandeMchExampleCriteria2.andAdminIdEqualTo(admin.getId()); // List list2 = tShandeMchService.selectByOption(shandeMchExample2); LambdaQueryWrapper query2 = Wrappers.lambdaQuery(); query2.eq(TShandeMch::getAdminId,admin.getId()); List list2 = tShandeMchService.list(query2); if(list2.size()>0){ TShandeMch shandeMch = list2.get(0); BigDecimal todayBalance = shandeMch.getTodayBalance(); todayBalance = todayBalance.subtract(merchantAmount1).setScale(2, RoundingMode.HALF_DOWN); shandeMch.setTodayBalance(todayBalance); shandeMch.setModifyDate(new Date()); tShandeMchService.updateById(shandeMch); } break; case 2: BigDecimal agencyProportion2 = order.getAgencyProportion(); BigDecimal merchantProportion2 = order.getMerchantProportion(); BigDecimal personageProportion2 = order.getPersonageProportion(); // 代理分销获得利润 BigDecimal agencyAmount = price.multiply(agencyProportion2.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); // 经销商分销获得利润 BigDecimal merchantAmount = price.multiply(merchantProportion2.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); // 经销商分销获得利润 BigDecimal personageAmount = price.multiply(personageProportion2.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN); //修改代理金额表的今日金额 // TShandeMchExample shandeMchExample3 = new TShandeMchExample(); // TShandeMchExample.Criteria shandeMchExampleCriteria3 = shandeMchExample3.createCriteria(); // shandeMchExampleCriteria3.andAdminIdEqualTo(admin.getAgencyId()); // List list3 = tShandeMchService.selectByOption(shandeMchExample3); LambdaQueryWrapper query3 = Wrappers.lambdaQuery(); query3.eq(TShandeMch::getAdminId,order.getAgencyId()); List list3 = tShandeMchService.list(query3); if(list3.size()>0){ TShandeMch shandeMch = list3.get(0); BigDecimal todayBalance = shandeMch.getTodayBalance(); todayBalance = todayBalance.subtract(agencyAmount).setScale(2, RoundingMode.HALF_DOWN); shandeMch.setTodayBalance(todayBalance); shandeMch.setModifyDate(new Date()); tShandeMchService.updateById(shandeMch); } //修改经销商金额表的今日金额 // TShandeMchExample shandeMchExample4 = new TShandeMchExample(); // TShandeMchExample.Criteria shandeMchExampleCriteria4 = shandeMchExample4.createCriteria(); // shandeMchExampleCriteria4.andAdminIdEqualTo(admin.getMerchantId()); // List list4 = tShandeMchService.selectByOption(shandeMchExample4); LambdaQueryWrapper query4 = Wrappers.lambdaQuery(); query4.eq(TShandeMch::getAdminId,order.getMerchantId()); List list4 = tShandeMchService.list(query4); if(list4.size()>0){ TShandeMch shandeMch = list4.get(0); BigDecimal todayBalance = shandeMch.getTodayBalance(); todayBalance = todayBalance.subtract(merchantAmount).setScale(2, RoundingMode.HALF_DOWN); shandeMch.setTodayBalance(todayBalance); shandeMch.setModifyDate(new Date()); tShandeMchService.updateById(shandeMch); } //修改终端金额表的今日金额 // TShandeMchExample shandeMchExample5 = new TShandeMchExample(); // TShandeMchExample.Criteria shandeMchExampleCriteria5 = shandeMchExample5.createCriteria(); // shandeMchExampleCriteria5.andAdminIdEqualTo(admin.getId()); // List list5 = tShandeMchService.selectByOption(shandeMchExample5); LambdaQueryWrapper query5 = Wrappers.lambdaQuery(); query5.eq(TShandeMch::getAdminId,admin.getId()); List list5 = tShandeMchService.list(query5); if(list5.size()>0){ TShandeMch shandeMch = list5.get(0); BigDecimal todayBalance = shandeMch.getTodayBalance(); todayBalance = todayBalance.subtract(personageAmount).setScale(2, RoundingMode.HALF_DOWN); shandeMch.setTodayBalance(todayBalance); shandeMch.setModifyDate(new Date()); tShandeMchService.updateById(shandeMch); } break; } TOrder order1 = R.getDataIfSuccess(payFeign.getOrder(String.valueOf(torder.getId()))); order1.setModifyDate(new Date()); esTOrderService.updateDataById(order1); return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(true) .setData("申请退款已成功") .setMessage("申请退款已成功")); } else { return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(false) .setData("申请退款失败") .setMessage(refund)); } } catch (Exception e) { e.printStackTrace(); } } else { try { String result = orderService.refund(order.getSn(), orderService.initRefundSn(equipmentId), price, "", notifyUrl, altRefInfo.toString()); if (Constant.correct_code.equals(result)) { order.setStatus(2); payFeign.updateOrder(order); // tOrderService.updateById(order); return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(true) .setData("申请退款已成功") .setMessage("申请退款已成功")); } else { return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(false) .setData("申请退款失败") .setMessage("申请退款失败")); } } catch (Exception e) { e.printStackTrace(); } } return ResponseEntity .status(HttpStatus.OK) .body(new ResultMessage() .setCode(true) .setData("申请退款已成功") .setMessage("申请退款已成功")); } @ApiOperation(value = "添加优惠码") @GetMapping("/equipmentPay") public ResponseModel equipmentPay(Double number, Long equipmentId, String frpCode) { TEquipment equipment = tEquipmentService.getById(equipmentId); if (!frpCode.equals("ALIPAY_NATIVE") && !frpCode.equals("WEIXIN_NATIVE")) { return R.fail("参数错误"); } if (equipment == null) { return R.fail("找不到设备"); } TAdmin admin = tAdminService.getById(equipment.getAdminId()); Double money = null; LambdaQueryWrapper query1 = Wrappers.lambdaQuery(); query1.eq(TPrice::getName,"MG280"); List prices = priceService.list(query1); for(TPrice price:prices){ if(price.getName().equals("MG280")){ money = price.getPrice(); } } BigDecimal price = null; double pri = money * number; price = BigDecimal.valueOf(pri); String sn = orderService.initSn(equipmentId); String orderNo = sn; String productName = "280充值"; BigDecimal cutPrice = price.multiply(new BigDecimal(100)).divide(new BigDecimal(100)); BigDecimal amount = cutPrice; String productDesc = ""; String commonParameter = ""; String returnUrl = null; String notifyUrl = JoinpayConstant.Notify_Url_PromoCode; String isShowPic = "1"; String openId = null; String authCode = null; String appid = null; String transactionModel = null; String tradeMerchantNo = null; String buyerId = null; String isAlt = "0"; String altType = null; String altUrl = null; BigDecimal marketingAmount = null; // frpCode = "WEIXIN_NATIVE"; TOrder order1 = new TOrder(); order1.setSn(sn); order1.setType(0); order1.setAdminId(admin.getId()); order1.setProductName(productName); order1.setPrice(price); order1.setEquipmentId(equipmentId); order1.setClientId(equipment.getClientId()); order1.setStatus(0); order1.setFrpCode(frpCode); order1.setCreateDate(new Date()); order1.setModifyDate(new Date()); payFeign.addOrder(order1); JSONArray altInfo = new JSONArray(); String result = null; try { result = joinpayMchService.uniPay( orderNo, amount, productName, productDesc, commonParameter, returnUrl, notifyUrl, frpCode, isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo, buyerId, isAlt, altType, altInfo, altUrl, marketingAmount ); } catch (Exception e) { e.printStackTrace(); return R.fail("申请支付失败"); } JSONObject resultJson = JSONObject.parseObject(result); // 汇聚支付支付申请返回支付二维码图片 String rd_Pic = resultJson.getString("rd_Pic"); if (resultJson == null || StringUtils.isBlank(rd_Pic)) { return R.fail("找不到支付图片"); } JSONObject kindData = new JSONObject(); kindData.put("sn", sn); kindData.put("price", price); kindData.put("image", rd_Pic); return R.ok(kindData); } }