|
@@ -3,13 +3,16 @@ package com.caimei.service.order.impl;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.caimei.controller.order.OrderController;
|
|
|
import com.caimei.entity.*;
|
|
|
+import com.caimei.mapper.order.CmShopOrderMapper;
|
|
|
import com.caimei.mapper.order.OrderMapper;
|
|
|
+import com.caimei.mapper.order.OrderProductMapper;
|
|
|
import com.caimei.mapper.products.OrganizeProductsMapper;
|
|
|
import com.caimei.mapper.user.LoginMapper;
|
|
|
import com.caimei.mapper.user.PersonalMapper;
|
|
|
import com.caimei.mapper.user.UserMapper;
|
|
|
import com.caimei.service.order.OrderService;
|
|
|
import com.caimei.utils.AppUtils;
|
|
|
+import com.caimei.utils.MathUtil;
|
|
|
import com.caimei.utils.NoUtils;
|
|
|
import org.apache.commons.lang3.RandomStringUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -38,6 +41,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
private UserMapper userMapper;
|
|
|
@Autowired
|
|
|
private OrganizeProductsMapper organizeProductsMapper;
|
|
|
+ @Autowired
|
|
|
+ private OrderProductMapper orderProductMapper;
|
|
|
+ @Autowired
|
|
|
+ private CmShopOrderMapper cmShopOrderMapper;
|
|
|
|
|
|
@Value("${miniprogram.domain}")
|
|
|
private String domain;
|
|
@@ -218,6 +225,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
boolean isIncludedInstruments = false;//是否包含仪器(默认不包含仪器)
|
|
|
boolean isIncludedProduct = false;//是否包含商品(默认不包含仪器)
|
|
|
CmOrder cmOrder = new CmOrder();
|
|
|
+ List<CmOrderProduct> orderProductList = new ArrayList<>();//整理订单商品列表
|
|
|
+// List<Integer> shopIDs = new ArrayList<>();//整理子订单列表
|
|
|
+ HashMap<Integer, String> shopIDs = new HashMap<>();
|
|
|
Date date = new Date();
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
String dateStr = sdf.format(date);
|
|
@@ -232,11 +242,14 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal payableAmount = new BigDecimal(0);//真实支付金额(订单总额减去抵扣的账户余额)
|
|
|
double balancePayFee = 0d;//余额支付金额
|
|
|
for (Map<String, Object> shopOrderInfo : orderInfoList) {//遍历订单商品信息
|
|
|
- String shopId = (String) shopOrderInfo.get("shopId");
|
|
|
+ Integer shopId = (Integer) shopOrderInfo.get("shopId");
|
|
|
String note = (String) shopOrderInfo.get("note");
|
|
|
Object productInfo = shopOrderInfo.get("productInfo");//一个子订单对应的商品信息
|
|
|
- if (StringUtils.isEmpty(shopId)) return wxJsonModel.error("1001", "供应商数据异常");
|
|
|
+ if (null == shopId) return wxJsonModel.error("1001", "供应商数据异常");
|
|
|
if (null == productInfo) return wxJsonModel.error("1001", "订单商品数据异常");
|
|
|
+// shopIDs.add(shopId);
|
|
|
+ shopIDs.put(shopId,note);
|
|
|
+
|
|
|
//获取子订单商品信息
|
|
|
List<Map<String, Object>> productInfoList = (List<Map<String, Object>>) productInfo;
|
|
|
if (!CollectionUtils.isEmpty(productInfoList)) {
|
|
@@ -249,6 +262,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
CmOrganizeProducts cmOrganizeProducts = organizeProductsMapper.selectProductById(productId);
|
|
|
if (null == cmOrganizeProducts) return wxJsonModel.error("1001", "订单商品数据异常");
|
|
|
if (null == productNum || productNum == 0) return wxJsonModel.error("1001", "商品购买数量异常");
|
|
|
+ Product cmProduct = organizeProductsMapper.selectCmProductById(cmOrganizeProducts.getProductID());
|
|
|
Double retailPrice = cmOrganizeProducts.getRetailPrice();//售价
|
|
|
Integer classifyID = cmOrganizeProducts.getClassifyID();
|
|
|
double productFee = retailPrice * productNum;//单个商品的金额
|
|
@@ -260,6 +274,56 @@ public class OrderServiceImpl implements OrderService {
|
|
|
if(classifyID != 3 && !isIncludedProduct){//判断是否存在商品
|
|
|
isIncludedProduct = true;
|
|
|
}
|
|
|
+
|
|
|
+ /**整理订单商品集合数据*/
|
|
|
+ CmOrderProduct cmOrderProduct = new CmOrderProduct();
|
|
|
+ cmOrderProduct.setShopID(cmOrganizeProducts.getShopID());
|
|
|
+ cmOrderProduct.setProductID(cmOrganizeProducts.getProductID());//此处保存采美库商品Id
|
|
|
+ cmOrderProduct.setOrganizeProductID(cmOrganizeProducts.getId());
|
|
|
+ cmOrderProduct.setOrganizeID(organizeID);
|
|
|
+ //预留在保存保存子订单的时候添加
|
|
|
+// cmOrderProduct.setShopOrderID(0);
|
|
|
+// cmOrderProduct.setShopOrderNo("");
|
|
|
+ cmOrderProduct.setProductNo(null);
|
|
|
+ cmOrderProduct.setNum(productNum);
|
|
|
+ cmOrderProduct.setPresentNum(0);
|
|
|
+ cmOrderProduct.setPrice(retailPrice);
|
|
|
+ cmOrderProduct.setProductUnit(cmProduct.getUnit());
|
|
|
+ cmOrderProduct.setNormalPrice(cmOrganizeProducts.getNormalPrice());
|
|
|
+ cmOrderProduct.setCostPrice(cmOrganizeProducts.getNormalPrice());
|
|
|
+ cmOrderProduct.setShopProductAmount(cmOrganizeProducts.getCostPrice() * productNum);//商品费=成本价快照*(购买数量 + 赠品数量)
|
|
|
+ cmOrderProduct.setPrice0(retailPrice);
|
|
|
+ cmOrderProduct.setPrice1(retailPrice);
|
|
|
+ cmOrderProduct.setTaxRate(0d);
|
|
|
+ cmOrderProduct.setAddedValueTax(0d);
|
|
|
+ cmOrderProduct.setTotalAddedValueTax(0d);
|
|
|
+ cmOrderProduct.setShopFee(cmOrganizeProducts.getCostPrice() * productNum);//应付供应商=成本价 * 商品数量
|
|
|
+ cmOrderProduct.setSingleShopFee(cmOrganizeProducts.getCostPrice());
|
|
|
+ cmOrderProduct.setOtherFee(0d);
|
|
|
+ cmOrderProduct.setSingleOtherFee(0d);
|
|
|
+ cmOrderProduct.setCmFee((cmOrganizeProducts.getRetailPrice() * productNum) - (cmOrganizeProducts.getCostPrice() * productNum));//应付采美=应付金额(应收金额)-应付供应商-应付第三方0-税费0)
|
|
|
+ cmOrderProduct.setSingleCmFee(cmOrganizeProducts.getRetailPrice() - cmOrganizeProducts.getCostPrice());
|
|
|
+ cmOrderProduct.setTotalAmount(cmOrganizeProducts.getRetailPrice() * productNum);
|
|
|
+ cmOrderProduct.setTotalFee(cmOrganizeProducts.getRetailPrice() * productNum);
|
|
|
+ cmOrderProduct.setTotalBeans(0d);
|
|
|
+ cmOrderProduct.setUseBalanceAmount(0d);
|
|
|
+ cmOrderProduct.setDiscountFee(0D);//经理折扣 优惠金额
|
|
|
+ cmOrderProduct.setPreferential(0d);//优惠金额
|
|
|
+ cmOrderProduct.setUseBalanceAmount(0d);
|
|
|
+ cmOrderProduct.setConfirmProductFlag("0");//订单商品供应商确认标志 0否 1是
|
|
|
+ cmOrderProduct.setDiscount(100d);
|
|
|
+ cmOrderProduct.setDiscountPrice(cmOrganizeProducts.getRetailPrice());
|
|
|
+ cmOrderProduct.setShopName(cmOrganizeProducts.getShopName());
|
|
|
+ cmOrderProduct.setName(cmProduct.getName());
|
|
|
+ cmOrderProduct.setPayStatus("0");
|
|
|
+ cmOrderProduct.setBuyAgainFlag("0");
|
|
|
+ cmOrderProduct.setNotOutStore(productNum); // 未出库数量
|
|
|
+ cmOrderProduct.setCommentFlag("0");//是否已评论 1 是 0 未评论
|
|
|
+ cmOrderProduct.setActPreferential(0d);
|
|
|
+ cmOrderProduct.setActType(null);
|
|
|
+ cmOrderProduct.setIsActProduct("0");//非活动商品
|
|
|
+ cmOrderProduct.setProductImage(AppUtils.getImageURL("product", cmProduct.getMainImage(), 0, domain));
|
|
|
+ orderProductList.add(cmOrderProduct);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -287,11 +351,13 @@ public class OrderServiceImpl implements OrderService {
|
|
|
cmOrder.setPayFlag("0");//是否已支付 未支付0 已支付1(设置初始化状态)
|
|
|
|
|
|
/**判断余额使用*/
|
|
|
+ boolean useBalanceFlag = false;//默认不适用余额
|
|
|
if (StringUtils.equals("1", balanceDeductionFlag)) {//勾选余额抵扣
|
|
|
//获取用户最新余额
|
|
|
Double userMoney = personalMapper.ableUserMoney(userId);
|
|
|
logger.info(">>>>>" + userId + "userMoney:" + userMoney);
|
|
|
if (null != userMoney || 0 != userMoney) {
|
|
|
+ useBalanceFlag = true;
|
|
|
BigDecimal bdUserMoney = new BigDecimal(userMoney);
|
|
|
if (payTotalFee > userMoney) {//部分抵扣
|
|
|
balancePayFee = userMoney;
|
|
@@ -322,6 +388,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
cmOrder.setPayFlag("1");
|
|
|
}
|
|
|
cmOrder.setPayTime(dateStr);//支付时间
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -334,7 +401,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
|
|
|
/**初始化主订单参数*/
|
|
|
- cmOrder.setOrderNo(NoUtils.getCmOrderNo("X"));
|
|
|
+ String orderNo = NoUtils.getCmOrderNo("X");
|
|
|
+ cmOrder.setOrderNo(orderNo);
|
|
|
cmOrder.setOrganizeID(organizeID);
|
|
|
cmOrder.setUserID(userId);
|
|
|
cmOrder.setBuyUserID(cmOperationID);//操作者的ID(下单人)
|
|
@@ -368,13 +436,139 @@ public class OrderServiceImpl implements OrderService {
|
|
|
cmOrder.setPayStatus("1");//(付款供应商)付款状态:1待付款、2部分付款、3已付款
|
|
|
cmOrder.setOnlinePayFlag("0");//是否能走线上支付 0可以 1不可以 只能线下
|
|
|
|
|
|
- cmOrder.setShopOrderIDs("");//子订单ID
|
|
|
+ //保存住订单数据
|
|
|
+ orderMapper.insert(cmOrder);
|
|
|
+ Integer orderID = cmOrder.getOrderID();
|
|
|
+ logger.info(">>>>>orderID:"+orderID);
|
|
|
+
|
|
|
+ if(useBalanceFlag){
|
|
|
+ /**添加余额收支记录*/
|
|
|
+ CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
|
|
|
+ cmUserBalanceRecord.setUserId(userId);
|
|
|
+ cmUserBalanceRecord.setType("2");
|
|
|
+ cmUserBalanceRecord.setBalanceType("1");
|
|
|
+ cmUserBalanceRecord.setAddDate(new Date());
|
|
|
+ cmUserBalanceRecord.setAmount(String.valueOf(balancePayFee));
|
|
|
+ cmUserBalanceRecord.setOrderId(cmOrder.getOrderID());
|
|
|
+ cmUserBalanceRecord.setDelFlag("0");
|
|
|
+ userMapper.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
+ /**保存子订单后更新主订单信息*/
|
|
|
+ cmOrder.setShopOrderIDs("");//子订单ID:1000,1002
|
|
|
+
|
|
|
+ /**保存订单商品*/
|
|
|
+ for(CmOrderProduct product:orderProductList){//循环插入数据
|
|
|
+ product.setOrderID(orderID);
|
|
|
+ product.setOrderNo(orderNo);
|
|
|
+ //保存订单商品数据
|
|
|
+ organizeProductsMapper.insert(product);
|
|
|
+ }
|
|
|
|
|
|
- //保存子订单
|
|
|
+ String shopOrderIDs = "";//收集子订单信息
|
|
|
+ /**保存子订单*/
|
|
|
+ Iterator<Map.Entry<Integer, String>> iterator = shopIDs.entrySet().iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ Map.Entry<Integer, String> shopOrder = iterator.next();
|
|
|
+ Integer shopID = shopOrder.getKey();
|
|
|
+ String note = shopOrder.getValue();
|
|
|
|
|
|
- //保存订单商品
|
|
|
+
|
|
|
+ /**统计子订单金额信息*/
|
|
|
+ CmOrderProduct cmOrderProduct = new CmOrderProduct();
|
|
|
+ cmOrderProduct.setOrderID(cmOrder.getOrderID());
|
|
|
+ cmOrderProduct.setShopID(shopID);
|
|
|
+ //查询属于该供应商的所有订单商品信息
|
|
|
+ List<CmOrderProduct> cmOrderProductList = orderProductMapper.findList(cmOrderProduct);
|
|
|
+ BigDecimal totalAmount = new BigDecimal(0); // 订单总金额
|
|
|
+ BigDecimal productAmount = new BigDecimal(0); //商品总金额
|
|
|
+ BigDecimal needPayAmount = new BigDecimal(0);//需要支付金额
|
|
|
+ BigDecimal preferential = new BigDecimal(0);// 优惠金额
|
|
|
+ BigDecimal fee = new BigDecimal(0);//运费
|
|
|
+ BigDecimal brokerage = new BigDecimal(0);//佣金
|
|
|
+ Double shopProductAmount = 0D;//商品费
|
|
|
+ Double shopTaxFee = 0D; //付给供应商税费
|
|
|
+ Integer itemCount = 0;//总数
|
|
|
+ Integer buyNum = 0;//总购买数
|
|
|
+ Integer presentNum = 0;//总赠送数
|
|
|
+ //计算子订单信息
|
|
|
+ for (CmOrderProduct orderProduct : cmOrderProductList) {
|
|
|
+ productAmount = MathUtil.add(productAmount, orderProduct.getTotalAmount());//商品总金额 包括赠品
|
|
|
+ totalAmount = MathUtil.add(totalAmount, orderProduct.getTotalFee());//订单总金额 包括税费
|
|
|
+ needPayAmount = MathUtil.add(needPayAmount, orderProduct.getShouldPayFee()); //应付金额
|
|
|
+ buyNum += orderProduct.getNum();//总购买数
|
|
|
+ itemCount += (orderProduct.getNum() + orderProduct.getPresentNum());
|
|
|
+ preferential = MathUtil.add(preferential, orderProduct.getPreferential());
|
|
|
+ brokerage = MathUtil.add(brokerage, orderProduct.getCmFee());
|
|
|
+ shopProductAmount += (orderProduct.getShopProductAmount() == null ? 0D : orderProduct.getShopProductAmount());
|
|
|
+ }
|
|
|
+
|
|
|
+ //初始化子订单信息
|
|
|
+ CmShopOrder cmShopOrder = new CmShopOrder();
|
|
|
+ cmShopOrder.setClubID(clubID);
|
|
|
+ cmShopOrder.setSpID(null);
|
|
|
+ cmShopOrder.setMainSpID(null);
|
|
|
+ cmShopOrder.setOrderID(orderID);
|
|
|
+ cmShopOrder.setOrderNo(orderNo);
|
|
|
+ cmShopOrder.setUserID(userId);
|
|
|
+ cmShopOrder.setNote(note);
|
|
|
+ cmShopOrder.setOrderTime(dateStr);
|
|
|
+ cmShopOrder.setDiscountFee(0d);
|
|
|
+ cmShopOrder.setCanRefundFlag(1);
|
|
|
+ cmShopOrder.setCanRefundAmount(needPayAmount.doubleValue());
|
|
|
+ cmShopOrder.setAccountAmount(0d);
|
|
|
+ cmShopOrder.setBrokerage(brokerage.doubleValue());//佣金 采美应收
|
|
|
+ cmShopOrder.setBuyStatus("1");
|
|
|
+ cmShopOrder.setPresentNum(0);
|
|
|
+ cmShopOrder.setUseBeanFlag(0);
|
|
|
+ cmShopOrder.setUseBeanAmount(0);
|
|
|
+ cmShopOrder.setUseBalanceFlag(0);
|
|
|
+ cmShopOrder.setRefundStatus(0);
|
|
|
+ cmShopOrder.setRefundsAmount(0d);
|
|
|
+ cmShopOrder.setPayStatus("1");
|
|
|
+ cmShopOrder.setSendOutStatus("1");
|
|
|
+ cmShopOrder.setPayFlag("0");
|
|
|
+ cmShopOrder.setOrderStatusFlag("1");
|
|
|
+ cmShopOrder.setDelFlag("0");
|
|
|
+ cmShopOrder.setItemCount(buyNum);//购买商品数
|
|
|
+ cmShopOrder.setPresentNum(0);//赠送数
|
|
|
+ cmShopOrder.setShopID(shopID);
|
|
|
+ cmShopOrder.setOrderType(1);
|
|
|
+ cmShopOrder.setOrderSubmitType(cmOrder.getOrderSubmitType());
|
|
|
+ cmShopOrder.setTotalAmount(totalAmount.doubleValue());
|
|
|
+ cmShopOrder.setProductAmount(productAmount.doubleValue());
|
|
|
+ cmShopOrder.setNeedPayAmount(needPayAmount.doubleValue());
|
|
|
+ cmShopOrder.setPreferential(preferential.doubleValue());
|
|
|
+ cmShopOrder.setShopProductAmount(shopProductAmount);
|
|
|
+ cmShopOrder.setShopPostFee(0D);//付给供应商运费
|
|
|
+ cmShopOrder.setShopTaxFee(0D);//付给供应商税费
|
|
|
+ cmShopOrder.setPayedShopAmount(0D);//已付款金额
|
|
|
+ cmShopOrder.setShopOtherFee(0D);//付第三方
|
|
|
+ cmShopOrder.setSplitFlag("0");
|
|
|
+
|
|
|
+ List<CmShopOrder> cmShopOrders1 = cmShopOrderMapper.findMaxShopOrderNo(cmOrder.getOrderID());
|
|
|
+ String shopOrderNo = ""; //子订单编号
|
|
|
+ if (!CollectionUtils.isEmpty(cmShopOrders1)) {
|
|
|
+ shopOrderNo = cmShopOrders1.get(0).getShopOrderNo();
|
|
|
+ cmShopOrder.setShopOrderNo(NoUtils.getCmShopOrderNo(cmOrder.getOrderNo(), Integer.parseInt(shopOrderNo.substring(shopOrderNo.length() - 2, shopOrderNo.length())) + 1));
|
|
|
+ } else {
|
|
|
+ cmShopOrder.setShopOrderNo(NoUtils.getCmShopOrderNo(cmOrder.getOrderNo(), 1));
|
|
|
+ }
|
|
|
+ //保存子订单信息到数据库
|
|
|
+ cmShopOrderMapper.insert(cmShopOrder);
|
|
|
+ shopOrderIDs += ((shopOrderIDs.equals("") ? "" : ",") + cmShopOrder.getShopOrderID());
|
|
|
+ for (CmOrderProduct orderProduct : cmOrderProductList) {
|
|
|
+ orderProduct.setShopOrderID(cmShopOrder.getShopOrderID());
|
|
|
+ orderProduct.setShopOrderNo(cmShopOrder.getShopOrderNo());
|
|
|
+ orderProductMapper.update(orderProduct);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新主订单信息
|
|
|
+ cmOrder.setShopOrderIDs(shopOrderIDs);
|
|
|
+ orderMapper.update(cmOrder);
|
|
|
|
|
|
//地址信息
|
|
|
|
|
@@ -386,7 +580,6 @@ public class OrderServiceImpl implements OrderService {
|
|
|
if (StringUtils.equals("1", cartType)) {//购物车提交后清理购物车
|
|
|
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
return wxJsonModel.success();
|