|
@@ -1,6 +1,7 @@
|
|
|
package com.kmall.api.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.kmall.api.contants.Dict;
|
|
|
import com.kmall.api.dao.*;
|
|
|
import com.kmall.api.entity.*;
|
|
|
import com.kmall.api.util.CommonUtil;
|
|
@@ -20,6 +21,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
@@ -49,6 +51,8 @@ public class ApiOrderService {
|
|
|
private ApiGoodsGroupOpenDetailMapper apiGoodsGroupOpenDetailMapper;
|
|
|
@Autowired
|
|
|
private FormIdsService formIdsService;
|
|
|
+ @Autowired
|
|
|
+ private ApiGoodsMapper apiGoodsMapper;
|
|
|
|
|
|
public OrderVo queryObject(Long id) {
|
|
|
return apiOrderMapper.queryObject(id);
|
|
@@ -72,7 +76,6 @@ public class ApiOrderService {
|
|
|
return apiOrderMapper.queryTotal(map);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
public void save(OrderVo order) {
|
|
|
apiOrderMapper.save(order);
|
|
|
}
|
|
@@ -98,6 +101,7 @@ public class ApiOrderService {
|
|
|
}
|
|
|
|
|
|
public void update(OrderVo order) {
|
|
|
+ order.setIsScan("0");
|
|
|
apiOrderMapper.update(order);
|
|
|
}
|
|
|
|
|
@@ -117,19 +121,22 @@ public class ApiOrderService {
|
|
|
Map resultObj = new HashMap();
|
|
|
|
|
|
Integer userCouponId = jsonParam.getInteger("userCouponId");
|
|
|
- String postscript = jsonParam.getString("postscript");
|
|
|
- Long fullCutCouponId = jsonParam.getLong("fullCutCouponId");
|
|
|
- AddressVo addressVo = jsonParam.getObject("checkedAddress", AddressVo.class);
|
|
|
String formId = jsonParam.getString("formId");
|
|
|
- Date delivery_date = jsonParam.getDate("delivery_date");
|
|
|
- if (null == delivery_date) {
|
|
|
- delivery_date = new Date();
|
|
|
- }
|
|
|
- String delivery_remark = jsonParam.getString("delivery_remark");
|
|
|
- if (StringUtils.isNullOrEmpty(delivery_remark)) {
|
|
|
- delivery_remark = "尽快送达";
|
|
|
- }
|
|
|
- BigDecimal freightPrice = new BigDecimal(10.00);
|
|
|
+ String idNo = jsonParam.getString("idNo");
|
|
|
+ String userName = jsonParam.getString("userName");
|
|
|
+ String postscript00 = jsonParam.getString("postscript00");
|
|
|
+ String postscript02 = jsonParam.getString("postscript02");
|
|
|
+ String postscript10 = jsonParam.getString("postscript10");
|
|
|
+ String postscript11 = jsonParam.getString("postscript11");
|
|
|
+
|
|
|
+
|
|
|
+ // TODO: 2018/10/18 实名认证身份证信息,认证成功更新到用户表
|
|
|
+ UserVo userVo = new UserVo();
|
|
|
+ userVo.setId(loginUser.getId());
|
|
|
+ userVo.setIdNo(idNo);
|
|
|
+ userVo.setUsername(userName);
|
|
|
+ apiUserMapper.update(userVo);
|
|
|
+
|
|
|
//获取要购买的商品
|
|
|
Map param = new HashMap();
|
|
|
param.put("user_id", loginUser.getId());
|
|
@@ -156,10 +163,149 @@ public class ApiOrderService {
|
|
|
productInfo.addSellVolume();
|
|
|
productVos.add(productInfo);
|
|
|
}
|
|
|
+ List<OrderVo> orderInfoList = new ArrayList();
|
|
|
+ OrderVo order00 = null;
|
|
|
+ OrderVo order02 = null;
|
|
|
+ OrderVo order10 = null;
|
|
|
+ OrderVo order11 = null;
|
|
|
+ String merchOrderSn = "EMATO"+new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
|
|
|
+ //订单按业务类型进行分单
|
|
|
+ for (CartVo goodsItem : checkedGoodsList) {
|
|
|
+ //订单业务类型:00:保税备货, 02:保税展示补货,10:保税展示跨境,11:普通商品
|
|
|
+ if(Dict.orderBizType.item_00.getItem().equalsIgnoreCase(goodsItem.getGoodsBizType())){
|
|
|
+ order00 = setOrderVo(loginUser,jsonParam,storeId,checkedGoodsList,goodsItem.getGoodsBizType());
|
|
|
+ order00.setOrderBizType(goodsItem.getGoodsBizType());
|
|
|
+ order00.setMerchOrderSn(merchOrderSn);
|
|
|
+ if(org.apache.commons.lang.StringUtils.isNotEmpty(postscript00)) {
|
|
|
+ order00.setPostscript(postscript00);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(Dict.orderBizType.item_02.getItem().equalsIgnoreCase(goodsItem.getGoodsBizType())){
|
|
|
+ order02 = setOrderVo(loginUser,jsonParam,storeId,checkedGoodsList,goodsItem.getGoodsBizType());
|
|
|
+ order02.setOrderBizType(goodsItem.getGoodsBizType());
|
|
|
+ order02.setMerchOrderSn(merchOrderSn);
|
|
|
+ if(org.apache.commons.lang.StringUtils.isNotEmpty(postscript02)) {
|
|
|
+ order02.setPostscript(postscript02);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(Dict.orderBizType.item_10.getItem().equalsIgnoreCase(goodsItem.getGoodsBizType())){
|
|
|
+ order10 = setOrderVo(loginUser,jsonParam,storeId,checkedGoodsList,goodsItem.getGoodsBizType());
|
|
|
+ order10.setOrderBizType(goodsItem.getGoodsBizType());
|
|
|
+ order10.setMerchOrderSn(merchOrderSn);
|
|
|
+ if(org.apache.commons.lang.StringUtils.isNotEmpty(postscript10)) {
|
|
|
+ order10.setPostscript(postscript10);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(Dict.orderBizType.item_11.getItem().equalsIgnoreCase(goodsItem.getGoodsBizType())){
|
|
|
+ order11 = setOrderVo(loginUser,jsonParam,storeId,checkedGoodsList,goodsItem.getGoodsBizType());
|
|
|
+ order11.setOrderBizType(goodsItem.getGoodsBizType());
|
|
|
+ order11.setMerchOrderSn(merchOrderSn);
|
|
|
+ if(org.apache.commons.lang.StringUtils.isNotEmpty(postscript11)) {
|
|
|
+ order11.setPostscript(postscript11);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(order00!=null){
|
|
|
+ orderInfoList.add(order00);
|
|
|
+ }
|
|
|
+ if(order02!=null){
|
|
|
+ orderInfoList.add(order02);
|
|
|
+ }
|
|
|
+ if(order10!=null){
|
|
|
+ orderInfoList.add(order10);
|
|
|
+ }
|
|
|
+ if(order11!=null){
|
|
|
+ orderInfoList.add(order11);
|
|
|
+ }
|
|
|
+
|
|
|
+ //开启事务,插入订单信息和订单商品
|
|
|
+ if(orderInfoList != null && orderInfoList.size() > 0) {
|
|
|
+ apiOrderMapper.saveBatch(orderInfoList);
|
|
|
+
|
|
|
+ for (OrderVo orderInfo : orderInfoList) {
|
|
|
+ if (null == orderInfo.getId()) {
|
|
|
+ throw new RRException("订单提交失败");
|
|
|
+ // resultObj.put("errno", 1);
|
|
|
+ // resultObj.put("errmsg", "订单提交失败");
|
|
|
+ // return resultObj;
|
|
|
+ }
|
|
|
+ //新增订单详情
|
|
|
+ for (CartVo goodsItem : checkedGoodsList) {
|
|
|
+ //统计商品总价
|
|
|
+ List<OrderGoodsVo> orderGoodsData = new ArrayList();
|
|
|
+ if (orderInfo.getOrderBizType().equalsIgnoreCase(goodsItem.getGoodsBizType())) {
|
|
|
+ GoodsVo goodsVo = apiGoodsMapper.queryObject(goodsItem.getGoods_id());
|
|
|
+ if(goodsVo==null){
|
|
|
+ throw new RRException("订单提交失败:商品不存在");
|
|
|
+ }
|
|
|
+ OrderGoodsVo orderGoodsVo = setOrderGoodsVo(orderInfo, goodsItem,goodsVo);
|
|
|
+ apiOrderGoodsMapper.save(orderGoodsVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ProductVo productVo : productVos) {
|
|
|
+ apiProductMapper.updateStockNum(productVo);
|
|
|
+ }
|
|
|
+ // formIds保存
|
|
|
+ formIdsService.save(loginUser.getId(), formId, 1);
|
|
|
+
|
|
|
+ //清空已购买的商品
|
|
|
+ apiCartMapper.deleteByCart(loginUser.getId(), storeId, 1);
|
|
|
+ resultObj.put("errno", 0);
|
|
|
+ resultObj.put("errmsg", "订单提交成功");
|
|
|
+ //
|
|
|
+ Map orderInfoMap = new HashMap();
|
|
|
+ orderInfoMap.put("orderInfo", orderInfoList);
|
|
|
+ resultObj.put("data", orderInfoMap);
|
|
|
+
|
|
|
+ // 优惠券标记已用
|
|
|
+ for (OrderVo orderInfo : orderInfoList) {
|
|
|
+ if (null != userCouponId && 0 != userCouponId) {
|
|
|
+ UserCouponVo userCouponVo = apiUserCouponMapper.queryObject(userCouponId);
|
|
|
+ if (null != userCouponVo && (null == userCouponVo.getOrder_id() || 0 == userCouponVo.getOrder_id())) {
|
|
|
+ userCouponVo.setUsed_time(new Date());
|
|
|
+ userCouponVo.setOrder_id(orderInfo.getId());
|
|
|
+ apiUserCouponMapper.update(userCouponVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultObj;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置订单数据
|
|
|
+ * @param loginUser
|
|
|
+ * @param jsonParam
|
|
|
+ * @param storeId
|
|
|
+ * @param checkedGoodsList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public OrderVo setOrderVo(UserVo loginUser,JSONObject jsonParam,Long storeId,List<CartVo> checkedGoodsList,String orderBizType){
|
|
|
+ Integer userCouponId = jsonParam.getInteger("userCouponId");
|
|
|
+ String postscript = jsonParam.getString("postscript");
|
|
|
+ Long fullCutCouponId = jsonParam.getLong("fullCutCouponId");
|
|
|
+// BigDecimal freightPrice = new BigDecimal(10.00);
|
|
|
+ BigDecimal freightPrice = new BigDecimal(0.00);
|
|
|
+ AddressVo addressVo = jsonParam.getObject("checkedAddress", AddressVo.class);
|
|
|
+ Date delivery_date = jsonParam.getDate("delivery_date");
|
|
|
+ if (null == delivery_date) {
|
|
|
+ delivery_date = new Date();
|
|
|
+ }
|
|
|
+ String delivery_remark = jsonParam.getString("delivery_remark");
|
|
|
+ if (StringUtils.isNullOrEmpty(delivery_remark)) {
|
|
|
+ delivery_remark = "尽快送达";
|
|
|
+ }
|
|
|
+
|
|
|
//统计商品总价
|
|
|
BigDecimal goodsTotalPrice = new BigDecimal(0.00);
|
|
|
for (CartVo cartItem : checkedGoodsList) {
|
|
|
- goodsTotalPrice = goodsTotalPrice.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
|
|
|
+ if(orderBizType.equalsIgnoreCase(cartItem.getGoodsBizType())){
|
|
|
+ goodsTotalPrice = goodsTotalPrice.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//获取订单使用的优惠券
|
|
@@ -173,19 +319,19 @@ public class ApiOrderService {
|
|
|
}
|
|
|
}
|
|
|
// 获取优惠信息提示
|
|
|
- Map couponParam = new HashMap();
|
|
|
- couponParam.put("enabled", true);
|
|
|
- Integer[] send_types = new Integer[]{7};
|
|
|
- couponParam.put("send_types", send_types);
|
|
|
- List<CouponVo> couponVos = apiCouponMapper.queryList(couponParam);
|
|
|
- if (null != couponVos && couponVos.size() > 0) {
|
|
|
- for (CouponVo couponVo : couponVos) {
|
|
|
- // 是否免运费
|
|
|
- if (couponVo.getSend_type() == 7 && couponVo.getMin_goods_amount().compareTo(goodsTotalPrice) <= 0) {
|
|
|
- freightPrice = couponVo.getType_money();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+// Map couponParam = new HashMap();
|
|
|
+// couponParam.put("enabled", true);
|
|
|
+// Integer[] send_types = new Integer[]{7};
|
|
|
+// couponParam.put("send_types", send_types);
|
|
|
+// List<CouponVo> couponVos = apiCouponMapper.queryList(couponParam);
|
|
|
+// if (null != couponVos && couponVos.size() > 0) {
|
|
|
+// for (CouponVo couponVo : couponVos) {
|
|
|
+// // 是否免运费
|
|
|
+// if (couponVo.getSend_type() == 7 && couponVo.getMin_goods_amount().compareTo(goodsTotalPrice) <= 0) {
|
|
|
+// freightPrice = couponVo.getType_money();
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
// 获取优惠信息 满减
|
|
|
BigDecimal fullCutCouponDec = new BigDecimal(0);
|
|
|
CouponVo fullCutCoupon = apiCouponMapper.queryObject(fullCutCouponId);
|
|
@@ -194,10 +340,10 @@ public class ApiOrderService {
|
|
|
}
|
|
|
|
|
|
//订单价格计算
|
|
|
- BigDecimal orderTotalPrice = goodsTotalPrice.add(freightPrice); //订单的总价
|
|
|
+ BigDecimal orderTotalPrice = goodsTotalPrice.add(freightPrice); //订单的总价+运费
|
|
|
|
|
|
BigDecimal actualPrice = orderTotalPrice.subtract(fullCutCouponDec).subtract(couponPrice); //减去其它支付的金额后,要实际支付的金额
|
|
|
- //
|
|
|
+
|
|
|
OrderVo orderInfo = new OrderVo();
|
|
|
orderInfo.setOrder_sn(CommonUtil.generateOrderNumber());
|
|
|
orderInfo.setUser_id(loginUser.getId());
|
|
@@ -231,67 +377,40 @@ public class ApiOrderService {
|
|
|
orderInfo.setShipping_status(0);
|
|
|
orderInfo.setPay_status(0);
|
|
|
orderInfo.setShipping_id(0L);
|
|
|
- orderInfo.setShipping_fee(new
|
|
|
-
|
|
|
- BigDecimal(0));
|
|
|
+ orderInfo.setShipping_fee(new BigDecimal(0));
|
|
|
orderInfo.setIntegral(0);
|
|
|
orderInfo.setCoupon_name(couponName);
|
|
|
- orderInfo.setIntegral_money(new
|
|
|
+ orderInfo.setIntegral_money(new BigDecimal(0));
|
|
|
+ orderInfo.setCreateTime(new Date());
|
|
|
+ orderInfo.setModTime(new Date());
|
|
|
+ orderInfo.setPayMobile(loginUser.getMobile());
|
|
|
+ orderInfo.setPayTransactionId("");
|
|
|
+ orderInfo.setIsScan("0");//默认未扫描
|
|
|
+ return orderInfo;
|
|
|
+ }
|
|
|
|
|
|
- BigDecimal(0));
|
|
|
- //开启事务,插入订单信息和订单商品
|
|
|
- apiOrderMapper.save(orderInfo);
|
|
|
- if (null == orderInfo.getId()) {
|
|
|
- throw new RRException("订单提交失败");
|
|
|
-// resultObj.put("errno", 1);
|
|
|
-// resultObj.put("errmsg", "订单提交失败");
|
|
|
-// return resultObj;
|
|
|
- }
|
|
|
- for (ProductVo productVo : productVos) {
|
|
|
- apiProductMapper.updateStockNum(productVo);
|
|
|
- }
|
|
|
- // formIds保存
|
|
|
- formIdsService.save(orderInfo.getUser_id(), formId, 1);
|
|
|
- //统计商品总价
|
|
|
- List<OrderGoodsVo> orderGoodsData = new ArrayList();
|
|
|
- for (CartVo goodsItem : checkedGoodsList) {
|
|
|
- OrderGoodsVo orderGoodsVo = new OrderGoodsVo();
|
|
|
- orderGoodsVo.setOrder_id(orderInfo.getId());
|
|
|
- orderGoodsVo.setGoods_id(goodsItem.getGoods_id());
|
|
|
- orderGoodsVo.setGoods_sn(goodsItem.getGoods_sn());
|
|
|
- orderGoodsVo.setProduct_id(goodsItem.getProduct_id());
|
|
|
- orderGoodsVo.setGoods_name(goodsItem.getGoods_name());
|
|
|
- orderGoodsVo.setList_pic_url(goodsItem.getList_pic_url());
|
|
|
- orderGoodsVo.setMarket_price(goodsItem.getMarket_price());
|
|
|
- orderGoodsVo.setRetail_price(goodsItem.getRetail_price());
|
|
|
- orderGoodsVo.setNumber(goodsItem.getNumber());
|
|
|
- orderGoodsVo.setGoods_specification_name_value(goodsItem.getGoods_specification_name_value());
|
|
|
- orderGoodsVo.setGoods_specification_ids(goodsItem.getGoods_specification_ids());
|
|
|
- orderGoodsData.add(orderGoodsVo);
|
|
|
- apiOrderGoodsMapper.save(orderGoodsVo);
|
|
|
- }
|
|
|
|
|
|
- //清空已购买的商品
|
|
|
- apiCartMapper.deleteByCart(loginUser.getId(), storeId, 1);
|
|
|
- resultObj.put("errno", 0);
|
|
|
- resultObj.put("errmsg", "订单提交成功");
|
|
|
- //
|
|
|
- Map orderInfoMap = new HashMap();
|
|
|
- orderInfoMap.put("orderInfo", orderInfo);
|
|
|
- //
|
|
|
- resultObj.put("data", orderInfoMap);
|
|
|
- // 优惠券标记已用
|
|
|
- if (null != userCouponId && 0 != userCouponId) {
|
|
|
- UserCouponVo userCouponVo = apiUserCouponMapper.queryObject(userCouponId);
|
|
|
- if (null != userCouponVo && (null == userCouponVo.getOrder_id() || 0 == userCouponVo.getOrder_id())) {
|
|
|
- userCouponVo.setUsed_time(new Date());
|
|
|
- userCouponVo.setOrder_id(orderInfo.getId());
|
|
|
- apiUserCouponMapper.update(userCouponVo);
|
|
|
- }
|
|
|
- }
|
|
|
- return resultObj;
|
|
|
+ public OrderGoodsVo setOrderGoodsVo(OrderVo orderInfo,CartVo goodsItem,GoodsVo goodsVo){
|
|
|
+ OrderGoodsVo orderGoodsVo = new OrderGoodsVo();
|
|
|
+ orderGoodsVo.setOrder_id(orderInfo.getId());
|
|
|
+ orderGoodsVo.setGoods_id(goodsItem.getGoods_id());
|
|
|
+ orderGoodsVo.setGoods_sn(goodsItem.getGoods_sn());
|
|
|
+ orderGoodsVo.setProduct_id(goodsItem.getProduct_id());
|
|
|
+ orderGoodsVo.setGoods_name(goodsItem.getGoods_name());
|
|
|
+ orderGoodsVo.setList_pic_url(goodsItem.getList_pic_url());
|
|
|
+ orderGoodsVo.setMarket_price(goodsItem.getMarket_price());
|
|
|
+ orderGoodsVo.setRetail_price(goodsItem.getRetail_price());
|
|
|
+ orderGoodsVo.setNumber(goodsItem.getNumber());
|
|
|
+ orderGoodsVo.setGoods_specification_name_value(goodsItem.getGoods_specification_name_value());
|
|
|
+ orderGoodsVo.setGoods_specification_ids(goodsItem.getGoods_specification_ids());
|
|
|
+ orderGoodsVo.setOrderBizType(goodsItem.getGoodsBizType());
|
|
|
+ orderGoodsVo.setCreateTime(new Date());
|
|
|
+ orderGoodsVo.setModTime(new Date());
|
|
|
+
|
|
|
+ orderGoodsVo.setGoodsRate(goodsVo.getGoodsRate());
|
|
|
+ orderGoodsVo.setSettlePrice(new BigDecimal("0"));//商品结算平摊价格=(零售价格*数量)/订单结算总金额
|
|
|
+ return orderGoodsVo;
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
* 支付成功通知
|
|
|
*/
|
|
@@ -460,4 +579,8 @@ public class ApiOrderService {
|
|
|
}
|
|
|
return FeiGeUtils.printMsg(sn, content, "1");
|
|
|
}
|
|
|
+
|
|
|
+ public List<OrderVo> queryObjectByIdList(List<Long> orderIdList){
|
|
|
+ return apiOrderMapper.queryObjectByIdList(orderIdList);
|
|
|
+ }
|
|
|
}
|