|
@@ -1,21 +1,30 @@
|
|
|
package com.caimei.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.caimei.config.WxConfig;
|
|
|
+import com.caimei.mapper.LoginMapper;
|
|
|
import com.caimei.mapper.OrderMapper;
|
|
|
import com.caimei.model.ResponseJson;
|
|
|
import com.caimei.model.enumerate.ReceivablesType;
|
|
|
+import com.caimei.model.po.CmMallOrderShareCodePo;
|
|
|
import com.caimei.model.po.PromotionsPo;
|
|
|
+import com.caimei.model.po.ShareCodeRecordPo;
|
|
|
import com.caimei.model.vo.*;
|
|
|
import com.caimei.service.OrderService;
|
|
|
import com.caimei.util.MathUtil;
|
|
|
import com.caimei.util.ProductUtils;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.RandomStringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Description
|
|
@@ -23,10 +32,13 @@ import java.util.List;
|
|
|
* @author : plf
|
|
|
* @date : 2021/3/26
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class OrderServiceImpl implements OrderService {
|
|
|
@Resource
|
|
|
private OrderMapper orderMapper;
|
|
|
+ @Resource
|
|
|
+ private LoginMapper loginMapper;
|
|
|
@Value("${caimei.oldapi}")
|
|
|
private String domain;
|
|
|
|
|
@@ -70,7 +82,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
shopOrder.setShopLogo(ProductUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
|
|
|
}
|
|
|
//过滤运费商品
|
|
|
- shopOrderList.removeIf(shopOrderVo -> shopOrderVo.getShopID() == 998);
|
|
|
+ shopOrderList.removeIf(shopOrderVo -> shopOrderVo.getShopId() == 998);
|
|
|
order.setShopOrderList(shopOrderList);
|
|
|
//设置付款金额
|
|
|
getDiscernReceipt(order);
|
|
@@ -79,6 +91,233 @@ public class OrderServiceImpl implements OrderService {
|
|
|
return ResponseJson.success(pageData);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public ResponseJson<Map<String, Object>> getOrderDetail(Integer orderId) {
|
|
|
+ Map<String, Object> map = new HashMap<>(6);
|
|
|
+ //收货地址
|
|
|
+ UserInfoVo userInfo = orderMapper.findUserInfo(orderId);
|
|
|
+ //订单信息,运费
|
|
|
+ OrderVo order = orderMapper.findOrder(orderId);
|
|
|
+ if (order == null) {
|
|
|
+ return ResponseJson.error("该订单已删除", null);
|
|
|
+ }
|
|
|
+ order.setOrderMark("#" + order.getOrderId() + "#");
|
|
|
+ //111,待付待收待发
|
|
|
+ if ("11".equals(order.getStatus()) && "1".equals(order.getPayStatus())) {
|
|
|
+ order.setStatus("111");
|
|
|
+ }
|
|
|
+ //判断交易全退情况下,是否发过货,77,交易全退可以查看物流
|
|
|
+ List<LogisticsBatchVo> batchList = orderMapper.findLogistics(orderId);
|
|
|
+ if ("7".equals(order.getStatus()) && batchList != null && batchList.size() > 0) {
|
|
|
+ order.setStatus("77");
|
|
|
+ }
|
|
|
+ //商品信息
|
|
|
+ List<ShopOrderVo> shopOrderList = orderMapper.findAllShopOrder(orderId);
|
|
|
+ BigDecimal expensesOfTaxation = new BigDecimal(0);
|
|
|
+ for (ShopOrderVo shopOrder : shopOrderList) {
|
|
|
+ List<OrderProductVo> orderProductList = orderMapper.findOrderProduct(shopOrder.getShopOrderId());
|
|
|
+ for (OrderProductVo orderProduct : orderProductList) {
|
|
|
+ //运费
|
|
|
+ if (shopOrder.getShopId() == 998) {
|
|
|
+ order.setFreight(orderProduct.getPrice1());
|
|
|
+ }
|
|
|
+ //总税费
|
|
|
+ expensesOfTaxation = expensesOfTaxation.add(orderProduct.getTotalAddedValueTax());
|
|
|
+ orderProduct.setProductImage(ProductUtils.getImageURL("product", orderProduct.getProductImage(), 0, domain));
|
|
|
+ //已发货数量
|
|
|
+ orderProduct.setShipmentsNum(orderProduct.getNum() + orderProduct.getPresentNum() - orderProduct.getNotOutStore());
|
|
|
+ //已退货数量
|
|
|
+ Integer returnedNum = orderMapper.returnedPurchase(orderProduct.getShopOrderId(), orderProduct.getProductId());
|
|
|
+ returnedNum = null != returnedNum ? returnedNum : 0;
|
|
|
+ orderProduct.setReturnedNum(returnedNum);
|
|
|
+ //已取消发货数量
|
|
|
+ Integer actualCancelNum = orderMapper.actualCancelNum(orderProduct.getShopOrderId(), orderProduct.getProductId());
|
|
|
+ actualCancelNum = null != actualCancelNum ? actualCancelNum : 0;
|
|
|
+ orderProduct.setActualCancelNum(actualCancelNum);
|
|
|
+ //查询订单下商品的促销活动
|
|
|
+ if (orderProduct.getOrderPromotionsId() != null && orderProduct.getOrderPromotionsId() > 0) {
|
|
|
+ PromotionsPo orderPromotionsById = orderMapper.findOrderPromotionsById(orderProduct.getOrderPromotionsId());
|
|
|
+ if (orderPromotionsById.getType() == 1) {
|
|
|
+ if ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType()))) {
|
|
|
+ orderPromotionsById.setTouchPrice(MathUtil.add(orderPromotionsById.getTouchPrice(), MathUtil.div(MathUtil.mul(orderPromotionsById.getTouchPrice(), orderProduct.getTaxRate()), 100)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ orderProduct.setProductPromotion(orderPromotionsById);
|
|
|
+ }
|
|
|
+ //判断商品价格是否含税
|
|
|
+ if ("1".equals(orderProduct.getIncludedTax()) || ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType())))) {
|
|
|
+ orderProduct.setIncludedTaxFlag("2");
|
|
|
+ } else if (orderProduct.getIncludedTax() != null && "0".equals(orderProduct.getIncludedTax()) && "3".equals(orderProduct.getInvoiceType())) {
|
|
|
+ orderProduct.setIncludedTaxFlag("1");
|
|
|
+ } else {
|
|
|
+ orderProduct.setIncludedTaxFlag("3");
|
|
|
+ }
|
|
|
+ //不含税可开票商品,单价/折后单价在原基础上加上税费
|
|
|
+ if ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType()))) {
|
|
|
+ //计算单价的税费
|
|
|
+ BigDecimal valueTax = MathUtil.div(MathUtil.mul(orderProduct.getPrice(), orderProduct.getTaxRate()), 100);
|
|
|
+ orderProduct.setPrice(MathUtil.add(orderProduct.getPrice(), valueTax));
|
|
|
+ orderProduct.setDiscountPrice(MathUtil.add(orderProduct.getDiscountPrice(), orderProduct.getAddedValueTax()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ shopOrder.setOrderProductList(orderProductList);
|
|
|
+ shopOrder.setShopLogo(ProductUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
|
|
|
+ }
|
|
|
+ order.setExpensesOfTaxation(expensesOfTaxation);
|
|
|
+ //删除运费商品
|
|
|
+ shopOrderList.removeIf(student -> 998 == student.getShopId());
|
|
|
+ //发票信息
|
|
|
+ OrderInvoiceVo orderInvoice = orderMapper.getOrderInvoice(orderId);
|
|
|
+ List<DiscernReceiptVo> discernReceiptList = getDiscernReceipt(order);
|
|
|
+ //退款记录
|
|
|
+ List<ReturnedPurchaseVo> returnedPurchaseList = orderMapper.findReturnedPurchase(order.getOrderId());
|
|
|
+ if (returnedPurchaseList != null && returnedPurchaseList.size() > 0) {
|
|
|
+ BigDecimal returnedPurchaseFee = new BigDecimal(0);
|
|
|
+ for (ReturnedPurchaseVo returnedPurchase : returnedPurchaseList) {
|
|
|
+ returnedPurchaseFee = returnedPurchaseFee.add(returnedPurchase.getRefundFee());
|
|
|
+ }
|
|
|
+ //退款总金额
|
|
|
+ order.setReturnedPurchaseFee(returnedPurchaseFee);
|
|
|
+ }
|
|
|
+ map.put("order", order);
|
|
|
+ map.put("userInfo", userInfo);
|
|
|
+ map.put("shopOrderList", shopOrderList);
|
|
|
+ map.put("orderInvoice", orderInvoice);
|
|
|
+ map.put("discernReceiptList", discernReceiptList);
|
|
|
+ map.put("returnedPurchaseList", returnedPurchaseList);
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseJson<List<LogisticsBatchVo>> logistics(Integer orderId) {
|
|
|
+ OrderVo order = orderMapper.findOrder(orderId);
|
|
|
+ if (order == null) {
|
|
|
+ return ResponseJson.error("订单已删除", null);
|
|
|
+ }
|
|
|
+ List<LogisticsBatchVo> batchList = orderMapper.findLogistics(orderId);
|
|
|
+ for (LogisticsBatchVo batch : batchList) {
|
|
|
+ List<ShopOrderVo> shopOrderList = orderMapper.findAllShopOrder(orderId);
|
|
|
+ for (ShopOrderVo shopOrder : shopOrderList) {
|
|
|
+ List<LogisticsRecordVo> logisticsRecordList = orderMapper.findLogisticsRecord(shopOrder.getShopOrderId(), batch.getId());
|
|
|
+ for (LogisticsRecordVo logisticsRecord : logisticsRecordList) {
|
|
|
+ logisticsRecord.setImage(ProductUtils.getImageURL("product", logisticsRecord.getImage(), 0, domain));
|
|
|
+ }
|
|
|
+ shopOrder.setLogisticsRecordList(logisticsRecordList);
|
|
|
+ shopOrder.setShopLogo(ProductUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
|
|
|
+ }
|
|
|
+ //物流信息
|
|
|
+ List<LogisticsInformationVo> logisticsInfoList = orderMapper.findLogisticsInfo(batch.getId());
|
|
|
+ for (LogisticsInformationVo logisticsInfo : logisticsInfoList) {
|
|
|
+ List<RouterVo> routers = JSONArray.parseArray(logisticsInfo.getInfo(), RouterVo.class);
|
|
|
+ logisticsInfo.setRouterList(routers);
|
|
|
+ }
|
|
|
+ batch.setLogisticsInformationList(logisticsInfoList);
|
|
|
+ batch.setShopOrderList(shopOrderList);
|
|
|
+ }
|
|
|
+ return ResponseJson.success(batchList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseJson<String> affirmCargo(Integer orderId) {
|
|
|
+ OrderVo order = orderMapper.findOrder(orderId);
|
|
|
+ if (order == null) {
|
|
|
+ return ResponseJson.error("订单不存在", null);
|
|
|
+ }
|
|
|
+ if ("33".equals(order.getStatus()) && "3".equals(order.getPayStatus())) {
|
|
|
+ //已付款供应商,订单完成
|
|
|
+ order.setStatus("5");
|
|
|
+ orderMapper.updateOrderStatus(order);
|
|
|
+ orderMapper.updateLogisticsBatch(orderId);
|
|
|
+ } else if ("33".equals(order.getStatus())) {
|
|
|
+ //交易完成
|
|
|
+ order.setStatus("4");
|
|
|
+ orderMapper.updateOrderStatus(order);
|
|
|
+ orderMapper.updateLogisticsBatch(orderId);
|
|
|
+ } else {
|
|
|
+ return ResponseJson.error("订单异常", null);
|
|
|
+ }
|
|
|
+ return ResponseJson.success("");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseJson<String> shareOrder(Integer orderId) {
|
|
|
+ OrderVo order = orderMapper.findOrder(orderId);
|
|
|
+ if (order == null) {
|
|
|
+ return ResponseJson.error("订单不存在", null);
|
|
|
+ }
|
|
|
+ CmMallOrderShareCodePo orderShareCode = orderMapper.queryCode(orderId);
|
|
|
+ //生成分享码
|
|
|
+ String shareCode = RandomStringUtils.random(4, false, true);
|
|
|
+ //过期时间
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(new Date());
|
|
|
+ calendar.add(Calendar.DATE, 1);
|
|
|
+ if (orderShareCode != null && orderShareCode.getExpiredTime().compareTo(new Date()) > -1) {
|
|
|
+ return ResponseJson.success(orderShareCode.getShareCode());
|
|
|
+ } else if (orderShareCode != null) {
|
|
|
+ orderShareCode.setShareCode(shareCode);
|
|
|
+ orderShareCode.setExpiredTime(calendar.getTime());
|
|
|
+ orderShareCode.setDelFlag("0");
|
|
|
+ orderMapper.updateCode(orderShareCode);
|
|
|
+ orderMapper.deleteCodeRecord(orderId);
|
|
|
+ return ResponseJson.success(shareCode);
|
|
|
+ } else {
|
|
|
+ CmMallOrderShareCodePo code = new CmMallOrderShareCodePo();
|
|
|
+ code.setOrderID(orderId);
|
|
|
+ code.setShareCode(shareCode);
|
|
|
+ code.setExpiredTime(calendar.getTime());
|
|
|
+ code.setAddTime(new Date());
|
|
|
+ code.setDelFlag("0");
|
|
|
+ orderMapper.insertCode(code);
|
|
|
+ return ResponseJson.success(shareCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseJson<Boolean> verifyShareCode(String shareCode, String code, Integer orderId, Integer organizeId) {
|
|
|
+ String infos;
|
|
|
+ try {
|
|
|
+ infos = WxConfig.getWxMallOpenId(code);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("微信服务器异常", e);
|
|
|
+ return ResponseJson.error("微信服务器异常", null);
|
|
|
+ }
|
|
|
+ //解析相应内容(转换成json对象)
|
|
|
+ JSONObject jsonObject = JSON.parseObject(infos);
|
|
|
+ String openid = jsonObject.getString("openid");
|
|
|
+ log.info("小程序openid----->" + openid);
|
|
|
+ OrderVo order = orderMapper.findOrder(orderId);
|
|
|
+ if (order == null) {
|
|
|
+ return ResponseJson.error(-2, "该订单已删除", null);
|
|
|
+ }
|
|
|
+ BuyerUserVo buyer = loginMapper.findBuyer(openid);
|
|
|
+ if (buyer != null && buyer.getOrganizeId().equals(organizeId)) {
|
|
|
+ return ResponseJson.success(true);
|
|
|
+ }
|
|
|
+ ShareCodeRecordPo shareCodeRecord = orderMapper.findShareCodeRecord(openid, orderId);
|
|
|
+ if (shareCodeRecord != null && shareCodeRecord.getExpiredTime().compareTo(new Date()) > 0) {
|
|
|
+ return ResponseJson.success(null);
|
|
|
+ }
|
|
|
+ CmMallOrderShareCodePo shareCodePo = orderMapper.queryCode(orderId);
|
|
|
+ if (shareCodePo == null) {
|
|
|
+ return ResponseJson.error("该订单没有生成分享码", null);
|
|
|
+ }
|
|
|
+ if (shareCodePo.getShareCode().equals(shareCode) && shareCodePo.getExpiredTime().compareTo(new Date()) > 0) {
|
|
|
+ ShareCodeRecordPo codeRecord = new ShareCodeRecordPo();
|
|
|
+ codeRecord.setOpenid(openid);
|
|
|
+ codeRecord.setAddTime(new Date());
|
|
|
+ codeRecord.setOrderID(shareCodePo.getOrderID());
|
|
|
+ codeRecord.setDelFlag("0");
|
|
|
+ codeRecord.setShareCodeId(shareCodePo.getId());
|
|
|
+ orderMapper.insertShareCodeRecord(codeRecord);
|
|
|
+ return ResponseJson.success(null);
|
|
|
+ } else if (shareCodePo.getShareCode().equals(shareCode) && shareCodePo.getExpiredTime().compareTo(new Date()) != 1) {
|
|
|
+ return ResponseJson.error("分享码已失效", null);
|
|
|
+ } else {
|
|
|
+ return ResponseJson.error("分享码错误", null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 支付金额,待付金额
|
|
|
*/
|