diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java index c26d854d..7afbd6ee 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java +++ b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java @@ -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.conf.AlipayConfig; 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.good.constant.OrderResponseCodeConst; import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderAddress; @@ -65,553 +64,13 @@ public class OrderController { @ApiOperation(value = "微信支付订单", notes = "生成订单") @PostMapping("royalcanin/generateOrderWX") public ResponseDTO> generateOrderWX(@RequestBody List ordersEntityList){ - StringBuffer productId = new StringBuffer(); - StringBuffer productName = new StringBuffer(); - Map 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 productMasterList = new ArrayList(); - //用来保存指定类的购物车商品数据 - List ordersList = new ArrayList(); - //保存购物车其它的商品 - List ordersList2 = new ArrayList(); - - 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 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")); + return orderService.createOrderWXInfo(ordersEntityList); } @ApiOperation(value = "微信支付H5订单", notes = "生成H5订单") @PostMapping("royalcanin/generateOrderWXH5") public ResponseDTO> generateOrderWXH5(@RequestBody List ordersEntityList){ - StringBuffer productId = new StringBuffer(); - StringBuffer productName = new StringBuffer(); - Map 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 productMasterList = new ArrayList(); - //用来保存指定类的购物车商品数据 - List ordersList = new ArrayList(); - //保存购物车其它的商品 - List ordersList2 = new ArrayList(); - - 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 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")); + return orderService.createOrderWXH5Info(ordersEntityList); } @@ -626,7 +85,7 @@ public class OrderController { int buyCount = 0; double total_fee = 0 ; double basePoint = 0 ; - WxPayEntity wxPayEntity = new WxPayEntity(); + WxPayEntity wxPayEntity = new WxPayEntity();-------- JSONArray orderDatilListJson = new JSONArray(); OrdersEntity ordersEntity = new OrdersEntity(); OrderAddress orderAddress = new OrderAddress(); diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/constant/OrderResponseCodeConst.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/constant/OrderResponseCodeConst.java index ee32608c..f6207b40 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/constant/OrderResponseCodeConst.java +++ b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/constant/OrderResponseCodeConst.java @@ -7,7 +7,6 @@ public class OrderResponseCodeConst extends ResponseCodeConst { 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_FAIL = new OrderResponseCodeConst(9003, "数据生成失败!"); diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/service/OrderService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/service/OrderService.java index 5adf370c..575bdd3d 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/service/OrderService.java +++ b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/service/OrderService.java @@ -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.CouponCosumeEntity; 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.RoyalcaninOperateLogService; 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.OrderEntity; 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.orderMaster.AddOrSaveEntity; 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.util.AESUtil; -import net.lab1024.smartadmin.util.MapRemoveNullUtil; -import net.lab1024.smartadmin.util.SmartHttpUtil; +import net.lab1024.smartadmin.module.system.wxpay.WxpayService; +import net.lab1024.smartadmin.module.system.wxpay.wxPayModel.WxPayEntity; +import net.lab1024.smartadmin.util.*; import net.sf.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -32,7 +35,9 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @@ -41,6 +46,18 @@ public class OrderService { @Autowired private CouponService couponService; + @Autowired + private GoodService goodService; + + @Autowired + private OrderService orderService; + + @Autowired + private CartService cartService; + + @Autowired + private WxpayService wxpayService; + @Autowired private RoyalcaninOperateLogService royalcaninOperateLogService; @@ -54,7 +71,7 @@ public class OrderService { private String url ; @Transactional - public Map generateOrder(OrdersEntity ordersEntity, JSONArray listJson) throws Exception { + public MapgenerateOrder(OrdersEntity ordersEntity, JSONArray listJson) throws Exception { AddOrSaveEntity addOrSaveEntity = new AddOrSaveEntity(); MapresultMap = new HashMap<>(); try { @@ -342,4 +359,378 @@ public class OrderService { 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> createOrderWXInfo(List ordersEntityList) { + Map 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 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 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 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 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> createOrderWXH5Info(List ordersEntityList) { + Map 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 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 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 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 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 addOrdersEntityInfo(List ordersEntityList, OrdersEntity ordersEntity, JSONObject couponJson, BigDecimal total_fee) throws Exception { + Map map = new HashMap(); + 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); + } + + }