|
@@ -1,17 +1,25 @@
|
|
package com.caimei365.order.service.impl;
|
|
package com.caimei365.order.service.impl;
|
|
|
|
|
|
import com.caimei365.order.components.ProductService;
|
|
import com.caimei365.order.components.ProductService;
|
|
|
|
+import com.caimei365.order.mapper.BaseMapper;
|
|
import com.caimei365.order.mapper.OrderClubMapper;
|
|
import com.caimei365.order.mapper.OrderClubMapper;
|
|
import com.caimei365.order.model.ResponseJson;
|
|
import com.caimei365.order.model.ResponseJson;
|
|
|
|
+import com.caimei365.order.model.po.BalanceRecordPo;
|
|
import com.caimei365.order.model.po.OrderPo;
|
|
import com.caimei365.order.model.po.OrderPo;
|
|
import com.caimei365.order.model.po.OrderProductPo;
|
|
import com.caimei365.order.model.po.OrderProductPo;
|
|
|
|
+import com.caimei365.order.model.po.UserBeansHistoryPo;
|
|
|
|
+import com.caimei365.order.service.MessagePushService;
|
|
import com.caimei365.order.service.OrderClubService;
|
|
import com.caimei365.order.service.OrderClubService;
|
|
import com.caimei365.order.utils.MathUtil;
|
|
import com.caimei365.order.utils.MathUtil;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
|
|
+import java.util.Arrays;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
@@ -24,17 +32,24 @@ import java.util.List;
|
|
@Slf4j
|
|
@Slf4j
|
|
@Service
|
|
@Service
|
|
public class OrderClubServiceImpl implements OrderClubService {
|
|
public class OrderClubServiceImpl implements OrderClubService {
|
|
|
|
+ @Resource
|
|
|
|
+ private BaseMapper baseMapper;
|
|
@Resource
|
|
@Resource
|
|
private OrderClubMapper orderClubMapper;
|
|
private OrderClubMapper orderClubMapper;
|
|
@Resource
|
|
@Resource
|
|
private ProductService productService;
|
|
private ProductService productService;
|
|
|
|
+ @Resource
|
|
|
|
+ private MessagePushService messagePushService;
|
|
|
|
+ @Value("${caimei.wwwDomain}")
|
|
|
|
+ private String domain;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 机构确认订单
|
|
* 机构确认订单
|
|
*
|
|
*
|
|
* @param orderId 订单Id
|
|
* @param orderId 订单Id
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ResponseJson<Void> orderClubService(Integer orderId) {
|
|
|
|
|
|
+ public ResponseJson<Void> confirmMainOrder(Integer orderId) {
|
|
OrderPo order = orderClubMapper.getMainOrderByOrderId(orderId);
|
|
OrderPo order = orderClubMapper.getMainOrderByOrderId(orderId);
|
|
if (null == order || 0 != order.getStatus()) {
|
|
if (null == order || 0 != order.getStatus()) {
|
|
// 非待确认订单
|
|
// 非待确认订单
|
|
@@ -54,16 +69,15 @@ public class OrderClubServiceImpl implements OrderClubService {
|
|
productService.savePurchasePrice(order, product, secondFlag, note);
|
|
productService.savePurchasePrice(order, product, secondFlag, note);
|
|
// 二手商品确认商品如果是二手仪器则需要把该二手商品置为已售
|
|
// 二手商品确认商品如果是二手仪器则需要把该二手商品置为已售
|
|
if (secondFlag) {
|
|
if (secondFlag) {
|
|
- orderClubMapper.updateSecondStatus(product.getProductId());
|
|
|
|
|
|
+ orderClubMapper.updateSecondStatus(product.getProductId(), 1);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
-
|
|
|
|
if (null != order.getBalancePayFee() && MathUtil.compare(order.getBalancePayFee(), 0) > 0) {
|
|
if (null != order.getBalancePayFee() && MathUtil.compare(order.getBalancePayFee(), 0) > 0) {
|
|
- double userMoney = orderClubMapper.getUserMoneyByUserId(orderId);
|
|
|
|
|
|
+ double userMoney = baseMapper.getUserMoney(order.getUserId());
|
|
double updateMoney = MathUtil.sub(userMoney, order.getBalancePayFee()).doubleValue();
|
|
double updateMoney = MathUtil.sub(userMoney, order.getBalancePayFee()).doubleValue();
|
|
// 扣除用户余额
|
|
// 扣除用户余额
|
|
- orderClubMapper.updateUserMoneyByUserId(updateMoney, orderId);
|
|
|
|
- log.info(note + ">>>>>>>>>>>更新用户余额(update[user])userId:" + orderId + ",orderId:" + order.getOrderId());
|
|
|
|
|
|
+ orderClubMapper.updateUserMoneyByUserId(updateMoney, order.getUserId());
|
|
|
|
+ log.info(note + ">>>>>>>>>>>更新用户余额(update[user(userMoney)])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
// 保存余额到收款记录
|
|
// 保存余额到收款记录
|
|
productService.saveDiscernReceipt(order.getBalancePayFee(), orderId, note);
|
|
productService.saveDiscernReceipt(order.getBalancePayFee(), orderId, note);
|
|
}
|
|
}
|
|
@@ -86,4 +100,183 @@ public class OrderClubServiceImpl implements OrderClubService {
|
|
|
|
|
|
return ResponseJson.success("确认订单成功!", null);
|
|
return ResponseJson.success("确认订单成功!", null);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 机构取消订单
|
|
|
|
+ *
|
|
|
|
+ * @param orderId 订单Id
|
|
|
|
+ * @param remark 备注(订单取消原因)
|
|
|
|
+ */
|
|
|
|
+ @Transactional
|
|
|
|
+ @Override
|
|
|
|
+ public ResponseJson<Void> cancelMainOrder(Integer orderId, String remark) {
|
|
|
|
+ OrderPo order = orderClubMapper.getMainOrderByOrderId(orderId);
|
|
|
|
+ boolean cancelFlag = (null != order && (0 == order.getStatus() || 11 == order.getStatus()));
|
|
|
|
+ if (!cancelFlag) {
|
|
|
|
+ // 非待确认(或待收待发)订单
|
|
|
|
+ return ResponseJson.error("订单异常!", null);
|
|
|
|
+ }
|
|
|
|
+ Date date = new Date();
|
|
|
|
+ String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
|
+ String note = "【取消订单】";
|
|
|
|
+ // 余额退回原账户
|
|
|
|
+ if (null != order.getBalancePayFee() && MathUtil.compare(order.getBalancePayFee(), 0) > 0) {
|
|
|
|
+ double ableUserMoney = baseMapper.getAbleUserMoney(order.getUserId());
|
|
|
|
+ double updateMoney = MathUtil.add(ableUserMoney, order.getBalancePayFee()).doubleValue();
|
|
|
|
+ // 退回用户可用余额
|
|
|
|
+ orderClubMapper.updateUserMoneyByUserId(updateMoney, order.getUserId());
|
|
|
|
+ log.info(note + ">>>>>>>>>>>可用余额退回原账户(update[user(ableUserMoney)])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
|
+ // 取消收支记录
|
|
|
|
+ BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
|
|
+ balanceRecord.setUserId(order.getUserId());
|
|
|
|
+ balanceRecord.setOrderId(orderId);
|
|
|
|
+ balanceRecord.setRemark("取消订单,余额记录无效");
|
|
|
|
+ balanceRecord.setDelFlag(1);
|
|
|
|
+ // 取消 余额收支记录
|
|
|
|
+ orderClubMapper.cancelBalanceRecord(balanceRecord);
|
|
|
|
+ log.info(note +">>>>>>>>>>>>取消余额收支记录(update[cm_user_balance_record])orderId:" + orderId);
|
|
|
|
+ }
|
|
|
|
+ order.setStatus(6);
|
|
|
|
+ if (StringUtils.isBlank(remark)) {
|
|
|
|
+ remark = "协销或用户主动取消订单";
|
|
|
|
+ }
|
|
|
|
+ order.setCloseReason(remark);
|
|
|
|
+ order.setCloseTime(curDateStr);
|
|
|
|
+ // 取消 订单
|
|
|
|
+ orderClubMapper.cancelMainOrder(order);
|
|
|
|
+ //二手订单取消订单, 二手商品标记未售
|
|
|
|
+ if (1 == order.getSecondHandOrderFlag()) {
|
|
|
|
+ List<OrderProductPo> orderProducts = orderClubMapper.getOrderProductList(orderId);
|
|
|
|
+ orderProducts.forEach(product -> {
|
|
|
|
+ // 是否二手商品
|
|
|
|
+ boolean secondFlag = false;
|
|
|
|
+ if (null != product.getProductCategory() && 2 == product.getProductCategory()) {
|
|
|
|
+ secondFlag = true;
|
|
|
|
+ }
|
|
|
|
+ // 二手仪器标记未售
|
|
|
|
+ if (secondFlag) {
|
|
|
|
+ orderClubMapper.updateSecondStatus(product.getProductId(), 0);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ // 退回 采美豆
|
|
|
|
+ if (null != order.getUserBeans() && order.getUserBeans() > 0) {
|
|
|
|
+ UserBeansHistoryPo beansHistory = new UserBeansHistoryPo();
|
|
|
|
+ beansHistory.setUserId(order.getUserId());
|
|
|
|
+ beansHistory.setOrderId(orderId);
|
|
|
|
+ beansHistory.setBeansType(9);
|
|
|
|
+ beansHistory.setType(1);
|
|
|
|
+ beansHistory.setNum(order.getUserBeans());
|
|
|
|
+ beansHistory.setPushStatus(0);
|
|
|
|
+ beansHistory.setAddTime(date);
|
|
|
|
+ beansHistory.setDelFlag(0);
|
|
|
|
+ // 用户采美豆
|
|
|
|
+ Integer userBeans = baseMapper.getUserBeans(order.getUserId());
|
|
|
|
+ // 更新用户剩余采美豆数量
|
|
|
|
+ int beans = userBeans + beansHistory.getNum();
|
|
|
|
+ productService.updateUserBeans(beansHistory, beans, note);
|
|
|
|
+ }
|
|
|
|
+ //取消订单短信推送
|
|
|
|
+ String bindMobile = baseMapper.getBindMobileByUserId(order.getUserId());
|
|
|
|
+ if (StringUtils.isNotBlank(bindMobile)) {
|
|
|
|
+ String shortLink = messagePushService.getShortLink(8, 11, domain + "/user/order/detail.html?orderId=" + orderId);
|
|
|
|
+ String content = "您已成功取消订单(订单编号:" + order.getOrderNo() + "),订单金额¥" + order.getPayTotalFee() + "。您可关注采美公众号或者访问采美微信小程序和网站查看订单。" +
|
|
|
|
+ "平台公众号:微信搜索“采美365网”; 微信小程序:微信搜索“采美采购商城”;网址:www.caimei365.com/t/" + shortLink;
|
|
|
|
+ boolean sendSms = messagePushService.getSendSms(11, bindMobile, content);
|
|
|
|
+ if (!sendSms) {
|
|
|
|
+ log.info("取消订单推送失败,orderId>>>>" + orderId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ResponseJson.success("取消订单成功!", null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 机构删除订单
|
|
|
|
+ *
|
|
|
|
+ * @param orderId 订单Id
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public ResponseJson<Void> deleteMainOrder(Integer orderId) {
|
|
|
|
+ OrderPo order = orderClubMapper.getMainOrderByOrderId(orderId);
|
|
|
|
+ if (null == order || 6 != order.getStatus()) {
|
|
|
|
+ // 非已关闭订单
|
|
|
|
+ return ResponseJson.error("订单异常!", null);
|
|
|
|
+ }
|
|
|
|
+ // 逻辑删除主订单
|
|
|
|
+ order.setDelFlag(1);
|
|
|
|
+ order.setNote("用户发起删除订单");
|
|
|
|
+ orderClubMapper.deleteMainOrder(order);
|
|
|
|
+ log.info("【删除订单】>>>>>>>>>逻辑删除主订单(update[cm_order])orderId:" + orderId);
|
|
|
|
+ // 逻辑删除子订单
|
|
|
|
+ String[] shopOrderIdArr = order.getShopOrderIds().split(",");
|
|
|
|
+ List<String> shopOrderIds = Arrays.asList(shopOrderIdArr);
|
|
|
|
+ orderClubMapper.deleteShopOrder(shopOrderIds);
|
|
|
|
+ log.info("【删除订单】>>>>>>>>>逻辑删除子订单(update[cm_shop_order])shopOrderIds:" + order.getShopOrderIds());
|
|
|
|
+ // 逻辑删除收款记录
|
|
|
|
+ List<String> receiptIds = orderClubMapper.getOrderReceiptIds(orderId);
|
|
|
|
+ if (!receiptIds.isEmpty()) {
|
|
|
|
+ orderClubMapper.deleteOrderReceiptRelation(orderId);
|
|
|
|
+ orderClubMapper.deleteDiscernReceipt(receiptIds);
|
|
|
|
+ log.info("【删除订单】>>>>>>>>>逻辑删除收款记录(update[cm_discern_receipt])orderId:" + orderId);
|
|
|
|
+ }
|
|
|
|
+ // 逻辑删除付款记录
|
|
|
|
+ List<String> payIds = orderClubMapper.getPayShopIds(shopOrderIds);
|
|
|
|
+ if (!payIds.isEmpty()) {
|
|
|
|
+ orderClubMapper.deletePayShopRecord(shopOrderIds);
|
|
|
|
+ orderClubMapper.deletePayShop(payIds);
|
|
|
|
+ log.info("【删除订单】>>>>>>>>>逻辑删除付款记录(update[cm_pay_shop])shopOrderIds:" + order.getShopOrderIds());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ResponseJson.success("删除订单成功!", null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 机构确认收货
|
|
|
|
+ *
|
|
|
|
+ * @param orderId 订单Id
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public ResponseJson<Void> receiveGoods(Integer orderId) {
|
|
|
|
+ OrderPo order = orderClubMapper.getMainOrderByOrderId(orderId);
|
|
|
|
+ if (null == order) {
|
|
|
|
+ // 非已关闭订单
|
|
|
|
+ return ResponseJson.error("订单不存在!", null);
|
|
|
|
+ }
|
|
|
|
+ if (33 == order.getStatus() && 3 == order.getPayStatus()) {
|
|
|
|
+ // 已付款供应商,订单完成
|
|
|
|
+ order.setStatus(5);
|
|
|
|
+ } else if (33 == order.getStatus()) {
|
|
|
|
+ // 交易完成
|
|
|
|
+ order.setStatus(4);
|
|
|
|
+ } else {
|
|
|
|
+ return ResponseJson.error("订单异常!", null);
|
|
|
|
+ }
|
|
|
|
+ Date date = new Date();
|
|
|
|
+ String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
|
+ String note = "【确认收货】";
|
|
|
|
+ order.setUpdateDate(curDateStr);
|
|
|
|
+ // 更新订单状态
|
|
|
|
+ orderClubMapper.updateOrderStatus(order);
|
|
|
|
+ // 更新物流状态
|
|
|
|
+ orderClubMapper.updateLogisticsBatch(orderId);
|
|
|
|
+
|
|
|
|
+ // 主动确认收货,赠送100采美豆
|
|
|
|
+ UserBeansHistoryPo beansHistory = new UserBeansHistoryPo();
|
|
|
|
+ beansHistory.setUserId(order.getUserId());
|
|
|
|
+ beansHistory.setOrderId(orderId);
|
|
|
|
+ beansHistory.setBeansType(7);
|
|
|
|
+ beansHistory.setType(1);
|
|
|
|
+ beansHistory.setNum(100);
|
|
|
|
+ beansHistory.setPushStatus(0);
|
|
|
|
+ beansHistory.setAddTime(date);
|
|
|
|
+ beansHistory.setDelFlag(0);
|
|
|
|
+ // 用户采美豆
|
|
|
|
+ Integer userBeans = baseMapper.getUserBeans(order.getUserId());
|
|
|
|
+ // 更新用户剩余采美豆数量
|
|
|
|
+ int beans = userBeans + beansHistory.getNum();
|
|
|
|
+ productService.updateUserBeans(beansHistory, beans, note);
|
|
|
|
+
|
|
|
|
+ return ResponseJson.success("确认收货成功!", null);
|
|
|
|
+ }
|
|
}
|
|
}
|