package com.szwl.controller;
import cn.com.crbank.ommo.esUtil.BeanUtils;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
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.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.szwl.constant.HuifuConstant;
import com.szwl.constant.JoinpayConstant;
import com.szwl.constant.ResponseCodesEnum;
import com.szwl.exception.BizException;
import com.szwl.feign.bean.OrderFeign;
import com.szwl.feign.bean.SzwlFeign;
import com.szwl.model.bo.JsonMessage;
import com.szwl.model.bo.R;
import com.szwl.model.bo.ResponseModel;
import com.szwl.model.dto.OrderDetailsDTO;
import com.szwl.model.entity.*;
import com.szwl.model.utils.HttpClientSslUtils;
import com.szwl.model.utils.HttpClientUtils;
import com.szwl.model.utils.PushUtils;
import com.szwl.model.utils.RSAUtil;
import com.szwl.service.*;
import com.szwl.service.es.EsTOrderService;
import com.szwl.utils.HuifuUtils;
import com.szwl.utils.IDGenerator;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.view.RedirectView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* 前端控制器
*
*
* @author wuhs
* @since 2022-06-17
*/
@Slf4j
@RestController
@RequestMapping("/tOrder")
public class TOrderController {
@Autowired
SzwlFeign szwlFeign;
@Autowired
OrderFeign orderFeign;
@Autowired
TOrderService orderService;
@Autowired
TOrderTaskService orderTaskService;
@Autowired
TJoinpayMchService joinpayMchService;
@Autowired
TShandeMchService shandeMchService;
@Autowired
THuifuMchService huifuMchService;
@Autowired
TEquipmentService equipmentService;
@Autowired
EsTOrderService esTOrderService;
@Autowired
TSzsmWxService szsmWxService;
@Autowired
WechatPayInfoService wechatPayInfoService;
@Autowired
private THuifuTempOrderService huifuTempOrderService;
@Autowired
private TOrderDetailsService orderDetailsService;
@ApiOperation(value = "测试feign")
@GetMapping("/testFeign")
public ResponseModel> testFeign(String id) {
return szwlFeign.testGetAdmin(id);
}
/**
* 合并付款接口,根据终端跳转微信或支付宝
*
* @param req
* @param resp
* @return
* @throws Exception
*/
@ApiOperation(value = "请求在线支付 主扫")
@RequestMapping("/aliPay")
public RedirectView alipayforward(String wx, String zfb, HttpServletRequest req, HttpServletResponse resp) throws Exception {
String userAgent = req.getHeader("User-Agent");
RedirectView redirectTarget = new RedirectView();
redirectTarget.setContextRelative(true);
if (userAgent.contains("MicroMessenger")) { // 微信
redirectTarget.setUrl(wx);
} else if (userAgent.contains("AlipayClient")) { // 支付宝
redirectTarget.setUrl(zfb);
} else {
throw new BizException(ResponseCodesEnum.A0001, "请使用支付宝或微信扫码!");
}
return redirectTarget;
}
/**
* 请求在线支付 主扫 优惠码 盲盒
*
* @param clientId 设备client id
* @param productName 商品名称
* @param frpCode 支付方式 支付宝:ALIPAY_NATIVE , 微信:WEIXIN_NATIVE
* @param pri 有值代表是盲盒
* @return
*/
@ApiOperation(value = "请求在线支付 主扫")
@GetMapping("/uniPay")
public Object uniPay(String code, String clientId, String productName, String frpCode, String pri) {
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
//验证优惠码 code=null 则不选用优惠码
TPromoCode promoCode = new TPromoCode();
if (StringUtils.isNotEmpty(code)) {
//有优惠码,需要对优惠码进行验证
ResponseModel tPromoCodeResponseModel = szwlFeign.selectTPromoCode(code, equipment.getAdminId().toString());
TPromoCode tPromoCode = tPromoCodeResponseModel.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
Date lastUseDate = null;
if (promoCode != null && promoCode.getId() != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
//0折
return JsonMessage.success("0");
}
}
// 支付方式
if (!frpCode.equals("ALIPAY_NATIVE") && !frpCode.equals("WEIXIN_NATIVE")) {
return JsonMessage.error("参数错误");
}
Long equipmentId = equipment.getId();
// 查找商品
ResponseModel product1 = szwlFeign.getProduct(String.valueOf(equipmentId), productName);
TProduct product = product1.getData();
if (product == null) {
return JsonMessage.error("找不到商品");
}
BigDecimal price = product.getRmbPrice();
if (StringUtils.isNotEmpty(pri)) {
price = new BigDecimal(pri);
}
// 计算折扣后的价格
if (StringUtils.isNotEmpty(code)) {
BigDecimal discount = BigDecimal.valueOf(promoCode.getDiscount());
if (StringUtils.isNotEmpty(promoCode.getType()) && promoCode.getType().equals("1")) {
if (price.compareTo(discount) > 0) {
// 如果 price 大于 discount,从 price 中减去 discount
price = price.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
} else {
// 如果 price 小于等于 discount,将 price 设置为 0
// price = BigDecimal.ZERO;
return JsonMessage.success("0");
}
} else {
price = product.getRmbPrice().multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
}
}
// 判断价格是否小于等于0
if (BigDecimal.ZERO.compareTo(price) >= 0) {
return JsonMessage.error("商品价格异常");
}
// 生成订单编号
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo = sn;
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
String openId = null;
String authCode = null;
String appid = null;
String transactionModel = null;
String tradeMerchantNo = admin.getTradeMerchantNo();
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
BigDecimal marketingAmount = null;
if (StringUtils.isNotEmpty(pri)) {
productName = "棉花糖";
}
Integer productNumber = 1;
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn);
order.setProductId(product.getId());
order.setProductNo(product.getNo());
order.setProductName(productName);
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode);
order.setAltInfo(altInfo.toString());
order.setStatus(0);
order.setType(admin.getType());
order.setProductNumber(productNumber);
order.setCompanyType(admin.getCompanyType());
order.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setOrderSn(sn);
orderDetails.setPrice(price);
orderDetails.setProductName(productName);
orderDetails.setProductNo(product.getNo());
orderDetails.setProductNumber(productNumber);
orderDetails.setAmount(price);
orderDetails.setRefundStatus("0");
orderDetails.setCompanyType(companyType);
orderDetails.setMachineType(equipment.getMachineType());
String productName1 = productName + "-" + equipment.getName() + "-" + client6;
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
// 汇付分账参数
order.setAcctSplitBunch(acctSplitBunch.toString());
if (frpCode.equals("WEIXIN_NATIVE")) {
//添加到汇付临时表
// THuifuTempOrder tHuifuTempOrder = new THuifuTempOrder();
// String[] ignoreProperties = {"id"};
// String id = HuifuUtils.inithuifuTempId();
// tHuifuTempOrder.setId(id);
// BeanUtil.copyProperties(order, tHuifuTempOrder, ignoreProperties);
// huifuTempOrderService.save(tHuifuTempOrder);
// if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
// result = HuifuConstant.SC_JUMP_URL + "/#/weChatPay?id=" + id;
// } else {
// result = HuifuConstant.SZ_JUMP_URL + "/#/weChatPay?id=" + id;
// }
// log.info("返回链接:{}", result);
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
result = HuifuConstant.SC_WECHAT_URL + "?price=" + price + "&sn=" + sn;
} else {
result = HuifuConstant.SZ_WECHAT_URL + "?price=" + price + "&sn=" + sn;
}
String qrcode = toQrcode(result);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn);
kindData.put("rd_Pic", qrcode);
orderService.save(order);
orderDetailsService.save(orderDetails);
return JsonMessage.success(kindData.toString());
}
// 汇付支付
try {
result = huifuMchService.uniPay(
orderNo, amount, productName1, productDesc,
notifyUrl, frpCode, openId, appid, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
if (StrUtil.isEmpty(result)) {
return JsonMessage.error("找不到支付图片");
}
String qrcode = toQrcode(result);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn);
kindData.put("rd_Pic", qrcode);
orderService.save(order);
orderDetailsService.save(orderDetails);
return JsonMessage.success(kindData.toString());
} else {
try {
result = joinpayMchService.uniPay(
orderNo, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
// 汇聚支付支付申请返回支付二维码图片
String rd_Pic = resultJson.getString("rd_Pic");
if (resultJson == null || StringUtils.isBlank(rd_Pic)) {
return JsonMessage.error("找不到支付图片");
}
JSONObject kindData = new JSONObject();
kindData.put("sn", sn);
kindData.put("rd_Pic", rd_Pic);
orderService.save(order);
orderDetailsService.save(orderDetails);
return JsonMessage.success(kindData.toString());
}
}
/**
* 被扫支付 + 优惠码 盲盒
*
* @param code 优惠码
* @param clientId 设备client id
* @param productName 商品名称
* @param frpCode 支付方式 支付宝:ALIPAY_CARD , 微信:WEIXIN_CARD
* @return
*/
@ApiOperation(value = "请求在线支付 被扫支付")
@GetMapping("/CardPay")
public Object CardPay(String code, String clientId, String productName, String frpCode, String authCode, String pri) {
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
//验证优惠码 code=null 则不选用优惠码
TPromoCode promoCode = new TPromoCode();
if (StringUtils.isEmpty(code)) {
//没有优惠码
} else {
//有优惠码,需要对优惠码进行验证
ResponseModel tPromoCodeResponseModel = szwlFeign.selectTPromoCode(code, equipment.getAdminId().toString());
TPromoCode tPromoCode = tPromoCodeResponseModel.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
Date lastUseDate = null;
if (promoCode != null && promoCode.getId() != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
//0折
return JsonMessage.success("0");
}
}
if (!frpCode.equals("ALIPAY_CARD") && !frpCode.equals("WEIXIN_CARD")) {
return JsonMessage.error("参数错误");
}
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
//查找商品
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
if (product == null) {
return JsonMessage.error("找不到商品");
}
BigDecimal price = product.getRmbPrice();
if (StringUtils.isNotEmpty(pri)) {
price = new BigDecimal(pri);
}
if (StringUtils.isNotEmpty(code)) {
BigDecimal discount = BigDecimal.valueOf(promoCode.getDiscount());
if (StringUtils.isNotEmpty(promoCode.getType()) && promoCode.getType().equals("1")) {
if (price.compareTo(discount) > 0) {
// 如果 price 大于 discount,从 price 中减去 discount
price = price.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
} else {
// 如果 price 小于等于 discount,将 price 设置为 0
// price = BigDecimal.ZERO;
return JsonMessage.success("0");
}
} else {
price = product.getRmbPrice().multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
}
}
if (BigDecimal.ZERO.compareTo(price) >= 0) {
return JsonMessage.error("商品价格异常");
}
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo = sn;
Integer productNumber = 1;
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
String openId = null;
String appid = null;
String transactionModel = null;
String tradeMerchantNo = admin.getTradeMerchantNo();
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
if (StringUtils.isNotEmpty(pri)) {
productName = "棉花糖";
}
BigDecimal marketingAmount = null;
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn);
order.setProductId(product.getId());
order.setProductNo(product.getNo());
order.setProductName(productName);
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode);
order.setAltInfo(altInfo.toString());
order.setStatus(0);
order.setType(admin.getType());
order.setProductNumber(productNumber);
order.setCompanyType(admin.getCompanyType());
order.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setIsSettlement("0");
}
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setOrderSn(sn);
orderDetails.setPrice(price);
orderDetails.setProductName(productName);
orderDetails.setProductNo(product.getNo());
orderDetails.setProductNumber(productNumber);
orderDetails.setAmount(price);
orderDetails.setRefundStatus("0");
orderDetails.setCompanyType(companyType);
orderDetails.setMachineType(equipment.getMachineType());
// String client6 = clientId.substring(clientId.length() - 6);
String productName1 = productName + "-" + equipment.getName() + "-" + client6;
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setAcctSplitBunch(acctSplitBunch.toString());
try {
result = huifuMchService.cardPay(
orderNo, amount, productName1, notifyUrl, authCode, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
if (result.equals(HuifuConstant.RESP_CODE_0)) {
orderService.save(order);
orderDetailsService.save(orderDetails);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn);
return JsonMessage.success(kindData.toString());
} else {
return JsonMessage.error("申请支付失败");
}
} else {
try {
result = joinpayMchService.uniPay(
orderNo, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
String raCode = resultJson.getString("ra_Code");
if (raCode.equals("100") || raCode.equals("102")) {
orderService.save(order);
orderDetailsService.save(orderDetails);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn);
return JsonMessage.success(kindData.toString());
} else {
return JsonMessage.error("申请支付失败");
}
}
}
/**
* 请求在线支付 主扫 优惠码 二码合一
*
* @param clientId 设备client id
* @param productName 商品名称
* @param pri DIY花型价格
* @return
*/
@ApiOperation(value = "请求在线支付 二码合一")
@GetMapping("/twoPayCode")
public Object twoPayCode(String code, String clientId, String productName, String pri) {
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
//验证优惠码 code=null 则不选用优惠码
TPromoCode promoCode = new TPromoCode();
if (StringUtils.isEmpty(code)) {
//没有优惠码
} else {
//有优惠码,需要对优惠码进行验证
ResponseModel tPromoCodeResponseModel = szwlFeign.selectTPromoCode(code, equipment.getAdminId().toString());
TPromoCode tPromoCode = tPromoCodeResponseModel.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
Date lastUseDate = null;
if (promoCode != null && promoCode.getId() != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
//0折
return JsonMessage.success("0");
}
}
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
//查找商品
BigDecimal price;
Long productId = null;
// A99:DIY花型
String productNo = "A99";
if (StringUtils.isEmpty(pri)) {
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
if (product == null) {
return JsonMessage.error("找不到商品");
}
price = product.getRmbPrice();
productId = product.getId();
productNo = product.getNo();
} else {
price = new BigDecimal(pri);
}
if (StringUtils.isNotEmpty(code)) {
BigDecimal discount = BigDecimal.valueOf(promoCode.getDiscount());
if (StringUtils.isNotEmpty(promoCode.getType()) && promoCode.getType().equals("1")) {
if (price.compareTo(discount) > 0) {
// 如果 price 大于 discount,从 price 中减去 discount
price = price.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
} else {
// 如果 price 小于等于 discount,将 price 设置为 0
// price = BigDecimal.ZERO;
return JsonMessage.success("0");
}
} else {
price = price.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
}
}
if (BigDecimal.ZERO.compareTo(price) >= 0) {
return JsonMessage.error("商品价格异常");
}
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn1 = orderService.initSn(client6);
String sn2 = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo1 = sn1;
String orderNo2 = sn2;
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
String openId = null;
String authCode = null;
String appid = null;
String transactionModel = null;
String tradeMerchantNo = admin.getTradeMerchantNo();
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
BigDecimal marketingAmount = null;
String frpCode1 = "WEIXIN_NATIVE";
String frpCode2 = "ALIPAY_NATIVE";
Integer productNumber = 1;
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn1);
order.setProductId(productId);
order.setProductNo(productNo);
order.setProductName(productName);
order.setProductNumber(productNumber);
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode1);
order.setAltInfo(altInfo.toString());
order.setStatus(0);
order.setType(admin.getType());
order.setCompanyType(companyType);
order.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setIsSettlement("0");
}
TOrder order2 = new TOrder();
order2.setId(IDGenerator.orderID());
order2.setCreateDate(new Date());
order2.setModifyDate(new Date());
order2.setAdminId(admin.getId());
order2.setSn(sn2);
order2.setProductId(productId);
order2.setProductNo(productNo);
order2.setProductName(productName);
order2.setProductNumber(productNumber);
order2.setPrice(price);
order2.setClientId(equipment.getClientId());
order2.setEquipmentId(equipmentId);
order2.setFrpCode(frpCode2);
order2.setAltInfo(altInfo.toString());
order2.setStatus(0);
order2.setType(admin.getType());
order2.setPayPlatform(payPlatform);
order2.setCompanyType(companyType);
order2.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
order2.setPersonageProportion(proportion.getPersonageProportion());
order2.setPersonageId(proportion.getPersonageId());
}
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order2.setIsSettlement("0");
}
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setPrice(price);
orderDetails.setProductName(productName);
orderDetails.setProductNo(productNo);
orderDetails.setProductNumber(productNumber);
orderDetails.setAmount(price);
orderDetails.setCompanyType(companyType);
orderDetails.setRefundStatus("0");
orderDetails.setMachineType(equipment.getMachineType());
// String client6 = clientId.substring(clientId.length() - 6);
String productName1 = productName + "-" + equipment.getName() + "-" + client6;
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
// 汇付分账参数
order.setAcctSplitBunch(acctSplitBunch.toString());
order2.setAcctSplitBunch(acctSplitBunch.toString());
//添加到汇付临时表,微信
// THuifuTempOrder tHuifuTempOrder = new THuifuTempOrder();
// String[] ignoreProperties = {"id"};
// String id = HuifuUtils.inithuifuTempId();
// tHuifuTempOrder.setId(id);
// BeanUtil.copyProperties(order, tHuifuTempOrder, ignoreProperties);
// huifuTempOrderService.save(tHuifuTempOrder);
// if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
// result1 = HuifuConstant.SC_JUMP_URL + "/#/weChatPay?id=" + id;
// } else {
// result1 = HuifuConstant.SZ_JUMP_URL + "/#/weChatPay?id=" + id;
// }
String result1 = "";
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
result1 = HuifuConstant.SC_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
} else {
result1 = HuifuConstant.SZ_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
}
// URL编码
try {
result1 = URLEncoder.encode(result1, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 支付宝
try {
result = huifuMchService.uniPay(
sn2, amount, productName1, productDesc,
notifyUrl, frpCode2, openId, appid, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
if (StrUtil.isEmpty(result)) {
return JsonMessage.error("找不到支付图片");
}
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://sz.sunzee.com.cn/PAY-SERVER/tOrder/aliPay?zfb=" + result + "&wx=" + result1;
System.out.println(code1);
String qrcode = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", qrcode);
orderService.save(order);
orderDetails.setOrderSn(sn1);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderDetails.setOrderSn(sn2);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
} else {
try {
result = joinpayMchService.uniPay(
orderNo1, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode1,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
String rc_Result1 = resultJson.getString("rc_Result");
String result1 = null;
try {
result1 = joinpayMchService.uniPay(
orderNo2, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode2,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson1 = JSONObject.parseObject(result1);
String rc_Result2 = resultJson1.getString("rc_Result");
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://sz.sunzee.com.cn/PAY-SERVER/tOrder/" + "aliPay?wx=" + rc_Result1 + "&zfb=" + rc_Result2;
String rd_Pic = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", rd_Pic);
orderService.save(order);
orderDetails.setOrderSn(sn1);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderDetails.setOrderSn(sn2);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
}
}
@ApiOperation(value = "购物车 请求在线支付 二码合一")
@PostMapping("/carsPay")
public Object carsPay(String clientId, @RequestBody Map productNameMap) {
if (productNameMap == null) {
return JsonMessage.error("数据出错");
}
StringBuffer note = new StringBuffer();
StringBuffer productName = new StringBuffer();
String productNo = "";
Map productMap = new HashMap<>();
Integer productNumber = 0;
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
BigDecimal price = new BigDecimal("0.00");
TEquipmentDesc equipmentDesc = R.getDataIfSuccess(szwlFeign.findEquipmentById(equipment.getId()));
if (equipmentDesc == null || equipmentDesc.getEquipmentId() == null || equipmentDesc.getPayType() == null || equipmentDesc.getPayType().equals("0")) {
// 1、type=0,原始设定,没有第二件半价
for (String key : productNameMap.keySet()) {
String entryValue = String.valueOf(productNameMap.get(key));
List value = JSON.parseArray(entryValue, String.class);
boolean hasDuplicate = hasDuplicateValue(value);
if (hasDuplicate) {
return JsonMessage.error("优惠码输入重复,单个商品只能使用一个优惠码");
}
List promoCodeList = new ArrayList<>();
// 1、校验优惠码
if (value.size() > 0) {
for (String code : value) {
if (!code.equals("0")) {
TPromoCode promoCode;
ResponseModel tPromoCodeResponseModel = szwlFeign.selectTPromoCode(code, equipment.getAdminId().toString());
TPromoCode tPromoCode = tPromoCodeResponseModel.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
Date lastUseDate = null;
if (promoCode != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
// if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
// //0折
// return JsonMessage.success("0");
// }
promoCodeList.add(promoCode);
}
}
}
String[] productNum = key.split("-");
String productNamea = productNum[0];
String num = productNum[1];
productMap.put(productNamea, Integer.valueOf(num));
productNumber += Integer.valueOf(num);
productName.append(productNamea).append("x").append(num).append(",");
//确定价格,然后叠加
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), productNamea));
if (product == null) {
return JsonMessage.error("找不到商品");
}
// note.append(productNamea).append("-").append(product.getNo()).append(":");
BigDecimal productPrice = product.getRmbPrice();
productNo = product.getNo();
if (promoCodeList.size() > 0) {
//有优惠码
BigDecimal onePrice = new BigDecimal("0.00");
Map priceMap = new HashMap<>();
int i;
for (i = 0; i < promoCodeList.size(); i++) {
BigDecimal discount = BigDecimal.valueOf(promoCodeList.get(i).getDiscount()).setScale(2, RoundingMode.HALF_DOWN);
BigDecimal price1 = new BigDecimal(0.0);
TPromoCode tPromoCode = promoCodeList.get(i);
if (StringUtils.isNotEmpty(tPromoCode.getType()) && tPromoCode.getType().equals("1")) {
if (productPrice.compareTo(discount) > 0) {
// 如果 price 大于 discount,从 price 中减去 discount
price1 = productPrice.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
} else {
// 如果 price 小于等于 discount,将 price 设置为 0
price1 = BigDecimal.ZERO;
}
} else {
if (tPromoCode.getDiscount() == 0) {
price1 = BigDecimal.ZERO;
} else {
price1 = productPrice.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
}
}
price = price.add(price1);
// onePrice = onePrice.add(price1);
if (priceMap.containsKey(price1)) {
priceMap.put(price1, priceMap.get(price1) + 1);
} else {
priceMap.put(price1, 1);
}
}
if (i < Integer.valueOf(num)) {
int a = Integer.valueOf(num) - i;
BigDecimal price2 = productPrice.multiply(new BigDecimal(a)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price2);
// onePrice = onePrice.add(price2);
priceMap.put(price2, a);
}
for (BigDecimal priceKey : priceMap.keySet()) {
note.append(productNamea).append("-").append(product.getNo()).append("-").append(RandomUtil.randomNumbers(5)).append(":");
note.append(priceKey).append("-").append(priceMap.get(priceKey)).append(",");
}
} else {
//1,type=0,原始设定,没有第二件半价
int a = Integer.valueOf(num);
BigDecimal price2 = productPrice.multiply(new BigDecimal(a)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price2);
note.append(productNamea).append("-").append(product.getNo()).append(":");
note.append(price2).append("-").append(num).append(",");
}
}
} else {
//2,type=1,第二件半价
//2.1 判定是否有第二件,有多少个第二件半价
for (String key : productNameMap.keySet()) {
String[] productNum = key.split("-");
String productNamea = productNum[0];
String num = productNum[1];
productMap.put(productNamea, Integer.valueOf(num));
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), productNamea));
productNo = product.getNo();
BigDecimal productPrice = product.getRmbPrice();
productName.append(productNamea).append("x").append(num).append(",");
note.append(productNamea).append("-").append(product.getNo()).append(":");
switch (num) {
case "1":
//1个 0个半价
price = price.add(productPrice);
note.append(price).append("-").append(num).append(",");
break;
case "2":
//2个 1个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
note.append(price).append("-").append(num).append(",");
break;
case "3":
//3个 1个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
note.append(price).append("-").append(num).append(",");
break;
case "4":
//4个 2个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
note.append(price).append("-").append(num).append(",");
break;
case "5":
//5个 2个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
note.append(price).append("-").append(num).append(",");
break;
}
}
}
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
//查找商品
if (BigDecimal.ZERO.compareTo(price) == 0) {
return JsonMessage.success("0");
}
if (BigDecimal.ZERO.compareTo(price) > 0) {
return JsonMessage.error("商品价格异常");
}
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn1 = orderService.initSn(client6);
String sn2 = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo1 = sn1;
String orderNo2 = sn2;
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
String openId = null;
String authCode = null;
String appid = null;
String transactionModel = null;
String tradeMerchantNo = admin.getTradeMerchantNo();
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
BigDecimal marketingAmount = null;
String frpCode1 = "WEIXIN_NATIVE";
String frpCode2 = "ALIPAY_NATIVE";
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn1);
// 去掉后面的逗号
order.setProductNo(productNo);
if (productNumber == 1) {
productName.delete(productName.length() - 3, productName.length());
} else {
productName.deleteCharAt(productName.length() - 1);
}
order.setProductName(productName.toString());
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode1);
order.setAltInfo(altInfo.toString());
order.setProductNumber(productNumber);
order.setStatus(0);
order.setType(admin.getType());
order.setCompanyType(companyType);
order.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setIsSettlement("0");
}
order.setNote(note.toString());
TOrder order2 = new TOrder();
order2.setId(IDGenerator.orderID());
order2.setCreateDate(new Date());
order2.setModifyDate(new Date());
order2.setAdminId(admin.getId());
order2.setSn(sn2);
order2.setProductName(productName.toString());
order2.setProductNo(productNo);
order2.setPrice(price);
order2.setClientId(equipment.getClientId());
order2.setEquipmentId(equipmentId);
order2.setFrpCode(frpCode2);
order2.setAltInfo(altInfo.toString());
order2.setStatus(0);
order2.setProductNumber(productNumber);
order2.setType(admin.getType());
order2.setCompanyType(companyType);
order2.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
order2.setPersonageProportion(proportion.getPersonageProportion());
order2.setPersonageId(proportion.getPersonageId());
}
order2.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order2.setIsSettlement("0");
}
order2.setNote(note.toString());
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setCompanyType(companyType);
orderDetails.setRefundStatus("0");
orderDetails.setMachineType(equipment.getMachineType());
String productName1 = "";
if (productNumber > 1) {
if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
productName1 = "棉花糖-" + equipment.getName() + "-" + client6;
} else {
productName1 = "爆米花-" + equipment.getName() + "-" + client6;
}
} else {
productName1 = productName + "-" + equipment.getName() + "-" + client6;
}
Map map = new HashMap<>();
String[] products = order.getNote().split(",");
for (String product : products) {
String[] parts = product.split(":");
// 商品名称-商品编号
String key = parts[0];
// 商品单价-商品数量
String value = parts[1];
map.put(key, value);
}
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
// 汇付分账参数
order.setAcctSplitBunch(acctSplitBunch.toString());
order2.setAcctSplitBunch(acctSplitBunch.toString());
//添加到汇付临时表,微信
// THuifuTempOrder tHuifuTempOrder = new THuifuTempOrder();
// String[] ignoreProperties = {"id"};
// String id = HuifuUtils.inithuifuTempId();
// tHuifuTempOrder.setId(id);
// BeanUtil.copyProperties(order, tHuifuTempOrder, ignoreProperties);
// huifuTempOrderService.save(tHuifuTempOrder);
// if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
// result1 = HuifuConstant.SC_JUMP_URL + "/#/weChatPay?id=" + id;
// } else {
// result1 = HuifuConstant.SZ_JUMP_URL + "/#/weChatPay?id=" + id;
// }
String result1 = "";
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
result1 = HuifuConstant.SC_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
} else {
result1 = HuifuConstant.SZ_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
}
try {
result1 = URLEncoder.encode(result1, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 支付宝
try {
result = huifuMchService.uniPay(
sn2, amount, productName1, productDesc,
notifyUrl, frpCode2, openId, appid, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
if (StrUtil.isEmpty(result)) {
return JsonMessage.error("找不到支付图片");
}
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://sz.sunzee.com.cn/PAY-SERVER/tOrder/aliPay?zfb=" + result + "&wx=" + result1;
String qrcode = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", qrcode);
for (String key : map.keySet()) {
// key:"玫瑰精灵-A01",value:"0.50-1"
String value = map.get(key);
String[] GoodsInfo = key.split("-");
String[] GoodsValue = value.split("-");
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setProductName(GoodsInfo[0]);
orderDetails.setProductNo(GoodsInfo[1]);
orderDetails.setPrice(new BigDecimal(GoodsValue[0]).divide(new BigDecimal(GoodsValue[1])).setScale(2));
orderDetails.setProductNumber(Integer.valueOf(GoodsValue[1]));
orderDetails.setAmount(new BigDecimal(GoodsValue[0]).setScale(2));
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn1);
orderDetailsService.save(orderDetails);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn2);
orderDetailsService.save(orderDetails);
}
orderService.save(order);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
} else {
try {
result = joinpayMchService.uniPay(
orderNo1, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode1,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
String rc_Result1 = resultJson.getString("rc_Result");
String result1 = null;
try {
result1 = joinpayMchService.uniPay(
orderNo2, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode2,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson1 = JSONObject.parseObject(result1);
String rc_Result2 = resultJson1.getString("rc_Result");
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://app.sunzee.com.cn/" + "/api/order/aliPay.htm?wx=" + rc_Result1 + "&zfb=" + rc_Result2;
String rd_Pic = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", rd_Pic);
for (String key : map.keySet()) {
// key:"玫瑰精灵-A01",value:"0.50-1"
String value = map.get(key);
String[] GoodsInfo = key.split("-");
String[] GoodsValue = value.split("-");
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setProductName(GoodsInfo[0]);
orderDetails.setProductNo(GoodsInfo[1]);
orderDetails.setPrice(new BigDecimal(GoodsValue[0]).divide(new BigDecimal(GoodsValue[1])).setScale(2));
orderDetails.setProductNumber(Integer.valueOf(GoodsValue[1]));
orderDetails.setAmount(new BigDecimal(GoodsValue[0]).setScale(2));
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn1);
orderDetailsService.save(orderDetails);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn2);
orderDetailsService.save(orderDetails);
}
orderService.save(order);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
}
}
@ApiOperation(value = "购物车 微信小程序支付")
@PostMapping("/carsPayXCX")
public Object carsPayXCX(String clientId, String id, String coupons, @RequestBody Map productNameMap) {
if (productNameMap == null) {
return JsonMessage.error("数据出错");
}
StringBuffer note = new StringBuffer();
StringBuffer productName = new StringBuffer();
String productNo = "";
Map productMap = new HashMap<>();
Integer productNumber = 0;
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
BigDecimal price = new BigDecimal("0.00");
List promoCodeAll = new ArrayList<>();
TEquipmentDesc equipmentDesc = R.getDataIfSuccess(szwlFeign.findEquipmentById(equipment.getId()));
if (StringUtils.isNotEmpty(equipmentDesc.getStatus())) {
if (equipmentDesc.getStatus().equals("1")) {
return JsonMessage.error("设备在做糖,请稍后再进行支付");
}
}
if (equipmentDesc == null || equipmentDesc.getEquipmentId() == null || equipmentDesc.getPayType() == null || equipmentDesc.getPayType().equals("0")) {
//1,type=0,原始设定,没有第二件半价
for (String key : productNameMap.keySet()) {
String entryValue = String.valueOf(productNameMap.get(key));
List value = JSON.parseArray(entryValue, String.class);
List promoCodeList = new ArrayList<>();
//1,校验优惠码
if (value.size() > 0) {
for (String code : value) {
if (!code.equals("0")) {
TPromoCode promoCode = new TPromoCode();
ResponseModel promoCode1 = szwlFeign.getPromoCode(code + "-" + equipment.getAdminId().toString());
TPromoCode tPromoCode = promoCode1.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
//
Date lastUseDate = null;
if (promoCode != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
//0折
return JsonMessage.success("0");
}
promoCodeList.add(promoCode);
promoCodeAll.add(promoCode);
}
}
}
String[] productNum = key.split("-");
String productNamea = productNum[0];
String num = productNum[1];
productMap.put(productNamea, Integer.valueOf(num));
productNumber += Integer.valueOf(num);
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), productNamea));
productNo = product.getNo();
if (product == null) {
return JsonMessage.error("找不到商品");
}
productName.append(productNamea).append("x").append(num).append(",");
String no = product.getNo();
if (StringUtils.isEmpty(no)) {
no = "A00";
}
note.append(no).append("-").append(productNamea).append("-").append(num).append(":");
//确定价格,然后叠加R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
BigDecimal productPrice = product.getRmbPrice();
if (promoCodeList.size() > 0) {
//有优惠码
BigDecimal onePrice = new BigDecimal("0.00");
int i;
for (i = 0; i < promoCodeList.size(); i++) {
TPromoCode tPromoCode = promoCodeList.get(i);
BigDecimal discount = BigDecimal.valueOf(tPromoCode.getDiscount()).setScale(2, RoundingMode.HALF_DOWN);
if (StringUtils.isEmpty(tPromoCode.getType()) || tPromoCode.getType().equals("0")) {
//折扣优惠码
BigDecimal price1 = productPrice.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price1);
onePrice = onePrice.add(price1);
} else {
//折扣价优惠码
BigDecimal price1 = productPrice.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price1);
onePrice = onePrice.add(price1);
}
}
if (i < Integer.valueOf(num)) {
int a = Integer.valueOf(num) - i;
BigDecimal price2 = productPrice.multiply(new BigDecimal(a)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price2);
onePrice = onePrice.add(price2);
}
note.append(onePrice).append(",");
} else {
//1,type=0,原始设定,没有第二件半价
int a = Integer.valueOf(num);
BigDecimal price2 = productPrice.multiply(new BigDecimal(a)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price2);
note.append(price2).append(",");
}
}
} else {
//2,type=1,第二件半价
//2.1 判定是否有第二件,有多少个第二件半价
for (String key : productNameMap.keySet()) {
String entryValue = String.valueOf(productNameMap.get(key));
List value = JSON.parseArray(entryValue, String.class);
String[] productNum = key.split("-");
String productNamea = productNum[0];
String num = productNum[1];
productMap.put(productNamea, Integer.valueOf(num));
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), productNamea));
productNo = product.getNo();
BigDecimal productPrice = product.getRmbPrice();
productName.append(productNamea).append("x").append(num).append(",");
note.append(productNamea).append(num).append(":");
switch (num) {
case "1":
//1个 0个半价
price = price.add(productPrice);
note.append(price).append(",");
break;
case "2":
//2个 1个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
note.append(price).append(",");
break;
case "3":
//3个 1个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
note.append(price).append(",");
break;
case "4":
//4个 2个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
note.append(price).append(",");
break;
case "5":
//5个 2个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
note.append(price).append(",");
break;
}
}
}
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
//查找商品
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn1 = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo1 = sn1;
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
TSzsmWx szsmWx = szsmWxService.getById(id);
String openId = szsmWx.getOpenId();
String authCode = null;
String appid = "wx5071443e63295c29";
String transactionModel = null;
String tradeMerchantNo = "777114600391409";
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
BigDecimal priceTemp = price.setScale(2, RoundingMode.HALF_DOWN);
List yhjList = new ArrayList<>();
if (StringUtils.isNotEmpty(coupons)) {
String[] cous = coupons.split(",");
if (cous.length > 0) {
for (int i = 0; i < cous.length; i++) {
if (StringUtils.isNotEmpty(cous[i])) {
TPromoCode yhj = R.getDataIfSuccess(szwlFeign.getYHJ(cous[i]));
if (yhj != null && yhj.getId() != null) {
String isUse = yhj.getIsUse();
if (isUse.equals("1")) {
return R.ok(yhj.getCode(), "优惠券已使用");
}
Date lastUseDate = yhj.getLastUseDate();
Date date = new Date();
if (date.getTime() > lastUseDate.getTime()) {
return R.ok(yhj.getCode(), "优惠券已过期");
}
yhjList.add(yhj);
}
}
}
}
}
List couponList = new ArrayList<>();
//营销金额
BigDecimal marketingAmount = null;
if (yhjList.size() > 0) {
for (TPromoCode yhj : yhjList) {
if (yhj != null && yhj.getId() != null) {
if (marketingAmount == null) {
marketingAmount = new BigDecimal("0.00");
}
marketingAmount = marketingAmount.add(new BigDecimal(yhj.getDiscount()).setScale(2, RoundingMode.HALF_DOWN));
couponList.add(String.valueOf(yhj.getCode()));
if (marketingAmount.compareTo(price) >= 0) {
marketingAmount = priceTemp.subtract(new BigDecimal("0.01"));
price = new BigDecimal("0.01").setScale(2, RoundingMode.HALF_DOWN);
break;
} else {
price = price.subtract(marketingAmount);
}
}
}
}
String frpCode1 = "WEIXIN_XCX";
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn1);
order.setProductDesc(JSONArray.toJSONString(productNameMap));
// 去掉后面的逗号
order.setProductNo(productNo);
if (productNumber == 1) {
productName.delete(productName.length() - 3, productName.length());
} else {
productName.deleteCharAt(productName.length() - 1);
}
order.setProductName(productName.toString());
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode1);
order.setAltInfo(altInfo.toString());
order.setStatus(0);
order.setType(admin.getType());
order.setMarketingAmount(marketingAmount);
order.setProductNumber(productNumber);
order.setCompanyType(companyType);
order.setMachineType(equipment.getMachineType());
if (couponList.size() > 0) {
order.setCoupons(couponList.toString());
}
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setIsSettlement("0");
}
order.setNote(note.toString());
if (StringUtils.isNotEmpty(id)) {
order.setWxId(Long.valueOf(id));
}
if (BigDecimal.ZERO.compareTo(price) >= 0) {
order.setStatus(1);
orderService.updateById(order);
//修改优惠码状态
if (promoCodeAll.size() > 0) {
for (TPromoCode code : promoCodeAll) {
szwlFeign.updatePromoCode(String.valueOf(code.getId()), "2");
}
}
//发送远程命令到机器那边,让机器做糖
equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("cardPayXCX", String.valueOf(productNameMap)).toString());
return JsonMessage.success("支付成功");
}
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setCompanyType(companyType);
orderDetails.setRefundStatus("0");
orderDetails.setMachineType(equipment.getMachineType());
// String client6 = clientId.substring(clientId.length() - 6);
String productName1 = "";
if (productNumber > 1) {
if (equipment.getMachineType() == null || equipment.getMachineType().equals("0")) {
productName1 = "棉花糖-" + equipment.getName() + "-" + client6;
} else {
productName1 = "爆米花-" + equipment.getName() + "-" + client6;
}
} else {
productName1 = productName + "-" + equipment.getName() + "-" + client6;
}
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setAcctSplitBunch(acctSplitBunch.toString());
try {
result = huifuMchService.uniPay(
orderNo1, amount, productName1, productDesc,
notifyUrl, frpCode1, openId, appid, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
// 返回支付二维码图片
if (result == null || StringUtils.isBlank(result)) {
return JsonMessage.error("申请支付失败");
}
Map map = new HashMap<>();
map.put("sn", sn1);
map.put("rc_Result", result);
for (String key : productMap.keySet()) {
Integer productNum = productMap.get(key);
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), key));
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setProductNo(product.getNo());
orderDetails.setProductName(key);
orderDetails.setPrice(product.getRmbPrice());
orderDetails.setProductNumber(productNum);
orderDetails.setAmount(product.getRmbPrice().multiply(new BigDecimal(productNum)));
orderDetails.setOrderSn(sn1);
orderDetailsService.save(orderDetails);
}
orderService.save(order);
return JsonMessage.success(map);
} else {
try {
result = joinpayMchService.uniPay(
orderNo1, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode1,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
// 汇聚支付支付申请返回支付二维码图片
String rc_Result = resultJson.getString("rc_Result");
if (resultJson == null || StringUtils.isBlank(rc_Result)) {
return JsonMessage.error("申请支付失败");
}
Map map = new HashMap<>();
map.put("sn", sn1);
map.put("rc_Result", rc_Result);
for (String key : productMap.keySet()) {
Integer productNum = productMap.get(key);
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), key));
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setProductNo(product.getNo());
orderDetails.setProductName(key);
orderDetails.setPrice(product.getRmbPrice());
orderDetails.setProductNumber(productNum);
orderDetails.setAmount(product.getRmbPrice().multiply(new BigDecimal(productNum)));
orderDetails.setOrderSn(sn1);
orderDetailsService.save(orderDetails);
}
orderService.save(order);
return JsonMessage.success(map);
}
}
/**
* 冰淇淋请求在线支付 主扫 优惠码 二码合一
*
* @param clientId 设备唯一编号
* @param productName 商品名称:"冰淇淋-草莓酱,榛子碎"
* @return
*/
@ApiOperation(value = "请求在线支付 二码合一")
@GetMapping("/iceCreamTwoPay")
public Object iceCreamTwoPay(String code, String clientId, String productName) {
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
//验证优惠码 code=null 则不选用优惠码
TPromoCode promoCode = new TPromoCode();
if (StringUtils.isEmpty(code)) {
//没有优惠码
} else {
//有优惠码,需要对优惠码进行验证
ResponseModel tPromoCodeResponseModel = szwlFeign.selectTPromoCode(code, equipment.getAdminId().toString());
TPromoCode tPromoCode = tPromoCodeResponseModel.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
Date lastUseDate = null;
if (promoCode != null && promoCode.getId() != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
//0折
return JsonMessage.success("0");
}
}
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
// 查找商品
String[] split = productName.split("-");
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), split[0]));
if (product == null) {
return JsonMessage.error("找不到商品");
}
// 处理后的商品名称
String newProductName = split[0];
// 冰淇淋价格
BigDecimal price = product.getRmbPrice();
// 商品ID
Long productId = product.getId();
// 冰淇淋编号
String productNo = product.getNo();
// 如果添加其他果酱和小料
if (split.length > 1) {
String[] split1 = split[1].split(",");
String tempName = "(";
for (String s : split1) {
TProduct product1 = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), s));
if (product1 == null) {
return JsonMessage.error("找不到商品");
}
tempName = tempName + s + "、";
price = price.add(product1.getRmbPrice());
}
tempName = tempName.substring(0, tempName.length() - 1) + ")";
newProductName += tempName;
}
if (StringUtils.isNotEmpty(code)) {
BigDecimal discount = BigDecimal.valueOf(promoCode.getDiscount());
if (StringUtils.isNotEmpty(promoCode.getType()) && promoCode.getType().equals("1")) {
if (price.compareTo(discount) > 0) {
// 如果 price 大于 discount,从 price 中减去 discount
price = price.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
} else {
// 如果 price 小于等于 discount,将 price 设置为 0
// price = BigDecimal.ZERO;
return JsonMessage.success("0");
}
} else {
price = price.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
}
}
if (BigDecimal.ZERO.compareTo(price) >= 0) {
return JsonMessage.error("商品价格异常");
}
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn1 = orderService.initSn(client6);
String sn2 = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo1 = sn1;
String orderNo2 = sn2;
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
String openId = null;
String authCode = null;
String appid = null;
String transactionModel = null;
String tradeMerchantNo = admin.getTradeMerchantNo();
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
BigDecimal marketingAmount = null;
String frpCode1 = "WEIXIN_NATIVE";
String frpCode2 = "ALIPAY_NATIVE";
Integer productNumber = 1;
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn1);
order.setProductId(productId);
order.setProductNo(productNo);
order.setProductName(newProductName);
order.setProductNumber(productNumber);
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode1);
order.setAltInfo(altInfo.toString());
order.setStatus(0);
order.setType(admin.getType());
order.setCompanyType(companyType);
order.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setIsSettlement("0");
}
TOrder order2 = new TOrder();
order2.setId(IDGenerator.orderID());
order2.setCreateDate(new Date());
order2.setModifyDate(new Date());
order2.setAdminId(admin.getId());
order2.setSn(sn2);
order2.setProductId(productId);
order2.setProductNo(productNo);
order2.setProductName(newProductName);
order2.setProductNumber(productNumber);
order2.setPrice(price);
order2.setClientId(equipment.getClientId());
order2.setEquipmentId(equipmentId);
order2.setFrpCode(frpCode2);
order2.setAltInfo(altInfo.toString());
order2.setStatus(0);
order2.setType(admin.getType());
order2.setPayPlatform(payPlatform);
order2.setCompanyType(companyType);
order2.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
order2.setPersonageProportion(proportion.getPersonageProportion());
order2.setPersonageId(proportion.getPersonageId());
}
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order2.setIsSettlement("0");
}
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setPrice(price);
orderDetails.setProductName(newProductName);
orderDetails.setProductNo(productNo);
orderDetails.setProductNumber(productNumber);
orderDetails.setAmount(price);
orderDetails.setCompanyType(companyType);
orderDetails.setRefundStatus("0");
orderDetails.setMachineType(equipment.getMachineType());
// String client6 = clientId.substring(clientId.length() - 6);
String productName1 = "雪糕" + "-" + equipment.getName() + "-" + client6;
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
// 汇付分账参数
order.setAcctSplitBunch(acctSplitBunch.toString());
order2.setAcctSplitBunch(acctSplitBunch.toString());
//添加到汇付临时表,微信
// THuifuTempOrder tHuifuTempOrder = new THuifuTempOrder();
// String[] ignoreProperties = {"id"};
// String id = HuifuUtils.inithuifuTempId();
// tHuifuTempOrder.setId(id);
// BeanUtil.copyProperties(order, tHuifuTempOrder, ignoreProperties);
// huifuTempOrderService.save(tHuifuTempOrder);
// if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
// result1 = HuifuConstant.SC_JUMP_URL + "/#/weChatPay?id=" + id;
// } else {
// result1 = HuifuConstant.SZ_JUMP_URL + "/#/weChatPay?id=" + id;
// }
String result1 = "";
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
result1 = HuifuConstant.SC_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
} else {
result1 = HuifuConstant.SZ_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
}
try {
result1 = URLEncoder.encode(result1, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 支付宝
try {
result = huifuMchService.uniPay(
sn2, amount, productName1, productDesc,
notifyUrl, frpCode2, openId, appid, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
if (StrUtil.isEmpty(result)) {
return JsonMessage.error("找不到支付图片");
}
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://sz.sunzee.com.cn/PAY-SERVER/tOrder/aliPay?zfb=" + result + "&wx=" + result1;
String qrcode = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", qrcode);
orderService.save(order);
orderDetails.setOrderSn(sn1);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderDetails.setOrderSn(sn2);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
} else {
try {
result = joinpayMchService.uniPay(
orderNo1, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode1,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
String rc_Result1 = resultJson.getString("rc_Result");
String result1 = null;
try {
result1 = joinpayMchService.uniPay(
orderNo2, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode2,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson1 = JSONObject.parseObject(result1);
String rc_Result2 = resultJson1.getString("rc_Result");
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://sz.sunzee.com.cn/PAY-SERVER/tOrder/" + "aliPay?wx=" + rc_Result1 + "&zfb=" + rc_Result2;
String rd_Pic = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", rd_Pic);
orderService.save(order);
orderDetails.setOrderSn(sn1);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderDetails.setOrderSn(sn2);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetailsService.save(orderDetails);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
}
}
/**
* 冰淇淋购物车支付
*
* @param clientId 设备唯一编号
* @param productNameMap 商品信息:"冰淇淋-草莓酱,榛子碎-2": "[\"562278\",\"0\"]"
* @return
*/
@ApiOperation(value = "购物车 请求在线支付 二码合一")
@PostMapping("/iceCreamCarsPay")
public Object iceCreamCarsPay(String clientId, @RequestBody Map productNameMap) {
if (productNameMap == null) {
return JsonMessage.error("数据出错");
}
StringBuffer note = new StringBuffer();
StringBuffer productName = new StringBuffer();
String productNo = "";
Map productMap = new HashMap<>();
Integer productNumber = 0;
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null || equipment.getId() == null) {
return JsonMessage.error("找不到设备");
}
BigDecimal price = new BigDecimal("0.00");
TEquipmentDesc equipmentDesc = R.getDataIfSuccess(szwlFeign.findEquipmentById(equipment.getId()));
if (equipmentDesc == null || equipmentDesc.getEquipmentId() == null || equipmentDesc.getPayType() == null || equipmentDesc.getPayType().equals("0")) {
// 1、type=0,原始设定,没有第二件半价
for (String key : productNameMap.keySet()) {
String entryValue = String.valueOf(productNameMap.get(key));
List value = JSON.parseArray(entryValue, String.class);
boolean hasDuplicate = hasDuplicateValue(value);
if (hasDuplicate) {
return JsonMessage.error("优惠码输入重复,单个商品只能使用一个优惠码");
}
List promoCodeList = new ArrayList<>();
// 1、校验优惠码
if (value.size() > 0) {
for (String code : value) {
if (!code.equals("0")) {
TPromoCode promoCode;
ResponseModel tPromoCodeResponseModel = szwlFeign.selectTPromoCode(code, equipment.getAdminId().toString());
TPromoCode tPromoCode = tPromoCodeResponseModel.getData();
promoCode = tPromoCode;
if (tPromoCode == null || tPromoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
Date lastUseDate = null;
if (promoCode != null) {
lastUseDate = promoCode.getLastUseDate();
}
if (lastUseDate != null && lastUseDate.getTime() < ((new Date()).getTime())) {
promoCode.setIsUse("2");
szwlFeign.updatePromoCode(String.valueOf(promoCode.getId()), "2");
//过期
return JsonMessage.success("4");
}
if (promoCode.getId() == null) {
//不存在
return JsonMessage.success("1");
}
if (promoCode.getIsUse().equals("1")) {
//被使用
return JsonMessage.success("2");
}
if (!promoCode.getAdminId().equals("1")) {
if (String.valueOf(equipment.getAdminId()).equals(promoCode.getAdminId())) {
} else {
//不是本机
return JsonMessage.success("3");
}
}
if (promoCode.getDiscount() == null) {
//旧优惠码
return JsonMessage.success("0");
}
// if (promoCode.getDiscount() != null && promoCode.getDiscount() == 0) {
// //0折
// return JsonMessage.success("0");
// }
promoCodeList.add(promoCode);
}
}
}
String[] products = key.split("-");
String iceCreamName = products[0];
String num = products[1];
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), iceCreamName));
if (product == null) {
return JsonMessage.error("找不到商品");
}
productNo = product.getNo();
BigDecimal productPrice = product.getRmbPrice();
// 如果加了果酱或者小料
if (products.length > 2) {
// 商品数
num = products[2];
// 加料
String[] charge = products[1].split(",");
String tempName = "(";
for (String s : charge) {
TProduct product1 = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), s));
if (product1 == null) {
return JsonMessage.error("找不到商品");
}
tempName = tempName + s + "、";
productPrice = productPrice.add(product1.getRmbPrice());
}
tempName = tempName.substring(0, tempName.length() - 1) + ")";
iceCreamName += tempName;
}
productMap.put(iceCreamName + "-" + productPrice, Integer.valueOf(num));
productNumber += Integer.valueOf(num);
productName.append(iceCreamName).append("x").append(num).append(",");
//确定价格,然后叠加
note.append(iceCreamName).append("-").append(product.getNo()).append(":");
if (promoCodeList.size() > 0) {
//有优惠码
BigDecimal onePrice = new BigDecimal("0.00");
Map priceMap = new HashMap<>();
int i;
for (i = 0; i < promoCodeList.size(); i++) {
BigDecimal discount = BigDecimal.valueOf(promoCodeList.get(i).getDiscount()).setScale(2, RoundingMode.HALF_DOWN);
BigDecimal price1 = new BigDecimal(0.0);
TPromoCode tPromoCode = promoCodeList.get(i);
if (StringUtils.isNotEmpty(tPromoCode.getType()) && tPromoCode.getType().equals("1")) {
if (productPrice.compareTo(discount) > 0) {
// 如果 price 大于 discount,从 price 中减去 discount
price1 = productPrice.subtract(discount).setScale(2, RoundingMode.HALF_DOWN);
} else {
// 如果 price 小于等于 discount,将 price 设置为 0
price1 = BigDecimal.ZERO;
}
} else {
if (tPromoCode.getDiscount() == 0) {
price1 = BigDecimal.ZERO;
} else {
price1 = productPrice.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
}
}
// BigDecimal price1 = productPrice.multiply(discount).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price1);
onePrice = onePrice.add(price1);
}
if (i < Integer.valueOf(num)) {
int a = Integer.valueOf(num) - i;
BigDecimal price2 = productPrice.multiply(new BigDecimal(a)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price2);
onePrice = onePrice.add(price2);
}
note.append(onePrice).append("-").append(num).append(",");
} else {
//1,type=0,原始设定,没有第二件半价
int a = Integer.valueOf(num);
BigDecimal price2 = productPrice.multiply(new BigDecimal(a)).setScale(2, RoundingMode.HALF_DOWN);
price = price.add(price2);
note.append(price2).append("-").append(num).append(",");
}
}
} else {
//2,type=1,第二件半价
//2.1 判定是否有第二件,有多少个第二件半价
for (String key : productNameMap.keySet()) {
String[] products = key.split("-");
String iceCreamName = products[0];
String num = products[1];
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), iceCreamName));
if (product == null) {
return JsonMessage.error("找不到商品");
}
productNo = product.getNo();
BigDecimal productPrice = product.getRmbPrice();
// 如果加了果酱或者小料
if (products.length > 2) {
// 商品数
num = products[2];
// 加料
String[] charge = products[1].split(",");
String tempName = "(";
for (String s : charge) {
TProduct product1 = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipment.getId()), s));
if (product1 == null) {
return JsonMessage.error("找不到商品");
}
tempName = tempName + s + "、";
productPrice = productPrice.add(product1.getRmbPrice());
}
tempName = tempName.substring(0, tempName.length() - 1) + ")";
iceCreamName += tempName;
}
productMap.put(iceCreamName + "-" + productPrice, Integer.valueOf(num));
productName.append(iceCreamName).append("x").append(num).append(",");
note.append(iceCreamName).append("-").append(product.getNo()).append(":");
switch (num) {
case "1":
//1个 0个半价
price = price.add(productPrice);
note.append(price).append("-").append(num).append(",");
break;
case "2":
//2个 1个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
note.append(price).append("-").append(num).append(",");
break;
case "3":
//3个 1个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
note.append(price).append("-").append(num).append(",");
break;
case "4":
//4个 2个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
note.append(price).append("-").append(num).append(",");
break;
case "5":
//5个 2个半价
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
price = price.add(productPrice.multiply(new BigDecimal(5)).divide(new BigDecimal(10)).setScale(2, RoundingMode.HALF_DOWN));
price = price.add(productPrice);
note.append(price).append("-").append(num).append(",");
break;
}
}
}
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
//查找商品
if (BigDecimal.ZERO.compareTo(price) == 0) {
return JsonMessage.success("0");
}
if (BigDecimal.ZERO.compareTo(price) > 0) {
return JsonMessage.error("商品价格异常");
}
Long client6 = Long.parseLong(clientId.substring(clientId.length() - 6));
String sn1 = orderService.initSn(client6);
String sn2 = orderService.initSn(client6);
// 获取关联设备的分销
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipmentId)));
if (proportion == null || proportion.getId() == null) {
return JsonMessage.error("设备商家未完成分销设置");
}
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
// 支付方式:0或null为汇聚,1为汇付支付
String payPlatform = admin.getPayPlatform();
String companyType = admin.getCompanyType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
// 汇付分账明细参数
JSONObject acctSplitBunch = new JSONObject();
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
acctSplitBunch = getAcctSplitBunch(proportion, price, companyType);
if (!(acctSplitBunch.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
} else {
altInfo = getAltInfo(proportion, price);
if (!(altInfo.size() > 0)) {
return JsonMessage.error("设备商家未注册结算账号");
}
}
String orderNo1 = sn1;
String orderNo2 = sn2;
BigDecimal amount = price.setScale(2, RoundingMode.HALF_DOWN);
String productDesc = "";
String commonParameter = "";
String returnUrl = null;
String notifyUrl = JoinpayConstant.Notify_Url;
String isShowPic = "1";
String openId = null;
String authCode = null;
String appid = null;
String transactionModel = null;
String tradeMerchantNo = admin.getTradeMerchantNo();
String buyerId = null;
String isAlt = "1";
String altType = "11";
String altUrl = null;
BigDecimal marketingAmount = null;
String frpCode1 = "WEIXIN_NATIVE";
String frpCode2 = "ALIPAY_NATIVE";
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn1);
// 去掉后面的逗号
order.setProductNo(productNo);
if (productNumber == 1) {
productName.delete(productName.length() - 3, productName.length());
} else {
productName.deleteCharAt(productName.length() - 1);
}
order.setProductName(productName.toString());
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setFrpCode(frpCode1);
order.setAltInfo(altInfo.toString());
order.setProductNumber(productNumber);
order.setStatus(0);
order.setType(admin.getType());
order.setCompanyType(companyType);
order.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order.setAdminProportion(proportion.getProportion());
order.setAgencyProportion(proportion.getAgencyProportion());
order.setAgencyId(proportion.getAgencyId());
order.setMerchantProportion(proportion.getMerchantProportion());
order.setMerchantId(proportion.getMerchantId());
order.setPersonageProportion(proportion.getPersonageProportion());
order.setPersonageId(proportion.getPersonageId());
}
order.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order.setIsSettlement("0");
}
order.setNote(note.toString());
TOrder order2 = new TOrder();
order2.setId(IDGenerator.orderID());
order2.setCreateDate(new Date());
order2.setModifyDate(new Date());
order2.setAdminId(admin.getId());
order2.setSn(sn2);
order2.setProductName(productName.toString());
order2.setProductNo(productNo);
order2.setPrice(price);
order2.setClientId(equipment.getClientId());
order2.setEquipmentId(equipmentId);
order2.setFrpCode(frpCode2);
order2.setAltInfo(altInfo.toString());
order2.setStatus(0);
order2.setProductNumber(productNumber);
order2.setType(admin.getType());
order2.setCompanyType(companyType);
order2.setMachineType(equipment.getMachineType());
if (admin.getType() == 0) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
}
if (admin.getType() == 1) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
}
if (admin.getType() == 2) {
order2.setAdminProportion(proportion.getProportion());
order2.setAgencyProportion(proportion.getAgencyProportion());
order2.setAgencyId(proportion.getAgencyId());
order2.setMerchantProportion(proportion.getMerchantProportion());
order2.setMerchantId(proportion.getMerchantId());
order2.setPersonageProportion(proportion.getPersonageProportion());
order2.setPersonageId(proportion.getPersonageId());
}
order2.setPayPlatform(payPlatform);
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
order2.setIsSettlement("0");
}
order2.setNote(note.toString());
// 订单明细表
TOrderDetails orderDetails = new TOrderDetails();
orderDetails.setAdminId(admin.getId());
orderDetails.setEquipmentId(equipmentId);
orderDetails.setCreateDate(new Date());
orderDetails.setCompanyType(companyType);
orderDetails.setRefundStatus("0");
orderDetails.setMachineType(equipment.getMachineType());
String productName1 = "雪糕x" + productNumber + "-" + equipment.getName() + "-" + client6;
Map map = new HashMap<>();
String[] products = order.getNote().split(",");
for (String product : products) {
String[] parts = product.split(":");
// 商品名称-商品编号
String key = parts[0];
// 商品单价-商品数量
String value = parts[1];
map.put(key, value);
}
String result = null;
if (StringUtils.isNotEmpty(payPlatform) && payPlatform.equals("1")) {
// 汇付分账参数
order.setAcctSplitBunch(acctSplitBunch.toString());
order2.setAcctSplitBunch(acctSplitBunch.toString());
//添加到汇付临时表,微信
// THuifuTempOrder tHuifuTempOrder = new THuifuTempOrder();
// String[] ignoreProperties = {"id"};
// String id = HuifuUtils.inithuifuTempId();
// tHuifuTempOrder.setId(id);
// BeanUtil.copyProperties(order, tHuifuTempOrder, ignoreProperties);
// huifuTempOrderService.save(tHuifuTempOrder);
// if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
// result1 = HuifuConstant.SC_JUMP_URL + "/#/weChatPay?id=" + id;
// } else {
// result1 = HuifuConstant.SZ_JUMP_URL + "/#/weChatPay?id=" + id;
// }
String result1 = "";
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
result1 = HuifuConstant.SC_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
} else {
result1 = HuifuConstant.SZ_WECHAT_URL + "?price=" + price + "&sn=" + sn1;
}
try {
result1 = URLEncoder.encode(result1, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 支付宝
try {
result = huifuMchService.uniPay(
sn2, amount, productName1, productDesc,
notifyUrl, frpCode2, openId, appid, acctSplitBunch, companyType
);
} catch (Exception e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
if (StrUtil.isEmpty(result)) {
return JsonMessage.error("找不到支付图片");
}
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://sz.sunzee.com.cn/PAY-SERVER/tOrder/aliPay?zfb=" + result + "&wx=" + result1;
String qrcode = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", qrcode);
for (String key : map.keySet()) {
String value = map.get(key);
String[] GoodsInfo = key.split("-");
String[] GoodsValue = value.split("-");
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setProductName(GoodsInfo[0]);
orderDetails.setProductNo(GoodsInfo[1]);
orderDetails.setPrice(new BigDecimal(GoodsValue[0]).divide(new BigDecimal(GoodsValue[1])).setScale(2));
orderDetails.setProductNumber(Integer.valueOf(GoodsValue[1]));
orderDetails.setAmount(new BigDecimal(GoodsValue[0]).setScale(2));
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn1);
orderDetailsService.save(orderDetails);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn2);
orderDetailsService.save(orderDetails);
}
orderService.save(order);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
} else {
try {
result = joinpayMchService.uniPay(
orderNo1, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode1,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson = JSONObject.parseObject(result);
String rc_Result1 = resultJson.getString("rc_Result");
String result1 = null;
try {
result1 = joinpayMchService.uniPay(
orderNo2, amount, productName1, productDesc,
commonParameter, returnUrl, notifyUrl, frpCode2,
isShowPic, openId, authCode, appid, transactionModel, tradeMerchantNo,
buyerId, isAlt, altType, altInfo, altUrl, marketingAmount
);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return JsonMessage.error("申请支付失败");
}
JSONObject resultJson1 = JSONObject.parseObject(result1);
String rc_Result2 = resultJson1.getString("rc_Result");
// 汇聚支付支付申请返回支付二维码图片
String code1 = "http://app.sunzee.com.cn/" + "/api/order/aliPay.htm?wx=" + rc_Result1 + "&zfb=" + rc_Result2;
String rd_Pic = toQrcode(code1);
JSONObject kindData = new JSONObject();
kindData.put("sn", sn1 + "-" + sn2);
kindData.put("rd_Pic", rd_Pic);
// 添加到订单明细表
for (String key : map.keySet()) {
// key:"玫瑰精灵-A01",value:"0.50-1"
String value = map.get(key);
String[] GoodsInfo = key.split("-");
String[] GoodsValue = value.split("-");
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setProductName(GoodsInfo[0]);
orderDetails.setProductNo(GoodsInfo[1]);
orderDetails.setPrice(new BigDecimal(GoodsValue[0]).divide(new BigDecimal(GoodsValue[1])).setScale(2));
orderDetails.setProductNumber(Integer.valueOf(GoodsValue[1]));
orderDetails.setAmount(new BigDecimal(GoodsValue[0]).setScale(2));
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn1);
orderDetailsService.save(orderDetails);
orderDetails.setId(HuifuUtils.initDetailsId());
orderDetails.setOrderSn(sn2);
orderDetailsService.save(orderDetails);
}
orderService.save(order);
orderService.save(order2);
return JsonMessage.success(kindData.toString());
}
}
@ApiOperation(value = "汇付:获取code回调跳转到支付页面")
@GetMapping("/callback")
public void oauthCallback(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 获取code
String code = request.getParameter("code");
String id = request.getParameter("state");
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(THuifuTempOrder::getId, id);
THuifuTempOrder huifuTempOrder = huifuTempOrderService.getOne(wrapper);
// 从临时表中获取订单信息
String result = null;
if (huifuTempOrder != null) {
String companyType = huifuTempOrder.getCompanyType();
if (huifuTempOrder.getStatus() == 1) {
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
result = HuifuConstant.SC_JUMP_URL + "/#/popPayment?status=1";
} else {
result = HuifuConstant.SZ_JUMP_URL + "/#/popPayment?status=1";
}
} else {
String openid;
if (StrUtil.isNotEmpty(companyType) && companyType.equals("1")) {
// 获取openid
try {
String openUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
"appid=" + HuifuConstant.SC_WX_SUB_APP_ID +
"&secret=" + HuifuConstant.SC_WX_APP_SECRET +
"&code=" + code +
"&grant_type=authorization_code";
log.info("获取openID:{}", openUrl);
org.json.JSONObject jsonObject = HttpClientUtils.get(openUrl);
log.info("获取openID结果:{}", jsonObject);
openid = jsonObject.getString("openid");
result = huifuMchService.wetchatPay(huifuTempOrder, openid);
} catch (Exception e) {
e.printStackTrace();
}
} else {
// 获取openid
try {
String openUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
"appid=" + HuifuConstant.SZ_WX_SUB_APP_ID +
"&secret=" + HuifuConstant.SZ_WX_APP_SECRET +
"&code=" + code +
"&grant_type=authorization_code";
log.info("获取openID:{}", openUrl);
org.json.JSONObject jsonObject = HttpClientUtils.get(openUrl);
log.info("获取openID结果:{}", jsonObject);
openid = jsonObject.getString("openid");
result = huifuMchService.wetchatPay(huifuTempOrder, openid);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
log.info("支付链接:{}", result);
response.sendRedirect(result);
}
/**
* 支付成功回调 汇付
*/
@RequestMapping(value = "/huifuNotify", method = RequestMethod.POST)
@ResponseBody
public String huifuNotify(HttpServletRequest request) {
String respData = request.getParameter("resp_data");
try {
// 验签请参sign
String sign = request.getParameter("sign");
// 使用汇付公钥验签
if (!RSAUtil.verify(respData, HuifuConstant.HUIFU_PUBLIC_KEY, sign)) {
// 验签失败处理
log.info("验签失败");
return "";
}
JSONObject data = JSONObject.parseObject(respData);
String transStat = data.getString("trans_stat");
// 订单号
String sn = data.getString("req_seq_id");
if (StrUtil.hasEmpty(sn)) {
// return "R.fail(ResponseCodesEnum.A0001,"订单号为空!")";
log.info("返回参数订单编号为空");
return "";
}
// 查到指定订单
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TOrder::getSn, sn);
wrapper.eq(TOrder::getStatus, 0);
TOrder order = orderService.getOne(wrapper);
if (order == null) {
log.info("找不到订单");
return "";
}
if (HuifuConstant.TRANS_STAT_S.equals(transStat)) {
// 查到对应订单明细表
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TOrderDetails::getOrderSn, sn);
List orderDetails = orderDetailsService.list(lambdaQueryWrapper);
for (TOrderDetails orderDetail : orderDetails) {
// 修改状态订单明细状态
orderDetail.setRefundStatus("1");
orderDetailsService.updateById(orderDetail);
}
// 已支付
order.setStatus(1);
// 支付平台产生的全局流水号:hf_seq_id
// String hfSeqId = data.getString("hf_seq_id");
// 支付平台产生的全局流水号:party_order_id
String partyOrderId = data.getString("party_order_id");
order.setTrxNo(partyOrderId);
// 支付时间,格式:YYYY-MM-DD HH:mm:ss
String payTime = data.getString("end_time");
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 临时表修改支付状态
String id = data.getString("remark");
if (StrUtil.isNotEmpty(id)) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(THuifuTempOrder::getId, id);
THuifuTempOrder huifuTempOrder = huifuTempOrderService.getOne(queryWrapper);
huifuTempOrder.setStatus(1);
huifuTempOrderService.updateById(huifuTempOrder);
}
try {
Date date = inputFormat.parse(URLDecoder.decode(payTime, "UTF-8"));
String formattedDate = outputFormat.format(date);
Date payDate = outputFormat.parse(URLDecoder.decode(formattedDate, "UTF-8"));
order.setPayDate(payDate);
} catch (ParseException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 修改订单信息
orderService.updateById(order);
//
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
kindData.put("productName", order.getProductName());
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
if (order.getFrpCode().equals("WEIXIN_XCX")) {
JSONObject kindData1 = new JSONObject();
kindData1.put("sn", order.getSn());
kindData1.put("productDesc", order.getProductDesc());
String s = order.getId().toString();
if (s.length() > 6) {
s = s.substring(s.length() - 6, s.length());
}
kindData1.put("mealCode", s);
order.setOrderStatus("-1");
equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("cardPayXCX", kindData1.toString()).toString());
if (StringUtils.isNotEmpty(equipment.getApkVersion())) {
//发送两次mq
if (equipment.getApkVersion().equals("1.0.131-jz11") || equipment.getApkVersion().equals("1.0.131-jz12") || equipment.getApkVersion().equals("1.0.131-jz13") || equipment.getApkVersion().equals("1.0.131-jz14") || equipment.getApkVersion().equals("1.0.131-jz15")) {
sendMqTwo(equipment.getClientId(), kindData1.toString());
}
}
TSzsmWx szsmWx = szsmWxService.getById(order.getWxId());
BigDecimal integral = szsmWx.getIntegral();
if (integral != null) {
integral = order.getPrice().add(integral);
} else {
integral = order.getPrice();
}
szsmWx.setIntegral(integral);
szsmWxService.updateById(szsmWx);
if (StringUtils.isNotEmpty(order.getCoupons())) {
String coupons = order.getCoupons();
coupons = coupons.substring(1, coupons.length() - 1);
List list1 = Arrays.asList(coupons);
if (list1.size() > 0) {
for (String code : list1) {
szwlFeign.useYHJ(code, String.valueOf(order.getAdminId()), order.getClientId());
}
}
}
} else {
if (!order.getIsNotified().equals("1")) {
String paySuccess = equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
if (paySuccess.equals("success")) {
order.setIsNotified("1");
// 推送微信订单
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(order.getAdminId())));
// 判断是否开启订单推送功能
if (admin != null && StringUtils.isNotEmpty(admin.getOrderNotice()) && admin.getOrderNotice().equals("1")) {
String openId = R.getDataIfSuccess(szwlFeign.getOpenId(order.getAdminId()));
// 获取openId
if (StringUtils.isNotEmpty(openId)) {
orderService.newSendWechatMessage(openId, equipment, order, admin.getCompanyType());
}
}
}
}
}
orderService.updateById(order);
try {
if (order.getProductNumber() == null || order.getProductNumber() == 0) {
order.setProductNumber(1);
}
orderFeign.saveToEs(order);
} catch (Exception e) {
e.printStackTrace();
}
try {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TOrderTask::getSn, sn);
TOrderTask oldOrderTask = orderTaskService.getOne(queryWrapper);
if (oldOrderTask == null) {
TOrderTask orderTask = new TOrderTask();
BeanUtils.copyPropertiesIgnoreNull(order, orderTask, true);
orderTask.setAgencyId(order.getId());
orderTaskService.save(orderTask);
}
} catch (Exception e) {
e.printStackTrace();
}
//传送数据
// sentJingZhun(order);
// return R.ok("支付成功");
log.info("支付成功");
} else {
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
String gtClientId = equipment.getGtClientId();
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
if (!order.getIsNotified().equals("2")) {
String payFail = equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_faile", kindData.toString()).toString());
if (payFail.equals("success")) {
order.setIsNotified("2");
}
}
order.setNote(gtClientId + "支付失败");
orderService.updateById(order);
log.info("支付失败");
}
return "RECV_ORD_ID_" + sn;
} catch (Exception e) {
log.info("异步回调开始,参数,request={}", respData, e);
}
return "";
}
/**
* 支付成功回调 汇聚
*
* @return
*/
@RequestMapping(value = "/notify", method = RequestMethod.GET)
@ResponseBody
public String notify(HttpServletRequest request) {
String r6_Status = request.getParameter("r6_Status");
// 订单号
String sn = request.getParameter("r2_OrderNo");
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, sn);
query.eq(TOrder::getStatus, 0);
if (StringUtils.isEmpty(sn)) {
return "error";
}
TOrder order = orderService.getOne(query);
if (order == null) {
return "error";
}
if (JoinpayConstant.r6_Status_100.equals(r6_Status)) {
// 查到对应订单明细表
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TOrderDetails::getOrderSn, sn);
List orderDetails = orderDetailsService.list(lambdaQueryWrapper);
for (TOrderDetails orderDetail : orderDetails) {
// 修改状态订单明细状态
orderDetail.setRefundStatus("1");
orderDetailsService.updateById(orderDetail);
}
// 已支付
order.setStatus(1);
// 支付平台产生的流水号
String r7_TrxNo = request.getParameter("r7_TrxNo");
order.setTrxNo(r7_TrxNo);
// 格式:YYYY-MM-DD HH:mm:ss
String ra_PayTime = request.getParameter("ra_PayTime");
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date payDate = sdf.parse(URLDecoder.decode(ra_PayTime, "UTF-8"));
order.setPayDate(payDate);
} catch (ParseException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
orderService.updateById(order);
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
kindData.put("productName", order.getProductName());
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
if (order.getFrpCode().equals("WEIXIN_XCX")) {
JSONObject kindData1 = new JSONObject();
kindData1.put("sn", order.getSn());
kindData1.put("productDesc", order.getProductDesc());
String s = order.getId().toString();
if (s.length() > 6) {
s = s.substring(s.length() - 6, s.length());
}
kindData1.put("mealCode", s);
order.setOrderStatus("-1");
equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("cardPayXCX", kindData1.toString()).toString());
if (StringUtils.isNotEmpty(equipment.getApkVersion())) {
//发送两次mq
if (equipment.getApkVersion().equals("1.0.131-jz11") || equipment.getApkVersion().equals("1.0.131-jz12") || equipment.getApkVersion().equals("1.0.131-jz13") || equipment.getApkVersion().equals("1.0.131-jz14") || equipment.getApkVersion().equals("1.0.131-jz15")) {
sendMqTwo(equipment.getClientId(), kindData1.toString());
}
}
TSzsmWx szsmWx = szsmWxService.getById(order.getWxId());
BigDecimal integral = szsmWx.getIntegral();
if (integral != null) {
integral = order.getPrice().add(integral);
} else {
integral = order.getPrice();
}
szsmWx.setIntegral(integral);
szsmWxService.updateById(szsmWx);
if (StringUtils.isNotEmpty(order.getCoupons())) {
String coupons = order.getCoupons();
coupons = coupons.substring(1, coupons.length() - 1);
List list1 = Arrays.asList(coupons);
if (list1.size() > 0) {
for (String code : list1) {
szwlFeign.useYHJ(code, String.valueOf(order.getAdminId()), order.getClientId());
}
}
}
} else {
if (!order.getIsNotified().equals("1")) {
String paySuccess = equipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
if (paySuccess.equals("success")) {
order.setIsNotified("1");
}
// 推送微信订单
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(order.getAdminId())));
// 判断是否开启订单推送功能
if (admin != null && StringUtils.isNotEmpty(admin.getOrderNotice()) && admin.getOrderNotice().equals("1")) {
String openId = R.getDataIfSuccess(szwlFeign.getOpenId(order.getAdminId()));
// 获取openId
if (StringUtils.isNotEmpty(openId)) {
orderService.newSendWechatMessage(openId, equipment, order, admin.getCompanyType());
}
}
}
}
orderService.updateById(order);
try {
if (order.getProductNumber() == null || order.getProductNumber() == 0) {
order.setProductNumber(1);
}
orderFeign.saveToEs(order);
} catch (Exception e) {
e.printStackTrace();
}
// try {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TOrderTask::getSn, sn);
TOrderTask oldOrderTask = orderTaskService.getOne(queryWrapper);
if (oldOrderTask == null) {
TOrderTask orderTask = new TOrderTask();
BeanUtils.copyPropertiesIgnoreNull(order, orderTask, true);
orderTask.setAgencyId(order.getId());
orderTaskService.save(orderTask);
}
//传送数据
sentJingZhun(order);
return "success";
} else {
TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
String gtClientId = byClientId.getGtClientId();
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
if (!order.getIsNotified().equals("2")) {
String payFail = equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("pay_faile", kindData.toString()).toString());
if (payFail.equals("success")) {
order.setIsNotified("2");
}
}
order.setNote(gtClientId + "支付失败");
orderService.updateById(order);
return "success";
}
}
//发送两次mq
private void sendMqTwo(String clientId, String kind) {
// 定时任务1
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
equipmentService.sentMessage(clientId, PushUtils.buildJson("cardPayXCX", kind).toString());
System.out.println("运行定时任务1:" + clientId);
}
};
// 定时任务2
TimerTask timerTask1 = new TimerTask() {
@Override
public void run() {
equipmentService.sentMessage(clientId, PushUtils.buildJson("cardPayXCX", kind).toString());
System.out.println("运行定时任务1:" + clientId);
}
};
// 计时器
Timer timer = new Timer();
// 添加执行任务(延迟 5s 执行)
timer.schedule(timerTask, 5000);
Timer timer1 = new Timer();
timer1.schedule(timerTask1, 10000);
}
private void sentJingZhun(TOrder order) {
order = orderService.getById(order.getId());
int i = 0;
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(order.getAdminId())));
String adminId = admin.getId().toString();
String relationAdminId = admin.getRelationAdminId();
if ((StringUtils.isNotEmpty(adminId) && (adminId.equals("372") || adminId.equals("639") || adminId.equals("238")))
|| (StringUtils.isNotEmpty(relationAdminId) && relationAdminId.equals("372"))) {
//发送数据到鲸准
String url = "http://47.106.13.109:3000/api/listen";
Map map = new HashMap<>();
map.put("clientId", order.getClientId());
map.put("price", String.valueOf(order.getPrice()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
map.put("pay_date", sdf.format(order.getPayDate()));
if (order.getWxId() != null) {
//小程序下单
TSzsmWx szsmWx = szsmWxService.getById(order.getWxId());
map.put("sourceChannel", "1");
map.put("phone", szsmWx.getPhone());
if (order.getMarketingAmount() != null) {
map.put("amount", order.getMarketingAmount().toString());
} else {
map.put("amount", "0");
}
map.put("nickName", "1");
map.put("uninoId", szsmWx.getOpenId());
} else {
//机器下单
map.put("sourceChannel", "0");
map.put("phone", "");
map.put("amount", "0");
map.put("nickName", "");
map.put("uninoId", "");
}
TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
map.put("latitude", String.valueOf(byClientId.getLatitude()));
map.put("longitude", String.valueOf(byClientId.getLongitude()));
String data = JSON.toJSONString(map);
try {
String s = HttpClientSslUtils.doPost(url, data);
System.out.println("发送鲸准:" + s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 支付成功回调 杉德
*
* @return
*/
@RequestMapping(value = "/shandeRefund", method = RequestMethod.GET)
@ResponseBody
public Object shandeRefund(HttpServletRequest request) {
//订单号
String order_no = request.getParameter("out_order_no");
//交易状态
String trade_status = request.getParameter("trade_status");
String r6_Status = request.getParameter("r6_Status");
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, order_no);
if (StringUtils.isEmpty(order_no)) {
return "error";
}
List list = orderService.list(query);
TOrder order = new TOrder();
if (list.size() > 0) {
order = list.get(0);
}
if (trade_status.equals("SUCCESS")) {
// 已支付
order.setStatus(1);
// 支付平台产生的流水号
String bank_order_no = request.getParameter("bank_order_no");
order.setTrxNo(bank_order_no);
// 格式:YYYY-MM-DD HH:mm:ss
String pay_success_time = request.getParameter("pay_success_time");
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date payDate = sdf.parse(URLDecoder.decode(pay_success_time, "UTF-8"));
order.setPayDate(payDate);
} catch (ParseException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
orderService.updateById(order);
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
kindData.put("productName", order.getProductName());
TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
String gtClientId = byClientId.getGtClientId();
equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("pay_success", kindData.toString()).toString());
// PushUtils.push(gtClientId, "支付成功", "您的订单支付成功", PushUtils.buildJson("pay_success", kindData.toString()).toString());
order.setNote(gtClientId + "已推送");
try {
if (order.getProductNumber() == null || order.getProductNumber() == 0) {
order.setProductNumber(1);
}
esTOrderService.insertData(order);
orderFeign.saveToEs(order);
} catch (Exception e) {
e.printStackTrace();
}
//对金额表的当日数额进行修改
//1,获取商家的等级
BigDecimal price = order.getPrice();
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(byClientId.getAdminId())));
//获取分销 关联设备
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(byClientId.getId())));
Integer type = proportion.getType();
switch (type) {
case 0:
BigDecimal agencyProportion = proportion.getProportion();
// 代理分销获得利润
BigDecimal agencyPrice = price.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
//修改金额表的今日金额
TShandeMch shandeMch = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getId())));
BigDecimal todayBalance = shandeMch.getTodayBalance();
todayBalance = todayBalance.add(agencyPrice).setScale(2, RoundingMode.HALF_DOWN);
shandeMch.setTodayBalance(todayBalance);
szwlFeign.updateShandeMch(shandeMch);
break;
case 1:
BigDecimal agencyProportion1 = proportion.getAgencyProportion();
BigDecimal merchantProportion1 = proportion.getProportion();
// 代理分销获得利润
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);
//修改代理金额表的今日金额
// ArrayList filters1 = new ArrayList<>();
// filters1.add(Filter.eq("adminId", admin.getAgencyId()));
TShandeMch shandeMch2 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(proportion.getAgencyId())));
BigDecimal todayBalance2 = shandeMch2.getTodayBalance();
todayBalance2 = todayBalance2.add(agencyPrice1).setScale(2, RoundingMode.HALF_DOWN);
shandeMch2.setTodayBalance(todayBalance2);
szwlFeign.updateShandeMch(shandeMch2);
//修改经销商金额表的今日金额
// ArrayList filters2 = new ArrayList<>();
// filters2.add(Filter.eq("adminId", admin.getId()));
TShandeMch shandeMch3 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getId())));
BigDecimal todayBalance3 = shandeMch3.getTodayBalance();
todayBalance3 = todayBalance3.add(merchantAmount1).setScale(2, RoundingMode.HALF_DOWN);
shandeMch3.setTodayBalance(todayBalance3);
szwlFeign.updateShandeMch(shandeMch3);
break;
case 2:
BigDecimal agencyProportion2 = proportion.getAgencyProportion();
BigDecimal merchantProportion2 = proportion.getMerchantProportion();
BigDecimal personageProportion2 = proportion.getProportion();
// 代理分销获得利润
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);
//修改代理金额表的今日金额
// ArrayList filters3 = new ArrayList<>();
// filters3.add(Filter.eq("adminId", admin.getAgencyId()));
// List list3 = shandeMchService.findList(null,filters3,null);
TShandeMch shandeMch4 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(proportion.getAgencyId())));
BigDecimal todayBalance4 = shandeMch4.getTodayBalance();
todayBalance4 = todayBalance4.add(agencyAmount).setScale(2, RoundingMode.HALF_DOWN);
shandeMch4.setTodayBalance(todayBalance4);
szwlFeign.updateShandeMch(shandeMch4);
//修改经销商金额表的今日金额
TShandeMch shandeMch5 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(proportion.getMerchantId())));
BigDecimal todayBalance5 = shandeMch5.getTodayBalance();
todayBalance5 = todayBalance5.add(merchantAmount).setScale(2, RoundingMode.HALF_DOWN);
shandeMch5.setTodayBalance(todayBalance5);
szwlFeign.updateShandeMch(shandeMch5);
//修改终端金额表的今日金额
TShandeMch shandeMch6 = R.getDataIfSuccess(szwlFeign.getShandeMch(String.valueOf(admin.getId())));
BigDecimal todayBalance6 = shandeMch6.getTodayBalance();
todayBalance6 = todayBalance6.add(personageAmount).setScale(2, RoundingMode.HALF_DOWN);
shandeMch6.setTodayBalance(todayBalance6);
szwlFeign.updateShandeMch(shandeMch6);
break;
}
return "SUCCESS";
} else {
TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
String gtClientId = byClientId.getGtClientId();
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("pay_faile", kindData.toString()).toString());
// PushUtils.push(gtClientId, "支付成功", "您的订单支付成功", PushUtils.buildJson("pay_faile", kindData.toString()).toString());
order.setNote(gtClientId + "支付失败");
orderService.updateById(order);
}
return "SUCCESS";
}
/**
* MG280支付成功回调
*
* @return
*/
@RequestMapping(value = "/mg280Notify", method = RequestMethod.GET)
@ResponseBody
public Object mg280Notify(HttpServletRequest request) {
String r6_Status = request.getParameter("r6_Status");
// 订单号
String sn = request.getParameter("r2_OrderNo");
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, sn);
if (StringUtils.isEmpty(sn)) {
return "error";
}
List list = orderService.list(query);
TOrder order = list.get(0);
if (JoinpayConstant.r6_Status_100.equals(r6_Status)) {
// 已支付
order.setStatus(1);
// 支付平台产生的流水号
String r7_TrxNo = request.getParameter("r7_TrxNo");
order.setTrxNo(r7_TrxNo);
// 格式:YYYY-MM-DD HH:mm:ss
String ra_PayTime = request.getParameter("ra_PayTime");
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date payDate = sdf.parse(URLDecoder.decode(ra_PayTime, "UTF-8"));
order.setPayDate(payDate);
} catch (ParseException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
orderService.updateById(order);
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
kindData.put("productName", order.getProductName());
TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
String gtClientId = byClientId.getGtClientId();
Date endDate = byClientId.getEndDate();
Date date = new Date();
Date time = null;
double price1Price = 0;
BigDecimal price = order.getPrice();
// List priceList = priceService.findAll();
// for (Price price1 : priceList) {
// if (price1.getName().equals("MG280")) {
// price1Price = price1.getPrice();
// }
// }
TPrice price1 = R.getDataIfSuccess(szwlFeign.getPrice("MG280"));
price1Price = price1.getPrice();
BigDecimal city = price.divide(BigDecimal.valueOf(price1Price));
int ci = city.intValue();
if (endDate.getTime() < date.getTime()) {
Calendar c = Calendar.getInstance();
c.setTime(date);
int i = c.get(Calendar.MONTH);
c.set(Calendar.MONTH, i - 1);
//上个月有多少天
int actualMaximum = c.getActualMaximum(Calendar.DAY_OF_MONTH);
long t = date.getTime() - endDate.getTime();
long m = actualMaximum * 1000 * 60 * 60 * 24l;
if (t <= m) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(endDate);
calendar.set(Calendar.DAY_OF_MONTH, 10);
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
calendar.set(Calendar.MINUTE, 0);
//将秒至0
calendar.set(Calendar.SECOND, 0);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.MONTH, ci);
time = calendar.getTime();
}
if (t > m) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 10);
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
calendar.set(Calendar.MINUTE, 0);
//将秒至0
calendar.set(Calendar.SECOND, 0);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.MONTH, ci);
time = calendar.getTime();
}
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(endDate);
calendar.set(Calendar.DAY_OF_MONTH, 10);
//将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 0);
//将分钟至0
calendar.set(Calendar.MINUTE, 0);
//将秒至0
calendar.set(Calendar.SECOND, 0);
//将毫秒至0
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.MONTH, ci);
time = calendar.getTime();
}
byClientId.setEndDate(time);
//修改机器
szwlFeign.updateByEquipment(byClientId);
order.setNote(gtClientId + "已推送");
orderService.updateById(order);
equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("endDate", String.valueOf(byClientId.getEndDate().getTime())).toString());
// PushUtils.push(byClientId.getGtClientId(), "", "", PushUtils.buildJson("endDate", String.valueOf(byClientId.getEndDate().getTime())).toString());
return "success";
} else {
TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
String gtClientId = byClientId.getGtClientId();
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
order.setNote(gtClientId + "支付失败");
orderService.updateById(order);
}
return "success";
}
//生成二维码,并返回base64格式
private String toQrcode(String code) {
String imgtext = null;
QRCodeWriter qrCodeWriter = new QRCodeWriter();
HashMap hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix bitMatrix = null;
try {
bitMatrix = qrCodeWriter.encode(code, BarcodeFormat.QR_CODE, 600, 600, hints);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);
Base64.Encoder encoder = Base64.getEncoder();
String text = encoder.encodeToString(outputStream.toByteArray());
imgtext = "data:image/png;base64," + text;
} catch (Exception e) {
e.printStackTrace();
}
return imgtext;
}
@ApiOperation(value = "汇付退款成功回调")
@RequestMapping(value = "/refundNotify", method = RequestMethod.POST)
@ResponseBody
public String refundNotify(HttpServletRequest request) {
String result = orderService.huifuNotifyRefund(request);
return result;
}
@ApiOperation(value = "汇付退款成功回调")
@RequestMapping(value = "/notifyRefund", method = RequestMethod.GET)
@ResponseBody
public Object notifyRefund(HttpServletRequest request) {
String result = orderService.joinpayNotifyRefund(request);
// String r6_Status = request.getParameter("ra_Status");
//
// // 订单号
// String sn = request.getParameter("r2_OrderNo");
// // 退款订单号
//
// if(StringUtils.isEmpty(sn)){
// return "error";
// }
//
// LambdaQueryWrapper query = Wrappers.lambdaQuery();
// query.eq(TOrder::getSn,sn);
// TOrder order = orderService.getOne(query);
//
// if (order == null) {
// return "error";
// }
// if (order.getStatus() == 3) {
// return "success";
// }
// // 订单商品数量
// if (JoinpayConstant.r6_Status_100.equals(r6_Status)) {
// if(order.getRefundQuantity() < order.getProductNumber()) {
// order.setStatus(1);
// } else {
// order.setStatus(3);
// }
// // 更改订单明细表
// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(TOrderDetails::getOrderSn, sn);
// // 处理退款中状态的明细
// queryWrapper.eq(TOrderDetails::getRefundStatus, "4");
// List tOrderDetails = orderDetailsService.list(queryWrapper);
// for (TOrderDetails tOrderDetail : tOrderDetails) {
// Integer refundQuantity = tOrderDetail.getRefundQuantity();
// Integer productNumber = tOrderDetail.getProductNumber();
// if(refundQuantity < productNumber) {
// // 部分退款
// tOrderDetail.setRefundStatus("2");
// orderDetailsService.updateById(tOrderDetail);
// } else {
// // 全部退款
// tOrderDetail.setRefundStatus("3");
// orderDetailsService.updateById(tOrderDetail);
// }
// }
// // r4_refundAmount: 退款金额
// BigDecimal r4_refundAmount = new BigDecimal(request.getParameter("r4_RefundAmount_str"));
// if(order.getRefundMarketingAmount()!=null){
// r4_refundAmount =r4_refundAmount.add(order.getRefundMarketingAmount());
// }
// // price: 订单金额, refundAmount:已退款的金额
// BigDecimal price = order.getPrice();
// BigDecimal refundAmount = order.getRefundAmount();
// TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(order.getEquipmentId())));
// if(order.getRefundAmount() != null) {
// BigDecimal newRefundAmount = refundAmount.add(r4_refundAmount);
// order.setRefundAmount(refundAmount.add(r4_refundAmount));
// // 如果小于订单金额
// if(newRefundAmount.compareTo(price) < 0) {
// JSONArray altInfo = getAltInfo(proportion, price.subtract(newRefundAmount));
// order.setAltInfo(altInfo.toString());
// } else {
// JSONArray altInfo = getAltInfo(proportion, price);
// order.setAltInfo(altInfo.toString());
// }
// } else {
// order.setRefundAmount(r4_refundAmount);
// if(r4_refundAmount.compareTo(price) < 0) {
// JSONArray altInfo = getAltInfo(proportion, price.subtract(r4_refundAmount));
// order.setAltInfo(altInfo.toString());
// }
// }
//
// // 支付平台产生的退款流水号
// String r5_RefundTrxNo = request.getParameter("r5_RefundTrxNo");
// order.setRefundTrxNo(r5_RefundTrxNo);
// order.setRefundDate(new Date());
// order.setModifyDate(new Date());
// String orderStatus = order.getOrderStatus();
// if(StringUtils.isNotEmpty(orderStatus)&&orderStatus.equals("0")){
// if(order.getStatus().toString().equals("3")){
// TEquipment byClientId = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
// JSONObject kindData = new JSONObject();
// String s = order.getId().toString();
// if(s.length()>6){
// s = s.substring(s.length()-6,s.length());
// }
// kindData.put("mealCode", s);
// equipmentService.sentMessage(byClientId.getClientId(), PushUtils.buildJson("refuse_success", kindData.toString()).toString());
//
// }
// }
// try {
// esTOrderService.updateDataById(order);
// }catch (Exception e) {
// e.printStackTrace();
// }finally {
// orderService.updateById(order);
// }
// return "success";
// }
return result;
}
@ApiOperation(value = "添加国内订单")
@PostMapping("/addOrder")
public ResponseModel> addOrder(@RequestBody TOrder order) {
boolean save = orderService.save(order);
return R.ok(save);
}
@ApiOperation(value = "修改订单")
@PostMapping("/updateOrder")
public ResponseModel> updateOrder(@RequestBody TOrder order) {
orderService.updateById(order);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrderTask::getSn, order.getSn());
TOrderTask orderTask = orderTaskService.getOne(query);
orderTask.setStatus(order.getStatus());
orderTaskService.updateById(orderTask);
return R.ok();
}
@ApiOperation(value = "获取订单")
@GetMapping("/getOrder")
public ResponseModel> getOrder(@RequestParam String id) {
TOrder order = orderService.getById(id);
return R.ok(order);
}
@ApiOperation(value = "获取订单")
@GetMapping("/getOrderBySn")
public ResponseModel> getOrderBySn(@RequestParam String sn) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TOrder::getSn, sn);
TOrder order = orderService.getOne(wrapper);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TOrderDetails::getOrderSn, sn);
List orderDetails = orderDetailsService.list(queryWrapper);
OrderDetailsDTO orderDetailsDTO = new OrderDetailsDTO();
BeanUtil.copyProperties(order, orderDetailsDTO);
orderDetailsDTO.setOrderDetails(orderDetails);
return R.ok(orderDetailsDTO);
}
@ApiOperation(value = "优惠码支付成功回调")
@RequestMapping(value = "/promoCodeNotify", method = RequestMethod.GET)
@ResponseBody
public Object promoCoderefund(HttpServletRequest request) {
String r6_Status = request.getParameter("r6_Status");
// 订单号
String sn = request.getParameter("r2_OrderNo");
//价格
String price = request.getParameter("r3_Amount");
// 优惠码
String codeNum = request.getParameter("r5_Mp");
Double money = null;
TPrice tPrice = R.getDataIfSuccess(szwlFeign.getPrice("优惠码"));
money = tPrice.getPrice();
//生成优惠码的个数
double num = Double.parseDouble(price) / money;
int number = (int) num;
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, sn);
List list = new ArrayList<>();
if (StringUtils.isNotEmpty(sn)) {
list = orderService.list(query);
}
TOrder order = list.get(0);
if (order.getStatus() != 0) {
return "success";
}
if (JoinpayConstant.r6_Status_100.equals(r6_Status)) {
// 已支付
order.setStatus(1);
// 支付平台产生的流水号
String r7_TrxNo = request.getParameter("r7_TrxNo");
order.setTrxNo(r7_TrxNo);
// 格式:YYYY-MM-DD HH:mm:ss
String ra_PayTime = request.getParameter("ra_PayTime");
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date payDate = sdf.parse(URLDecoder.decode(ra_PayTime, "UTF-8"));
order.setPayDate(payDate);
} catch (ParseException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
orderService.updateById(order);
JSONObject kindData = new JSONObject();
kindData.put("sn", order.getSn());
kindData.put("productName", order.getProductName());
String mont = order.getRefundTrxNo();
Long data = Calendar.getInstance().getTimeInMillis();
Float month = Float.valueOf(mont);
Float mm = month * 10;
String m = String.valueOf(mm);
String[] split = m.split("\\.");
String th = split[0];
Long t = Long.valueOf(th);
Long mon = 30L * 24L * 60L * 60L * 1000L;
Long d = data + ((mon * t) / 10);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sd = sdf.format(new Date(Long.parseLong(String.valueOf(d))));
Date lastUseDate = new Date(Long.parseLong(String.valueOf(d)));
szwlFeign.addPromoCode(String.valueOf(order.getAdminId()), lastUseDate, number, codeNum);
return "支付成功";
}
return "success";
}
@ApiOperation(value = "查询订单是否付款")
@RequestMapping(value = "/getOrderStatus", method = RequestMethod.GET)
@ResponseBody
public JsonMessage getOrderStatus(String sn) {
String sta = "";
if (sn.contains("-")) {
String[] sns = sn.split("-");
for (int i = 0; i < sns.length; i++) {
LambdaQueryWrapper query1 = Wrappers.lambdaQuery();
query1.eq(TOrder::getSn, sns[i]);
TOrder order = orderService.getOne(query1);
if (order != null) {
Integer status = order.getStatus();
sta = status.toString();
if (status == 1) {
sta = "pay";
}
}
}
} else {
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, sn);
List list = orderService.list(query);
if (list.size() > 0) {
TOrder order = list.get(0);
Integer status = order.getStatus();
sta = status.toString();
if (status == 1) {
sta = "pay";
}
}
}
return JsonMessage.success(sta);
}
@ApiOperation(value = "上传订单的做糖状态")
@RequestMapping(value = "/sendOrderStatus", method = RequestMethod.GET)
@ResponseBody
public JsonMessage sendOrderStatus(String sn, String orderStatus) {
if (StringUtils.isEmpty(sn) || StringUtils.isEmpty(orderStatus)) {
return JsonMessage.error("数据有空");
}
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, sn);
List list = orderService.list(query);
TOrder order = list.get(0);
order.setOrderStatus(orderStatus);
orderService.updateById(order);
if (orderStatus.equals("1")) {
String s = order.getId().toString();
String clientId = order.getClientId();
szsmWxService.subscribeMessage(order.getWxId(), s.substring(s.length() - 6, s.length()), clientId.substring(clientId.length() - 6, clientId.length()));
}
LambdaQueryWrapper query1 = Wrappers.lambdaQuery();
query1.eq(TOrderTask::getSn, sn);
TOrderTask orderTask = orderTaskService.getOne(query1);
orderTask.setOrderStatus(orderStatus);
orderTaskService.updateById(orderTask);
return JsonMessage.success("success");
}
@ApiOperation(value = "删除订单")
@RequestMapping(value = "/deleteOrder", method = RequestMethod.GET)
@ResponseBody
public JsonMessage deleteOrder(String sn) {
if (StringUtils.isEmpty(sn)) {
return JsonMessage.error(sn + "删除失败");
}
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TOrder::getSn, sn);
List list = orderService.list(query);
TOrder order = list.get(0);
Integer status = order.getStatus();
String ss = status.toString();
if (status == 0) {
orderService.removeById(order.getId());
return JsonMessage.success(sn + "删除成功");
}
// return JsonMessage.success(sn + "删除失败");
return JsonMessage.success(sn + "删除成功");
}
/**
* 添加订单
*
* @param clientId 设备client id
* @param productName 商品名称
* @param
* @return
*/
@RequestMapping(value = "/addOrder", method = RequestMethod.GET)
@ResponseBody
public Object addOrder(String clientId, String productName, String pri, String sn) {
TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(clientId));
if (equipment == null) {
return JsonMessage.error("找不到设备");
}
Long equipmentId = equipment.getId();
BigDecimal price = new BigDecimal(pri);
TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
if (admin == null) {
return JsonMessage.error("找不到设备商家");
}
JSONArray altInfo = new JSONArray();
String orderType = null;
TProportion proportion = R.getDataIfSuccess(szwlFeign.getProportion(String.valueOf(equipment.getId())));
Integer type = proportion.getType();
switch (type) {
case 0:
orderType = "1";
break;
case 1:
orderType = "2";
break;
case 2:
orderType = "3";
break;
}
TProduct product = R.getDataIfSuccess(szwlFeign.getProduct(String.valueOf(equipmentId), productName));
TOrder order = new TOrder();
order.setId(IDGenerator.orderID());
order.setCreateDate(new Date());
order.setModifyDate(new Date());
order.setAdminId(admin.getId());
order.setSn(sn);
order.setProductId(product.getId());
order.setProductNo(product.getNo());
order.setProductName(productName);
order.setPrice(price);
order.setClientId(equipment.getClientId());
order.setEquipmentId(equipmentId);
order.setAltInfo(altInfo.toString());
order.setStatus(1);
order.setType(type);
orderService.save(order);
try {
if (order.getProductNumber() == null || order.getProductNumber() == 0) {
order.setProductNumber(1);
}
esTOrderService.insertData(order);
orderFeign.saveToEs(order);
} catch (Exception e) {
e.printStackTrace();
}
return JsonMessage.success("success");
}
/**
* 汇聚分销明细
*
* @param proportion
* @param price
* @return
*/
public JSONArray getAltInfo(TProportion proportion, BigDecimal price) {
// 获取分账有几方:0:分账方2个,1:分账方3个,2:分账方4个,3:分账方超4个
Integer type = proportion.getType();
// 汇聚分账参数
JSONArray altInfo = new JSONArray();
BigDecimal agencyProportion = null,
merchantProportion = null,
selfProportion = null;
BigDecimal agencyAmount = null;
BigDecimal merchantAmount = null;
BigDecimal selfAmount = null;
TJoinpayMch agencyMch = null;
TJoinpayMch merchantMch = null;
TJoinpayMch selfMch = null;
JSONObject agencyJson = null;
JSONObject merchantJson = null;
JSONObject selfJson = null;
//取消平台扣手续费
BigDecimal cutPrice = price.setScale(2, RoundingMode.HALF_UP);
BigDecimal refuseAmount = new BigDecimal(0.00);
switch (type) {
case 0:
// 商家自己的分销
selfProportion = proportion.getProportion();
// 商家分销获得利润
selfAmount = cutPrice.multiply(selfProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
// 汇聚平台
selfMch = R.getDataIfSuccess(szwlFeign.getMch(String.valueOf(proportion.getAdminId())));
if (selfMch == null) {
return altInfo;
}
selfJson = new JSONObject();
selfJson.put("altMchNo", selfMch.getAltMchNo());
selfJson.put("altAmount", selfAmount.toString());
selfJson.put("isGuar", "12");
altInfo.add(selfJson);
break;
case 1:
// 商家自己的分销
selfProportion = proportion.getProportion();
// 一级分销
agencyProportion = proportion.getAgencyProportion();
// 商家分销获得利润
selfAmount = cutPrice.multiply(selfProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
// 汇聚平台
agencyMch = R.getDataIfSuccess(szwlFeign.getMch(String.valueOf(proportion.getAgencyId())));
selfMch = R.getDataIfSuccess(szwlFeign.getMch(String.valueOf(proportion.getAdminId())));
if (selfMch == null || agencyMch == null) {
return altInfo;
}
if (!(agencyProportion.compareTo(refuseAmount) == 0 || agencyProportion == null)) {
// 一级分销获得利润
agencyAmount = cutPrice.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
agencyJson = new JSONObject();
agencyJson.put("altMchNo", agencyMch.getAltMchNo());
agencyJson.put("altAmount", agencyAmount.toString());
agencyJson.put("isGuar", "12");
altInfo.add(agencyJson);
}
// 商家自己分销获得利润
selfJson = new JSONObject();
selfJson.put("altMchNo", selfMch.getAltMchNo());
selfJson.put("altAmount", selfAmount.toString());
selfJson.put("isGuar", "12");
altInfo.add(selfJson);
break;
case 2:
// 商家自己的分销
selfProportion = proportion.getProportion();
// 一级分销
agencyProportion = proportion.getAgencyProportion();
// 二级分销
merchantProportion = proportion.getMerchantProportion();
// 三级分销
// personageProportion = proportion.getPersonageProportion();
// 商家分销获得利润
selfAmount = cutPrice.multiply(selfProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
// 汇聚
agencyMch = R.getDataIfSuccess(szwlFeign.getMch(String.valueOf(proportion.getAgencyId())));
merchantMch = R.getDataIfSuccess(szwlFeign.getMch(String.valueOf(proportion.getMerchantId())));
selfMch = R.getDataIfSuccess(szwlFeign.getMch(String.valueOf(proportion.getAdminId())));
if (selfMch == null || agencyMch == null || merchantMch == null) {
return altInfo;
}
if (!(agencyProportion.compareTo(refuseAmount) == 0 || agencyProportion == null)) {
// 代理分销获得利润
agencyAmount = cutPrice.multiply(agencyProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
agencyJson = new JSONObject();
agencyJson.put("altMchNo", agencyMch.getAltMchNo());
agencyJson.put("altAmount", agencyAmount.toString());
agencyJson.put("isGuar", "12");
altInfo.add(agencyJson);
}
if (!(merchantProportion.compareTo(refuseAmount) == 0 || merchantProportion == null)) {
// 经销商分销获得利润
merchantAmount = cutPrice.multiply(merchantProportion.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_DOWN);
merchantJson = new JSONObject();
merchantJson.put("altMchNo", merchantMch.getAltMchNo());
merchantJson.put("altAmount", merchantAmount.toString());
merchantJson.put("isGuar", "12");
altInfo.add(merchantJson);
}
// 商家自己分销获得利润
merchantJson = new JSONObject();
merchantJson.put("altMchNo", selfMch.getAltMchNo());
merchantJson.put("altAmount", selfAmount.toString());
merchantJson.put("isGuar", "12");
altInfo.add(merchantJson);
break;
}
Iterator