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);
}
}