重写优惠券实现逻辑的问题

This commit is contained in:
602090531@qq.com 2022-03-19 17:58:47 +08:00
parent b5bcc2db8c
commit a3bd3ced1e
3 changed files with 398 additions and 549 deletions

View File

@ -13,7 +13,6 @@ import net.lab1024.smartadmin.module.system.alipay.AliPayService;
import net.lab1024.smartadmin.module.system.alipay.alipayModel.AliPayEntity; import net.lab1024.smartadmin.module.system.alipay.alipayModel.AliPayEntity;
import net.lab1024.smartadmin.module.system.alipay.conf.AlipayConfig; import net.lab1024.smartadmin.module.system.alipay.conf.AlipayConfig;
import net.lab1024.smartadmin.module.system.royalcanin.CouponService; import net.lab1024.smartadmin.module.system.royalcanin.CouponService;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponCosumeEntity;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponGetAllEntity; import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponGetAllEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.constant.OrderResponseCodeConst; import net.lab1024.smartadmin.module.system.royalcanin.good.constant.OrderResponseCodeConst;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderAddress; import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderAddress;
@ -65,553 +64,13 @@ public class OrderController {
@ApiOperation(value = "微信支付订单", notes = "生成订单") @ApiOperation(value = "微信支付订单", notes = "生成订单")
@PostMapping("royalcanin/generateOrderWX") @PostMapping("royalcanin/generateOrderWX")
public ResponseDTO<Map<String, String>> generateOrderWX(@RequestBody List<OrdersEntity> ordersEntityList){ public ResponseDTO<Map<String, String>> generateOrderWX(@RequestBody List<OrdersEntity> ordersEntityList){
StringBuffer productId = new StringBuffer(); return orderService.createOrderWXInfo(ordersEntityList);
StringBuffer productName = new StringBuffer();
Map<String, String> resultMsg = new HashMap<>();
String mobile = "";
int buyCount = 0;
double total_fee = 0 ;
double basePoint = 0 ;
WxPayEntity wxPayEntity = new WxPayEntity();
JSONArray orderDatilListJson = new JSONArray();
OrdersEntity ordersEntity = new OrdersEntity();
OrderAddress orderAddress = new OrderAddress();
String memberId = "";
String couponCode = "";
try {
//先查订单存在的优惠券
for (OrdersEntity orders : ordersEntityList){
if (orders.getCouponCode() != "" && orders.getCouponCode() != null) {
couponCode = orders.getCouponCode();
}
memberId = orders.getMemberId();
}
//根据有没有优惠券来计算商品的总价
if(SmartStringUtil.isNotEmpty(couponCode)){
CouponGetAllEntity couponGetAllEntity = new CouponGetAllEntity();
couponGetAllEntity.setMemberId(memberId);
couponGetAllEntity.setCouponCode(couponCode);
String couponInfo = couponService.couponGetAll(couponGetAllEntity);
JSONObject jsonObject = JSONObject.parseObject(couponInfo);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
if(jsonArray.size() == 0){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
JSONObject jsonObjectData = (JSONObject) jsonArray.get(0);
if (jsonObjectData.getString("udf2") != null){
if (!jsonObjectData.getString("udf2").equals("H5")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//根据productCodes来判断优惠券的类型,空的话就是通用券不是空就是指定类别券
if(SmartStringUtil.isNotBlank(jsonObjectData.getString("productCodes"))){
String[] productCodes = jsonObjectData.getString("productCodes").toString().split(",");
List<ProductMasterQueryEntity> productMasterList = new ArrayList<ProductMasterQueryEntity>();
//用来保存指定类的购物车商品数据
List<OrdersEntity> ordersList = new ArrayList<OrdersEntity>();
//保存购物车其它的商品
List<OrdersEntity> ordersList2 = new ArrayList<OrdersEntity>();
for (OrdersEntity orders2 : ordersEntityList){
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(orders2.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject) jsonGoodsArray.get(0);
if(SmartStringUtil.isNotBlank(goodsObject.getString("productCode"))){
if(Arrays.asList(productCodes).contains(goodsObject.get("productCode"))){
ordersList.add(orders2);
}else{
ordersList2.add(orders2);
}
}
}
//得到当前能用优惠券的商品总金额
Double total_Coupon = 0.0;
//得到其它商品的总金额
Double total_Other = 0.0;
if( ordersList != null && ordersList.size() > 0 ) {
//遍历购物车中能用当前优惠券的商品
for (OrdersEntity entity : ordersList) {
//删除购物车信息
cartService.cancelProduct(entity.getMemberId(), entity.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(entity.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray2 = JSONObject.parseArray(goodsStr);
JSONObject goodsObject2 = (JSONObject) jsonGoodsArray2.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject2.getString("productName"));
orderDatilListEntity.setPcs(entity.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject2.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject2.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_Coupon = total_Coupon + Double.parseDouble(goodsObject2.getString("ecPrice")) * entity.getBuyCount();
basePoint = basePoint + entity.getBasePoint();
orderAddress.setAddressCityName(entity.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(entity.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(entity.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(entity.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(entity.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(entity.getOrderAddress().getAddressProvinceName());
productId.append(entity.getProductCode() + ",");
productName.append(entity.getProductName() + ",");
memberId = entity.getMemberId();
mobile = entity.getPhoneNumber();
buyCount = buyCount + entity.getBuyCount();
}
//校验当前订单金额有没有小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
Double couponAmount = Double.valueOf(jsonObjectData.getString("couponAmount"));
if(total_Coupon < couponAmount){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ? jsonObjectData.getString("discount") : jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
ordersEntity.setCouponTypeId(jsonObjectData.getString("couponTypeId"));
total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_Coupon);
}
if( ordersList2 != null && ordersList2.size() > 0 ) {
//遍历购物车的其它商品
for (OrdersEntity entity2 : ordersList2) {
//删除购物车信息
cartService.cancelProduct(entity2.getMemberId(), entity2.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(entity2.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray3 = JSONObject.parseArray(goodsStr);
JSONObject goodsObject3 = (JSONObject) jsonGoodsArray3.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject3.getString("productName"));
orderDatilListEntity.setPcs(entity2.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject3.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject3.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_Other = total_Other + Double.parseDouble(goodsObject3.getString("ecPrice")) * entity2.getBuyCount();
basePoint = basePoint + entity2.getBasePoint();
orderAddress.setAddressCityName(entity2.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(entity2.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(entity2.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(entity2.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(entity2.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(entity2.getOrderAddress().getAddressProvinceName());
productId.append(entity2.getProductCode() + ",");
productName.append(entity2.getProductName() + ",");
memberId = entity2.getMemberId();
mobile = entity2.getPhoneNumber();
buyCount = buyCount + entity2.getBuyCount();
}
total_fee = total_fee + total_Other;
}
}else{
for (OrdersEntity ordersEntitys : ordersEntityList) {
//删除购物车信息
cartService.cancelProduct(ordersEntitys.getMemberId(), ordersEntity.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(ordersEntitys.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject)jsonGoodsArray.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject.getString("productName"));
orderDatilListEntity.setPcs(ordersEntitys.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_fee = total_fee + Double.parseDouble(goodsObject.getString("ecPrice")) * ordersEntitys.getBuyCount();
basePoint = basePoint + ordersEntitys.getBasePoint();
orderAddress.setAddressCityName(ordersEntitys.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(ordersEntitys.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(ordersEntitys.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(ordersEntitys.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(ordersEntitys.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(ordersEntitys.getOrderAddress().getAddressProvinceName());
productId.append(ordersEntitys.getProductCode()+",");
productName.append(ordersEntitys.getProductName()+",");
memberId = ordersEntitys.getMemberId();
if (ordersEntitys.getCouponCode() != "" && ordersEntitys.getCouponCode() != null) {
couponCode = ordersEntitys.getCouponCode();
}
mobile = ordersEntitys.getPhoneNumber();
buyCount = buyCount + ordersEntitys.getBuyCount();
}
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ? jsonObjectData.getString("discount") : jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
ordersEntity.setCouponTypeId(jsonObjectData.getString("couponTypeId"));
total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_fee);
}
}else{
for (OrdersEntity ordersEntitys : ordersEntityList) {
//删除购物车信息
cartService.cancelProduct(ordersEntitys.getMemberId(), ordersEntity.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(ordersEntitys.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject)jsonGoodsArray.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject.getString("productName"));
orderDatilListEntity.setPcs(ordersEntitys.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_fee = total_fee + Double.parseDouble(goodsObject.getString("ecPrice")) * ordersEntitys.getBuyCount();
basePoint = basePoint + ordersEntitys.getBasePoint();
orderAddress.setAddressCityName(ordersEntitys.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(ordersEntitys.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(ordersEntitys.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(ordersEntitys.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(ordersEntitys.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(ordersEntitys.getOrderAddress().getAddressProvinceName());
productId.append(ordersEntitys.getProductCode()+",");
productName.append(ordersEntitys.getProductName()+",");
memberId = ordersEntitys.getMemberId();
mobile = ordersEntitys.getPhoneNumber();
buyCount = buyCount + ordersEntitys.getBuyCount();
}
}
ordersEntity.setOrderAddress(orderAddress);
ordersEntity.setProductCode(productId.substring(0,productId.length()-1));
ordersEntity.setProductName(productName.substring(0,productName.length()-1));
ordersEntity.setOrderAmount(StringUtil.toString(total_fee));
ordersEntity.setMemberId(memberId);
ordersEntity.setPhoneNumber(mobile);
ordersEntity.setBuyCount(buyCount);
ordersEntity.setOrderNo(GenerateSequenceUtil.generateSequenceNo());
ordersEntity.setOrderStatus("0");
ordersEntity.setBasePoint(basePoint);
ordersEntity.setPayType("3");
resultMsg = orderService.generateOrder(ordersEntity, orderDatilListJson);
if (resultMsg.get("code").equals("1")) {
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(StringUtil.toString(total_fee));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
Map<String, String> returnMap = new HashMap<>();
returnMap.put("orderNumber", ordersEntity.getOrderNo());
returnMap.put("orderAmount", ordersEntity.getOrderAmount());
return ResponseDTO.succData(returnMap, wxpayService.generateQRCode(wxPayEntity));
}else if (resultMsg.get("code").equals("0")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_ERROR,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("3")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_FAIL_COUPONDED,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("4")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL,resultMsg.get("msg"));
}
}catch (Exception e){
System.out.println(e.getMessage());
}
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL,resultMsg.get("msg"));
} }
@ApiOperation(value = "微信支付H5订单", notes = "生成H5订单") @ApiOperation(value = "微信支付H5订单", notes = "生成H5订单")
@PostMapping("royalcanin/generateOrderWXH5") @PostMapping("royalcanin/generateOrderWXH5")
public ResponseDTO<Map<String, String>> generateOrderWXH5(@RequestBody List<OrdersEntity> ordersEntityList){ public ResponseDTO<Map<String, String>> generateOrderWXH5(@RequestBody List<OrdersEntity> ordersEntityList){
StringBuffer productId = new StringBuffer(); return orderService.createOrderWXH5Info(ordersEntityList);
StringBuffer productName = new StringBuffer();
Map<String, String> resultMsg = new HashMap<>();
String mobile = "";
int buyCount = 0;
double total_fee = 0 ;
double basePoint = 0 ;
WxPayEntity wxPayEntity = new WxPayEntity();
JSONArray orderDatilListJson = new JSONArray();
OrdersEntity ordersEntity = new OrdersEntity();
OrderAddress orderAddress = new OrderAddress();
String memberId = "";
String couponCode = "";
try {
//先查订单存在的优惠券
for (OrdersEntity orders : ordersEntityList){
if (orders.getCouponCode() != "" && orders.getCouponCode() != null) {
couponCode = orders.getCouponCode();
}
memberId = orders.getMemberId();
}
//根据有没有优惠券来计算商品的总价
if(SmartStringUtil.isNotEmpty(couponCode)){
CouponGetAllEntity couponGetAllEntity = new CouponGetAllEntity();
couponGetAllEntity.setMemberId(memberId);
couponGetAllEntity.setCouponCode(couponCode);
String couponInfo = couponService.couponGetAll(couponGetAllEntity);
JSONObject jsonObject = JSONObject.parseObject(couponInfo);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
if(jsonArray.size() == 0){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
JSONObject jsonObjectData = (JSONObject) jsonArray.get(0);
if (jsonObjectData.getString("udf2") != null){
if (!jsonObjectData.getString("udf2").equals("H5")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//根据productCodes来判断优惠券的类型,空的话就是通用券不是空就是指定类别券
if(SmartStringUtil.isNotBlank(jsonObjectData.getString("productCodes"))){
String[] productCodes = jsonObjectData.getString("productCodes").toString().split(",");
List<ProductMasterQueryEntity> productMasterList = new ArrayList<ProductMasterQueryEntity>();
//用来保存指定类的购物车商品数据
List<OrdersEntity> ordersList = new ArrayList<OrdersEntity>();
//保存购物车其它的商品
List<OrdersEntity> ordersList2 = new ArrayList<OrdersEntity>();
for (OrdersEntity orders2 : ordersEntityList){
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(orders2.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject) jsonGoodsArray.get(0);
if(SmartStringUtil.isNotBlank(goodsObject.getString("productCode"))){
if(Arrays.asList(productCodes).contains(goodsObject.get("productCode"))){
ordersList.add(orders2);
}else{
ordersList2.add(orders2);
}
}
}
//得到当前能用优惠券的商品总金额
Double total_Coupon = 0.0;
//得到其它商品的总金额
Double total_Other = 0.0;
if( ordersList != null && ordersList.size() > 0 ) {
//遍历购物车中能用当前优惠券的商品
for (OrdersEntity entity : ordersList) {
//删除购物车信息
cartService.cancelProduct(entity.getMemberId(), entity.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(entity.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray2 = JSONObject.parseArray(goodsStr);
JSONObject goodsObject2 = (JSONObject) jsonGoodsArray2.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject2.getString("productName"));
orderDatilListEntity.setPcs(entity.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject2.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject2.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_Coupon = total_Coupon + Double.parseDouble(goodsObject2.getString("ecPrice")) * entity.getBuyCount();
basePoint = basePoint + entity.getBasePoint();
orderAddress.setAddressCityName(entity.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(entity.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(entity.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(entity.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(entity.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(entity.getOrderAddress().getAddressProvinceName());
productId.append(entity.getProductCode() + ",");
productName.append(entity.getProductName() + ",");
memberId = entity.getMemberId();
mobile = entity.getPhoneNumber();
buyCount = buyCount + entity.getBuyCount();
}
//校验当前订单金额有没有小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
Double couponAmount = Double.valueOf(jsonObjectData.getString("couponAmount"));
if(total_Coupon < couponAmount){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ? jsonObjectData.getString("discount") : jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
ordersEntity.setCouponTypeId(jsonObjectData.getString("couponTypeId"));
total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_Coupon);
}
if( ordersList2 != null && ordersList2.size() > 0 ) {
//遍历购物车的其它商品
for (OrdersEntity entity2 : ordersList2) {
//删除购物车信息
cartService.cancelProduct(entity2.getMemberId(), entity2.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(entity2.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray3 = JSONObject.parseArray(goodsStr);
JSONObject goodsObject3 = (JSONObject) jsonGoodsArray3.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject3.getString("productName"));
orderDatilListEntity.setPcs(entity2.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject3.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject3.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_Other = total_Other + Double.parseDouble(goodsObject3.getString("ecPrice")) * entity2.getBuyCount();
basePoint = basePoint + entity2.getBasePoint();
orderAddress.setAddressCityName(entity2.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(entity2.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(entity2.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(entity2.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(entity2.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(entity2.getOrderAddress().getAddressProvinceName());
productId.append(entity2.getProductCode() + ",");
productName.append(entity2.getProductName() + ",");
memberId = entity2.getMemberId();
mobile = entity2.getPhoneNumber();
buyCount = buyCount + entity2.getBuyCount();
}
total_fee = total_fee + total_Other;
}
}else{
for (OrdersEntity ordersEntitys : ordersEntityList) {
//删除购物车信息
cartService.cancelProduct(ordersEntitys.getMemberId(), ordersEntity.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(ordersEntitys.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject)jsonGoodsArray.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject.getString("productName"));
orderDatilListEntity.setPcs(ordersEntitys.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_fee = total_fee + Double.parseDouble(goodsObject.getString("ecPrice")) * ordersEntitys.getBuyCount();
basePoint = basePoint + ordersEntitys.getBasePoint();
orderAddress.setAddressCityName(ordersEntitys.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(ordersEntitys.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(ordersEntitys.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(ordersEntitys.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(ordersEntitys.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(ordersEntitys.getOrderAddress().getAddressProvinceName());
productId.append(ordersEntitys.getProductCode()+",");
productName.append(ordersEntitys.getProductName()+",");
memberId = ordersEntitys.getMemberId();
if (ordersEntitys.getCouponCode() != "" && ordersEntitys.getCouponCode() != null) {
couponCode = ordersEntitys.getCouponCode();
}
mobile = ordersEntitys.getPhoneNumber();
buyCount = buyCount + ordersEntitys.getBuyCount();
}
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ? jsonObjectData.getString("discount") : jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
ordersEntity.setCouponTypeId(jsonObjectData.getString("couponTypeId"));
total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_fee);
}
}else{
for (OrdersEntity ordersEntitys : ordersEntityList) {
//删除购物车信息
cartService.cancelProduct(ordersEntitys.getMemberId(), ordersEntity.getProductCode());
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(ordersEntitys.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject)jsonGoodsArray.get(0);
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject.getString("productName"));
orderDatilListEntity.setPcs(ordersEntitys.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
total_fee = total_fee + Double.parseDouble(goodsObject.getString("ecPrice")) * ordersEntitys.getBuyCount();
basePoint = basePoint + ordersEntitys.getBasePoint();
orderAddress.setAddressCityName(ordersEntitys.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(ordersEntitys.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(ordersEntitys.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(ordersEntitys.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(ordersEntitys.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(ordersEntitys.getOrderAddress().getAddressProvinceName());
productId.append(ordersEntitys.getProductCode()+",");
productName.append(ordersEntitys.getProductName()+",");
memberId = ordersEntitys.getMemberId();
mobile = ordersEntitys.getPhoneNumber();
buyCount = buyCount + ordersEntitys.getBuyCount();
}
}
ordersEntity.setOrderAddress(orderAddress);
ordersEntity.setProductCode(productId.substring(0,productId.length()-1));
ordersEntity.setProductName(productName.substring(0,productName.length()-1));
ordersEntity.setOrderAmount(StringUtil.toString(total_fee));
ordersEntity.setMemberId(memberId);
ordersEntity.setPhoneNumber(mobile);
ordersEntity.setBuyCount(buyCount);
ordersEntity.setOrderNo(GenerateSequenceUtil.generateSequenceNo());
ordersEntity.setOrderStatus("0");
ordersEntity.setBasePoint(basePoint);
ordersEntity.setPayType("3");
resultMsg = orderService.generateOrder(ordersEntity, orderDatilListJson);
if (resultMsg.get("code").equals("1")) {
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(StringUtil.toString(total_fee));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
Map<String, String> returnMap = new HashMap<>();
returnMap.put("orderNumber", ordersEntity.getOrderNo());
returnMap.put("orderAmount", ordersEntity.getOrderAmount());
return ResponseDTO.succData(returnMap,wxpayService.dounifiedOrder(wxPayEntity));
}else if (resultMsg.get("code").equals("0")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_ERROR,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("3")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_FAIL_COUPONDED,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("4")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL,resultMsg.get("msg"));
}
}catch (Exception e){
System.out.println(e.getMessage());
}
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL,resultMsg.get("msg"));
} }
@ -626,7 +85,7 @@ public class OrderController {
int buyCount = 0; int buyCount = 0;
double total_fee = 0 ; double total_fee = 0 ;
double basePoint = 0 ; double basePoint = 0 ;
WxPayEntity wxPayEntity = new WxPayEntity(); WxPayEntity wxPayEntity = new WxPayEntity();--------
JSONArray orderDatilListJson = new JSONArray(); JSONArray orderDatilListJson = new JSONArray();
OrdersEntity ordersEntity = new OrdersEntity(); OrdersEntity ordersEntity = new OrdersEntity();
OrderAddress orderAddress = new OrderAddress(); OrderAddress orderAddress = new OrderAddress();

View File

@ -7,7 +7,6 @@ public class OrderResponseCodeConst extends ResponseCodeConst {
public static final OrderResponseCodeConst COUPON_USE_FAIL = new OrderResponseCodeConst(9001, "优惠卷使用失败!"); public static final OrderResponseCodeConst COUPON_USE_FAIL = new OrderResponseCodeConst(9001, "优惠卷使用失败!");
public static final OrderResponseCodeConst GENERATE_ORDER_FAIL = new OrderResponseCodeConst(9002, "订单生成失败!"); public static final OrderResponseCodeConst GENERATE_ORDER_FAIL = new OrderResponseCodeConst(9002, "订单生成失败!");
public static final OrderResponseCodeConst GENERATE_FAIL = new OrderResponseCodeConst(9003, "数据生成失败!"); public static final OrderResponseCodeConst GENERATE_FAIL = new OrderResponseCodeConst(9003, "数据生成失败!");

View File

@ -10,6 +10,7 @@ import net.lab1024.smartadmin.module.system.royalcanin.CouponService;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponCancelEntity; import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponCancelEntity;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponCosumeEntity; import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponCosumeEntity;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponFetchEntity; import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponFetchEntity;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponGetAllEntity;
import net.lab1024.smartadmin.module.system.royalcanin.domain.RoyalcaninOperateLogEntity; import net.lab1024.smartadmin.module.system.royalcanin.domain.RoyalcaninOperateLogEntity;
import net.lab1024.smartadmin.module.system.royalcanin.domain.RoyalcaninOperateLogService; import net.lab1024.smartadmin.module.system.royalcanin.domain.RoyalcaninOperateLogService;
import net.lab1024.smartadmin.module.system.royalcanin.good.constant.OrderResponseCodeConst; import net.lab1024.smartadmin.module.system.royalcanin.good.constant.OrderResponseCodeConst;
@ -17,13 +18,15 @@ import net.lab1024.smartadmin.module.system.royalcanin.good.dao.OrdersDao;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderAddress; import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderAddress;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderEntity; import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrdersEntity; import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrdersEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.ProductMasterQueryEntity;
import net.lab1024.smartadmin.module.system.royalcanin.notify.service.NotifyService; import net.lab1024.smartadmin.module.system.royalcanin.notify.service.NotifyService;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.AddOrSaveEntity; import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.AddOrSaveEntity;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.OrderCouponEntity; import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.OrderCouponEntity;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.OrderDatilListEntity;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.QueryEntity; import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.QueryEntity;
import net.lab1024.smartadmin.util.AESUtil; import net.lab1024.smartadmin.module.system.wxpay.WxpayService;
import net.lab1024.smartadmin.util.MapRemoveNullUtil; import net.lab1024.smartadmin.module.system.wxpay.wxPayModel.WxPayEntity;
import net.lab1024.smartadmin.util.SmartHttpUtil; import net.lab1024.smartadmin.util.*;
import net.sf.json.JSONArray; import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -32,7 +35,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@ -41,6 +46,18 @@ public class OrderService {
@Autowired @Autowired
private CouponService couponService; private CouponService couponService;
@Autowired
private GoodService goodService;
@Autowired
private OrderService orderService;
@Autowired
private CartService cartService;
@Autowired
private WxpayService wxpayService;
@Autowired @Autowired
private RoyalcaninOperateLogService royalcaninOperateLogService; private RoyalcaninOperateLogService royalcaninOperateLogService;
@ -342,4 +359,378 @@ public class OrderService {
return ordersDao.updateByOrderNumber(orderNumber); return ordersDao.updateByOrderNumber(orderNumber);
} }
public BigDecimal computeTotal(String couponTypeId, BigDecimal discount, BigDecimal total) {
BigDecimal endTotal = new BigDecimal("0");
switch (couponTypeId)
{
// case "5" :
// endTotal = (total * (buyCount-1)) + (total * discount);
// break;
case "2":
//total - discount
endTotal = total.subtract(discount);
break;
case "3":
//total *(1 - discount)
endTotal = total.multiply(new BigDecimal("1").subtract(discount));
break;
case "1" :
//total - discount
endTotal = total.subtract(discount);
break;
case "4" :
//total *(1 - discount)
endTotal = total.multiply(new BigDecimal("1").subtract(discount));
break;
case "6" :
//total - discount
endTotal = total.subtract(discount);
break;
}
return endTotal;
}
//
public ResponseDTO<Map<String, String>> createOrderWXInfo(List<OrdersEntity> ordersEntityList) {
Map<String, String> resultMsg = new HashMap<>();
BigDecimal total_fee = new BigDecimal("0");
WxPayEntity wxPayEntity = new WxPayEntity();
JSONArray orderDatilListJson = new JSONArray();
OrdersEntity ordersEntity = new OrdersEntity();
JSONObject couponJson = null;
String memberId = null;
String couponCode = null;
try {
//先查订单存在的优惠券
for (OrdersEntity orders : ordersEntityList){
if (SmartStringUtil.isNotEmpty(orders.getCouponCode())) {
couponCode = orders.getCouponCode();
}
memberId = orders.getMemberId();
}
//根据有没有优惠券来计算商品的总价
if(SmartStringUtil.isNotEmpty(couponCode)){
CouponGetAllEntity couponGetAllEntity = new CouponGetAllEntity();
couponGetAllEntity.setMemberId(memberId);
couponGetAllEntity.setCouponCode(couponCode);
String couponInfo = couponService.couponGetAll(couponGetAllEntity);
JSONObject jsonObject = JSONObject.parseObject(couponInfo);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
if(jsonArray.size() == 0){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
JSONObject jsonObjectData = (JSONObject) jsonArray.get(0);
if (jsonObjectData.getString("udf2") != null){
if (!jsonObjectData.getString("udf2").equals("H5")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//得到其它商品的总金额
BigDecimal total_Other = new BigDecimal("0");
//根据productCodes来判断优惠券的类型,空的话就是通用券不是空就是指定类别券
if(SmartStringUtil.isNotBlank(jsonObjectData.getString("productCodes"))){
// BigDecimal total_Coupon = new BigDecimal("0");
Map<String, Object> resultMap = addOrdersEntityInfo(ordersEntityList, ordersEntity, jsonObjectData,total_fee);
//ordersEntity = (OrdersEntity) resultMap.get("ordersEntity");
orderDatilListJson = (JSONArray) resultMap.get("orderDatilListJson");
//得到当前能用优惠券的商品总金额
BigDecimal total_Coupon = (BigDecimal) resultMap.get("total_Coupon");
//校验当前订单金额小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
BigDecimal couponAmount = new BigDecimal(jsonObjectData.getString("couponAmount"));
if(total_Coupon.compareTo(couponAmount) == -1){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//设置ordersEntity的参数
addOrdersEntity(jsonObjectData, ordersEntity);
//total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_Coupon);
//得出指定类用完优惠券后的金额
total_Coupon = orderService.computeTotal(ordersEntity.getCouponTypeId(), new BigDecimal(ordersEntity.getCouponAmount()), total_Coupon);
//得出最终实际的支付金额
total_fee = total_Other.add(total_Coupon);
}else{//通用类优惠券的实际支付逻辑
Map<String, Object> resultMap = addOrdersEntityInfo(ordersEntityList, ordersEntity, couponJson, total_fee);
//ordersEntity = (OrdersEntity) resultMap.get("ordersEntity");
orderDatilListJson = (JSONArray) resultMap.get("orderDetailJson");
//校验当前订单金额小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
BigDecimal couponAmount = new BigDecimal(jsonObjectData.getString("couponAmount"));
BigDecimal orderAmount = new BigDecimal(ordersEntity.getOrderAmount());
if(orderAmount.compareTo(couponAmount) == -1){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//校验当前订单金额小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
BigDecimal couponAmount = new BigDecimal(jsonObjectData.getString("couponAmount"));
if(total_fee.compareTo(couponAmount) == -1){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//设置ordersEntity的参数
addOrdersEntity(jsonObjectData, ordersEntity);
//total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_fee);
total_fee = orderService.computeTotal(ordersEntity.getCouponTypeId(), new BigDecimal(ordersEntity.getCouponAmount()),new BigDecimal(ordersEntity.getOrderAmount()));
}
}else{//没有优惠券的计算总价逻辑
Map<String, Object> resultMap = addOrdersEntityInfo(ordersEntityList, ordersEntity, couponJson, total_fee);
}
ordersEntity.setMemberId(memberId);
ordersEntity.setOrderAmount(StringUtil.toString(total_fee));
ordersEntity.setOrderNo(GenerateSequenceUtil.generateSequenceNo());
ordersEntity.setOrderStatus("0");
ordersEntity.setPayType("3");
resultMsg = orderService.generateOrder(ordersEntity, orderDatilListJson);
if (resultMsg.get("code").equals("1")) {
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(StringUtil.toString(total_fee));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
Map<String, String> returnMap = new HashMap<>();
returnMap.put("orderNumber", ordersEntity.getOrderNo());
returnMap.put("orderAmount", ordersEntity.getOrderAmount());
return ResponseDTO.succData(returnMap, wxpayService.generateQRCode(wxPayEntity));
}else if (resultMsg.get("code").equals("0")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_ERROR,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("3")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_FAIL_COUPONDED,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("4")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL,resultMsg.get("msg"));
}
}catch (Exception e){
System.out.println(e.getMessage());
}
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL,resultMsg.get("msg"));
}
//提交订单生成逻辑
public ResponseDTO<Map<String, String>> createOrderWXH5Info(List<OrdersEntity> ordersEntityList) {
Map<String, String> resultMsg = new HashMap<>();
BigDecimal total_fee = new BigDecimal("0");
WxPayEntity wxPayEntity = new WxPayEntity();
JSONArray orderDatilListJson = new JSONArray();
OrdersEntity ordersEntity = new OrdersEntity();
JSONObject couponJson = null;
String memberId = null;
String couponCode = null;
try {
//先查订单存在的优惠券
for (OrdersEntity orders : ordersEntityList){
if (SmartStringUtil.isNotEmpty(orders.getCouponCode())) {
couponCode = orders.getCouponCode();
}
memberId = orders.getMemberId();
}
//根据有没有优惠券来计算商品的总价
if(SmartStringUtil.isNotEmpty(couponCode)){
CouponGetAllEntity couponGetAllEntity = new CouponGetAllEntity();
couponGetAllEntity.setMemberId(memberId);
couponGetAllEntity.setCouponCode(couponCode);
String couponInfo = couponService.couponGetAll(couponGetAllEntity);
JSONObject jsonObject = JSONObject.parseObject(couponInfo);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
if(jsonArray.size() == 0){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
JSONObject jsonObjectData = (JSONObject) jsonArray.get(0);
if (jsonObjectData.getString("udf2") != null){
if (!jsonObjectData.getString("udf2").equals("H5")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//得到其它商品的总金额
BigDecimal total_Other = new BigDecimal("0");
//根据productCodes来判断优惠券的类型,空的话就是通用券不是空就是指定类别券
if(SmartStringUtil.isNotBlank(jsonObjectData.getString("productCodes"))){
// BigDecimal total_Coupon = new BigDecimal("0");
Map<String, Object> resultMap = addOrdersEntityInfo(ordersEntityList, ordersEntity, jsonObjectData,total_fee);
//ordersEntity = (OrdersEntity) resultMap.get("ordersEntity");
orderDatilListJson = (JSONArray) resultMap.get("orderDatilListJson");
//得到当前能用优惠券的商品总金额
BigDecimal total_Coupon = (BigDecimal) resultMap.get("total_Coupon");
//校验当前订单金额小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
BigDecimal couponAmount = new BigDecimal(jsonObjectData.getString("couponAmount"));
if(total_Coupon.compareTo(couponAmount) == -1){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//设置ordersEntity的参数
addOrdersEntity(jsonObjectData, ordersEntity);
//total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_Coupon);
//得出指定类用完优惠券后的金额
total_Coupon = orderService.computeTotal(ordersEntity.getCouponTypeId(), new BigDecimal(ordersEntity.getCouponAmount()), total_Coupon);
//得出最终实际的支付金额
total_fee = total_Other.add(total_Coupon);
}else{//通用类优惠券的实际支付逻辑
Map<String, Object> resultMap = addOrdersEntityInfo(ordersEntityList, ordersEntity, couponJson, total_fee);
//ordersEntity = (OrdersEntity) resultMap.get("ordersEntity");
orderDatilListJson = (JSONArray) resultMap.get("orderDetailJson");
//校验当前订单金额小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
BigDecimal couponAmount = new BigDecimal(jsonObjectData.getString("couponAmount"));
BigDecimal orderAmount = new BigDecimal(ordersEntity.getOrderAmount());
if(orderAmount.compareTo(couponAmount) == -1){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//校验当前订单金额小于优惠券金额
if(jsonObjectData.getString("couponAmount") != null ){
BigDecimal couponAmount = new BigDecimal(jsonObjectData.getString("couponAmount"));
if(total_fee.compareTo(couponAmount) == -1){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL);
}
}
//设置ordersEntity的参数
addOrdersEntity(jsonObjectData, ordersEntity);
//total_fee = orderService.couponTotal(ordersEntity.getCouponTypeId(), Double.parseDouble(ordersEntity.getCouponAmount()), total_fee);
total_fee = orderService.computeTotal(ordersEntity.getCouponTypeId(), new BigDecimal(ordersEntity.getCouponAmount()),new BigDecimal(ordersEntity.getOrderAmount()));
}
}else{//没有优惠券的计算总价逻辑
Map<String, Object> resultMap = addOrdersEntityInfo(ordersEntityList, ordersEntity, couponJson, total_fee);
}
ordersEntity.setMemberId(memberId);
ordersEntity.setOrderAmount(StringUtil.toString(total_fee));
ordersEntity.setOrderNo(GenerateSequenceUtil.generateSequenceNo());
ordersEntity.setOrderStatus("0");
ordersEntity.setPayType("3");
resultMsg = generateOrder(ordersEntity, orderDatilListJson);
if (resultMsg.get("code").equals("1")) {
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(StringUtil.toString(total_fee));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
Map<String, String> returnMap = new HashMap<>();
returnMap.put("orderNumber", ordersEntity.getOrderNo());
returnMap.put("orderAmount", ordersEntity.getOrderAmount());
return ResponseDTO.succData(returnMap,wxpayService.dounifiedOrder(wxPayEntity));
}else if (resultMsg.get("code").equals("0")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_ERROR,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("3")){
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_FAIL_COUPONDED,resultMsg.get("msg"));
}else if (resultMsg.get("code").equals("4")){
return ResponseDTO.wrap(OrderResponseCodeConst.COUPON_USE_FAIL,resultMsg.get("msg"));
}
}catch (Exception e){
System.out.println(e.getMessage());
}
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL,resultMsg.get("msg"));
}
//计算无优惠券通用券商品总价等信息
private Map<String, Object> addOrdersEntityInfo(List<OrdersEntity> ordersEntityList, OrdersEntity ordersEntity, JSONObject couponJson, BigDecimal total_fee) throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
JSONArray orderDatilListJson = new JSONArray();
OrderAddress orderAddress = new OrderAddress();
StringBuffer productId = new StringBuffer();
StringBuffer productName = new StringBuffer();
//BigDecimal total_fee = new BigDecimal("0");
BigDecimal total_Coupon = new BigDecimal("0");
String[] productCodes = null;
Boolean isExist = false;
double basePoint = 0 ;
String mobile = "";
int buyCount = 0;
//判断是否属于指定类
if(couponJson != null && SmartStringUtil.isNotBlank(couponJson.getString("productCodes"))){
isExist = true;
productCodes = couponJson.getString("productCodes").toString().split(",");
}
for (OrdersEntity order : ordersEntityList) {
//从crm获取商品的json数据信息
JSONObject goodsObject = gainGoodsObject(order);
//删除购物车信息
cartService.cancelProduct(order.getMemberId(), order.getProductCode());
//拼接商品数据信息得到
splicingOrderDetail(order, goodsObject, orderDatilListJson);
//设置订单地址信息
addOrderAddress(orderAddress, order);
//筛选能用当前优惠券的商品3
if(isExist && Arrays.asList(productCodes).contains(goodsObject.get("productCode"))){
//计算商品价格数量basepoint相关信息
total_Coupon = calculationTotal(order, goodsObject, total_Coupon);
}else{
//计算商品价格数量basepoint相关信息
total_fee = calculationTotal(order, goodsObject, total_fee);
}
buyCount = buyCount + order.getBuyCount();
basePoint = basePoint + order.getBasePoint();
productId.append(order.getProductCode() + ",");
productName.append(order.getProductName() + ",");
mobile = order.getPhoneNumber();
}
ordersEntity.setOrderAddress(orderAddress);
ordersEntity.setCouponAmount(ordersEntity.getCouponAmount());
ordersEntity.setOrderAmount(StringUtil.toString(total_fee));
ordersEntity.setBuyCount(buyCount);
ordersEntity.setBasePoint(basePoint);
ordersEntity.setPhoneNumber(mobile);
ordersEntity.setProductCode(productId.substring(0, productId.length()-1));
ordersEntity.setProductName(productName.substring(0, productName.length()-1));
map.put("ordersEntity", ordersEntity);
map.put("orderDetailJson", orderDatilListJson);
map.put("total_Coupon", "total_Coupon");
return map;
}
private JSONObject gainGoodsObject(OrdersEntity appointCoupon) throws Exception {
//存储orderDetailList
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
productMasterQueryEntity.setProductCode(appointCoupon.getProductCode());
String goodsStr = goodService.productQuery(productMasterQueryEntity);
com.alibaba.fastjson.JSONArray jsonGoodsArray = JSONObject.parseArray(goodsStr);
JSONObject goodsObject = (JSONObject) jsonGoodsArray.get(0);
return goodsObject;
}
private void addOrdersEntity(JSONObject jsonObjectData, OrdersEntity ordersEntity) {
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ? jsonObjectData.getString("discount") : jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
ordersEntity.setCouponTypeId(jsonObjectData.getString("couponTypeId"));
}
private BigDecimal calculationTotal(OrdersEntity appointCoupon, JSONObject goodsObject, BigDecimal total_other) {
//total_Coupon = total_Coupon + Double.parseDouble(goodsObject2.getString("ecPrice")) * entity.getBuyCount();
BigDecimal ecPrice = new BigDecimal(goodsObject.getString("ecPrice"));
BigDecimal buyCounts = new BigDecimal(appointCoupon.getBuyCount());
total_other = total_other.add(ecPrice.multiply(buyCounts)) ;
return total_other;
}
private void addOrderAddress(OrderAddress orderAddress, OrdersEntity appointCoupon) {
orderAddress.setAddressCityName(appointCoupon.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(appointCoupon.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(appointCoupon.getOrderAddress().getAddressDetailInfo());
orderAddress.setAddressPhoneNumber(appointCoupon.getOrderAddress().getAddressPhoneNumber());
orderAddress.setAddressUserName(appointCoupon.getOrderAddress().getAddressUserName());
orderAddress.setAddressProvinceName(appointCoupon.getOrderAddress().getAddressProvinceName());
}
private void splicingOrderDetail(OrdersEntity appointCoupon, JSONObject goodsObject, JSONArray orderDatilListJson) {
OrderDatilListEntity orderDatilListEntity = new OrderDatilListEntity();
orderDatilListEntity.setProductName(goodsObject.getString("productName"));
orderDatilListEntity.setPcs(appointCoupon.getBuyCount());
orderDatilListEntity.setProductCode(goodsObject.getString("productCode"));
orderDatilListEntity.setEcPrice(goodsObject.getString("ecPrice"));
orderDatilListJson.add(orderDatilListEntity);
}
} }