TOrderController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. package com.szwl.controller;
  2. import cn.com.crbank.ommo.bean.ResultMessage;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.szwl.feign.bean.PayFeign;
  8. import com.szwl.model.bo.JoinpayConstant;
  9. import com.szwl.model.bo.R;
  10. import com.szwl.model.bo.ResponseModel;
  11. import com.szwl.model.entity.*;
  12. import com.szwl.model.utils.Constant;
  13. import com.szwl.service.*;
  14. import com.szwl.service.es.EsTOrderService;
  15. import io.swagger.annotations.ApiOperation;
  16. import org.apache.commons.lang.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.http.HttpStatus;
  19. import org.springframework.http.ResponseEntity;
  20. import org.springframework.web.bind.annotation.*;
  21. import java.math.BigDecimal;
  22. import java.math.RoundingMode;
  23. import java.util.Date;
  24. import java.util.List;
  25. /**
  26. * <p>
  27. * 前端控制器
  28. * </p>
  29. *
  30. * @author wuhs
  31. * @since 2022-04-23
  32. */
  33. @RestController
  34. @RequestMapping("/tOrder")
  35. public class TOrderController {
  36. @Autowired
  37. TAdminService tAdminService;
  38. @Autowired
  39. TEquipmentService tEquipmentService;
  40. @Autowired
  41. TOrderService orderService;
  42. @Autowired
  43. PayFeign payFeign;
  44. @Autowired
  45. TShandeMchService tShandeMchService;
  46. @Autowired
  47. EsTOrderService esTOrderService;
  48. @Autowired
  49. TPriceService priceService;
  50. @Autowired
  51. TJoinpayMchService joinpayMchService;
  52. /**
  53. * 退款
  54. * @param
  55. * @return
  56. */
  57. @PostMapping("/refund")
  58. public ResponseEntity<?> refund(@RequestBody TOrder torder) {
  59. TOrder order = R.getDataIfSuccess(payFeign.getOrder(String.valueOf(torder.getId())));
  60. TEquipment equipment = tEquipmentService.getById(order.getEquipmentId());
  61. Long equipmentId = equipment.getId();
  62. if (order.getProductName().equals("280充值")) {
  63. return ResponseEntity
  64. .status(HttpStatus.OK)
  65. .body(new ResultMessage()
  66. .setCode(false)
  67. .setData("订单不退款")
  68. .setMessage("订单不退款"));
  69. }
  70. if (order.getStatus().equals("0")) {
  71. return ResponseEntity
  72. .status(HttpStatus.OK)
  73. .body(new ResultMessage()
  74. .setCode(false)
  75. .setData("订单非支付状态")
  76. .setMessage("订单非支付状态"));
  77. }
  78. // TAdmin admin = tAdminService.selectEntityById(order.getAdminId());
  79. // if(admin.getIsRefund()!=null&&admin.getIsRefund().equals("0")){
  80. //// return JsonMessage.error("机器设定不退款");
  81. // }
  82. String notifyUrl = JoinpayConstant.Notify_Refund_Url;
  83. JSONArray altInfoArray = JSONArray.parseArray(order.getAltInfo());
  84. JSONArray altRefInfo = new JSONArray();
  85. BigDecimal price = BigDecimal.ZERO;
  86. for (int i = 0; i < altInfoArray.size(); i++) {
  87. JSONObject altInfoObject = altInfoArray.getJSONObject(i);
  88. JSONObject refInfo = new JSONObject();
  89. refInfo.put("altMchNo", altInfoObject.getString("altMchNo"));
  90. refInfo.put("altRefAmount", altInfoObject.getString("altAmount"));
  91. price = price.add(altInfoObject.getBigDecimal("altAmount"));
  92. if (!altInfoObject.getBigDecimal("altAmount").toString().equals("0.00")) {
  93. altRefInfo.add(refInfo);
  94. }
  95. }
  96. // 特殊处理下:添加多一个平台方分销的金额
  97. // 平台获得的收益
  98. BigDecimal adminPrice = new BigDecimal(order.getPrice().toString()).subtract(price);
  99. JSONObject refInfo = new JSONObject();
  100. refInfo.put("altMchNo", JoinpayConstant.mch_no);
  101. refInfo.put("altRefAmount", adminPrice.toString());
  102. price = price.add(adminPrice);
  103. if (!adminPrice.toString().toString().equals("0.00")) {
  104. altRefInfo.add(refInfo);
  105. }
  106. String text = "";
  107. //需要知道订单是哪一个平台的,不能以账号的为标准 0或null为汇聚,1为杉德支付
  108. String payPlatform = order.getPayPlatform();
  109. if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
  110. try {
  111. String refund = tShandeMchService.refund(order.getId(), orderService.initRefundSn(equipmentId).toString(), price, "", altRefInfo.toString());
  112. com.gexin.fastjson.JSONObject jsonObject = com.gexin.fastjson.JSON.parseObject(refund);
  113. String sub_code = jsonObject.getString("sub_code");
  114. //订单号
  115. if (StringUtils.isNotEmpty(sub_code)&&sub_code.equals("REFUND_SUCCESS")) {
  116. order.setStatus(3);
  117. String refund_settle_amount = jsonObject.getString("refund_settle_amount");
  118. String refund_plat_trx_no = jsonObject.getString("refund_plat_trx_no");
  119. order.setRefundTrxNo(refund_plat_trx_no);
  120. order.setRefundAmount(new BigDecimal(refund_settle_amount));
  121. order.setRefundDate(new Date());
  122. payFeign.updateOrder(order);
  123. //金额表今日金额要改 要分类型
  124. TAdmin admin = tAdminService.getById(order.getAdminId());
  125. Integer orderType = order.getType();
  126. switch (orderType) {
  127. case 0:
  128. BigDecimal agencyProportion = order.getAgencyProportion();
  129. // 代理分销获得利润
  130. BigDecimal agencyPrice = price.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
  131. //修改金额表的今日金额
  132. LambdaQueryWrapper<TShandeMch> query = Wrappers.lambdaQuery();
  133. query.eq(TShandeMch::getAdminId,order.getAdminId());
  134. List<TShandeMch> list = tShandeMchService.list(query);
  135. if(list.size()>0){
  136. TShandeMch shandeMch = list.get(0);
  137. BigDecimal todayBalance = shandeMch.getTodayBalance();
  138. todayBalance = todayBalance.subtract(agencyPrice).setScale(2, RoundingMode.HALF_DOWN);
  139. shandeMch.setTodayBalance(todayBalance);
  140. shandeMch.setModifyDate(new Date());
  141. tShandeMchService.updateById(shandeMch);
  142. }
  143. break;
  144. case 1:
  145. BigDecimal agencyProportion1 = order.getAgencyProportion();
  146. BigDecimal merchantProportion1 = order.getMerchantProportion();
  147. // 代理分销获得利润
  148. BigDecimal agencyPrice1 = price.multiply(agencyProportion1.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
  149. // 经销商分销获得利润
  150. BigDecimal merchantAmount1 = price.multiply(merchantProportion1.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
  151. //修改代理金额表的今日金额
  152. // TShandeMchExample shandeMchExample1 = new TShandeMchExample();
  153. // TShandeMchExample.Criteria shandeMchExampleCriteria1 = shandeMchExample1.createCriteria();
  154. // shandeMchExampleCriteria1.andAdminIdEqualTo(admin.getParentId());
  155. // List<TShandeMch> list1 = tShandeMchService.selectByOption(shandeMchExample1);
  156. LambdaQueryWrapper<TShandeMch> query1 = Wrappers.lambdaQuery();
  157. query1.eq(TShandeMch::getAdminId,order.getAgencyId());
  158. List<TShandeMch> list1 = tShandeMchService.list(query1);
  159. if(list1.size()>0){
  160. TShandeMch shandeMch = list1.get(0);
  161. BigDecimal todayBalance = shandeMch.getTodayBalance();
  162. todayBalance = todayBalance.subtract(agencyPrice1).setScale(2, RoundingMode.HALF_DOWN);
  163. shandeMch.setTodayBalance(todayBalance);
  164. shandeMch.setModifyDate(new Date());
  165. tShandeMchService.updateById(shandeMch);
  166. }
  167. //修改经销商金额表的今日金额
  168. // TShandeMchExample shandeMchExample2 = new TShandeMchExample();
  169. // TShandeMchExample.Criteria shandeMchExampleCriteria2 = shandeMchExample2.createCriteria();
  170. // shandeMchExampleCriteria2.andAdminIdEqualTo(admin.getId());
  171. // List<TShandeMch> list2 = tShandeMchService.selectByOption(shandeMchExample2);
  172. LambdaQueryWrapper<TShandeMch> query2 = Wrappers.lambdaQuery();
  173. query2.eq(TShandeMch::getAdminId,admin.getId());
  174. List<TShandeMch> list2 = tShandeMchService.list(query2);
  175. if(list2.size()>0){
  176. TShandeMch shandeMch = list2.get(0);
  177. BigDecimal todayBalance = shandeMch.getTodayBalance();
  178. todayBalance = todayBalance.subtract(merchantAmount1).setScale(2, RoundingMode.HALF_DOWN);
  179. shandeMch.setTodayBalance(todayBalance);
  180. shandeMch.setModifyDate(new Date());
  181. tShandeMchService.updateById(shandeMch);
  182. }
  183. break;
  184. case 2:
  185. BigDecimal agencyProportion2 = order.getAgencyProportion();
  186. BigDecimal merchantProportion2 = order.getMerchantProportion();
  187. BigDecimal personageProportion2 = order.getPersonageProportion();
  188. // 代理分销获得利润
  189. BigDecimal agencyAmount = price.multiply(agencyProportion2.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
  190. // 经销商分销获得利润
  191. BigDecimal merchantAmount = price.multiply(merchantProportion2.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
  192. // 经销商分销获得利润
  193. BigDecimal personageAmount = price.multiply(personageProportion2.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
  194. //修改代理金额表的今日金额
  195. // TShandeMchExample shandeMchExample3 = new TShandeMchExample();
  196. // TShandeMchExample.Criteria shandeMchExampleCriteria3 = shandeMchExample3.createCriteria();
  197. // shandeMchExampleCriteria3.andAdminIdEqualTo(admin.getAgencyId());
  198. // List<TShandeMch> list3 = tShandeMchService.selectByOption(shandeMchExample3);
  199. LambdaQueryWrapper<TShandeMch> query3 = Wrappers.lambdaQuery();
  200. query3.eq(TShandeMch::getAdminId,order.getAgencyId());
  201. List<TShandeMch> list3 = tShandeMchService.list(query3);
  202. if(list3.size()>0){
  203. TShandeMch shandeMch = list3.get(0);
  204. BigDecimal todayBalance = shandeMch.getTodayBalance();
  205. todayBalance = todayBalance.subtract(agencyAmount).setScale(2, RoundingMode.HALF_DOWN);
  206. shandeMch.setTodayBalance(todayBalance);
  207. shandeMch.setModifyDate(new Date());
  208. tShandeMchService.updateById(shandeMch);
  209. }
  210. //修改经销商金额表的今日金额
  211. // TShandeMchExample shandeMchExample4 = new TShandeMchExample();
  212. // TShandeMchExample.Criteria shandeMchExampleCriteria4 = shandeMchExample4.createCriteria();
  213. // shandeMchExampleCriteria4.andAdminIdEqualTo(admin.getMerchantId());
  214. // List<TShandeMch> list4 = tShandeMchService.selectByOption(shandeMchExample4);
  215. LambdaQueryWrapper<TShandeMch> query4 = Wrappers.lambdaQuery();
  216. query4.eq(TShandeMch::getAdminId,order.getMerchantId());
  217. List<TShandeMch> list4 = tShandeMchService.list(query4);
  218. if(list4.size()>0){
  219. TShandeMch shandeMch = list4.get(0);
  220. BigDecimal todayBalance = shandeMch.getTodayBalance();
  221. todayBalance = todayBalance.subtract(merchantAmount).setScale(2, RoundingMode.HALF_DOWN);
  222. shandeMch.setTodayBalance(todayBalance);
  223. shandeMch.setModifyDate(new Date());
  224. tShandeMchService.updateById(shandeMch);
  225. }
  226. //修改终端金额表的今日金额
  227. // TShandeMchExample shandeMchExample5 = new TShandeMchExample();
  228. // TShandeMchExample.Criteria shandeMchExampleCriteria5 = shandeMchExample5.createCriteria();
  229. // shandeMchExampleCriteria5.andAdminIdEqualTo(admin.getId());
  230. // List<TShandeMch> list5 = tShandeMchService.selectByOption(shandeMchExample5);
  231. LambdaQueryWrapper<TShandeMch> query5 = Wrappers.lambdaQuery();
  232. query5.eq(TShandeMch::getAdminId,admin.getId());
  233. List<TShandeMch> list5 = tShandeMchService.list(query5);
  234. if(list5.size()>0){
  235. TShandeMch shandeMch = list5.get(0);
  236. BigDecimal todayBalance = shandeMch.getTodayBalance();
  237. todayBalance = todayBalance.subtract(personageAmount).setScale(2, RoundingMode.HALF_DOWN);
  238. shandeMch.setTodayBalance(todayBalance);
  239. shandeMch.setModifyDate(new Date());
  240. tShandeMchService.updateById(shandeMch);
  241. }
  242. break;
  243. }
  244. TOrder order1 = R.getDataIfSuccess(payFeign.getOrder(String.valueOf(torder.getId())));
  245. order1.setModifyDate(new Date());
  246. esTOrderService.updateDataById(order1);
  247. return ResponseEntity
  248. .status(HttpStatus.OK)
  249. .body(new ResultMessage()
  250. .setCode(true)
  251. .setData("申请退款已成功")
  252. .setMessage("申请退款已成功"));
  253. } else {
  254. return ResponseEntity
  255. .status(HttpStatus.OK)
  256. .body(new ResultMessage()
  257. .setCode(false)
  258. .setData("申请退款失败")
  259. .setMessage(refund));
  260. }
  261. } catch (Exception e) {
  262. e.printStackTrace();
  263. }
  264. } else {
  265. try {
  266. String result = orderService.refund(order.getSn(), orderService.initRefundSn(equipmentId), price, "", notifyUrl, altRefInfo.toString());
  267. if (Constant.correct_code.equals(result)) {
  268. order.setStatus(2);
  269. payFeign.updateOrder(order);
  270. // tOrderService.updateById(order);
  271. return ResponseEntity
  272. .status(HttpStatus.OK)
  273. .body(new ResultMessage()
  274. .setCode(true)
  275. .setData("申请退款已成功")
  276. .setMessage("申请退款已成功"));
  277. } else {
  278. return ResponseEntity
  279. .status(HttpStatus.OK)
  280. .body(new ResultMessage()
  281. .setCode(false)
  282. .setData("申请退款失败")
  283. .setMessage("申请退款失败"));
  284. }
  285. } catch (Exception e) {
  286. e.printStackTrace();
  287. }
  288. }
  289. return ResponseEntity
  290. .status(HttpStatus.OK)
  291. .body(new ResultMessage()
  292. .setCode(true)
  293. .setData("申请退款已成功")
  294. .setMessage("申请退款已成功"));
  295. }
  296. @ApiOperation(value = "添加优惠码")
  297. @GetMapping("/equipmentPay")
  298. public ResponseModel<?> equipmentPay(Double number, Long equipmentId, String frpCode) {
  299. TEquipment equipment = tEquipmentService.getById(equipmentId);
  300. if (!frpCode.equals("ALIPAY_NATIVE") && !frpCode.equals("WEIXIN_NATIVE")) {
  301. return R.fail("参数错误");
  302. }
  303. if (equipment == null) {
  304. return R.fail("找不到设备");
  305. }
  306. TAdmin admin = tAdminService.getById(equipment.getAdminId());
  307. Double money = null;
  308. LambdaQueryWrapper<TPrice> query1 = Wrappers.lambdaQuery();
  309. query1.eq(TPrice::getName,"MG280");
  310. List<TPrice> prices = priceService.list(query1);
  311. for(TPrice price:prices){
  312. if(price.getName().equals("MG280")){
  313. money = price.getPrice();
  314. }
  315. }
  316. BigDecimal price = null;
  317. double pri = money * number;
  318. price = BigDecimal.valueOf(pri);
  319. String sn = orderService.initSn(equipmentId);
  320. String orderNo = sn;
  321. String productName = "280充值";
  322. BigDecimal cutPrice = price.multiply(new BigDecimal(100)).divide(new BigDecimal(100));
  323. BigDecimal amount = cutPrice;
  324. String productDesc = "";
  325. String commonParameter = "";
  326. String returnUrl = null;
  327. String notifyUrl = JoinpayConstant.Notify_Url_PromoCode;
  328. String isShowPic = "1";
  329. String openId = null;
  330. String authCode = null;
  331. String appid = null;
  332. String transactionModel = null;
  333. String tradeMerchantNo = null;
  334. String buyerId = null;
  335. String isAlt = "0";
  336. String altType = null;
  337. String altUrl = null;
  338. BigDecimal marketingAmount = null;
  339. // frpCode = "WEIXIN_NATIVE";
  340. TOrder order1 = new TOrder();
  341. order1.setSn(sn);
  342. order1.setType(0);
  343. order1.setAdminId(admin.getId());
  344. order1.setProductName(productName);
  345. order1.setPrice(price);
  346. order1.setEquipmentId(equipmentId);
  347. order1.setClientId(equipment.getClientId());
  348. order1.setStatus(0);
  349. order1.setFrpCode(frpCode);
  350. order1.setCreateDate(new Date());
  351. order1.setModifyDate(new Date());
  352. payFeign.addOrder(order1);
  353. JSONArray altInfo = new JSONArray();
  354. String result = null;
  355. try {
  356. result = joinpayMchService.uniPay(
  357. orderNo, amount, productName, productDesc,
  358. commonParameter, returnUrl, notifyUrl, frpCode,
  359. isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
  360. buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
  361. );
  362. } catch (Exception e) {
  363. e.printStackTrace();
  364. return R.fail("申请支付失败");
  365. }
  366. JSONObject resultJson = JSONObject.parseObject(result);
  367. // 汇聚支付支付申请返回支付二维码图片
  368. String rd_Pic = resultJson.getString("rd_Pic");
  369. if (resultJson == null || StringUtils.isBlank(rd_Pic)) {
  370. return R.fail("找不到支付图片");
  371. }
  372. JSONObject kindData = new JSONObject();
  373. kindData.put("sn", sn);
  374. kindData.put("price", price);
  375. kindData.put("image", rd_Pic);
  376. return R.ok(kindData);
  377. }
  378. }