|
@@ -1,6 +1,7 @@
|
|
|
package com.caimei365.order.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.caimei365.order.components.ProductService;
|
|
|
import com.caimei365.order.mapper.BaseMapper;
|
|
|
import com.caimei365.order.mapper.OrderClubMapper;
|
|
@@ -11,7 +12,7 @@ import com.caimei365.order.model.po.OrderPo;
|
|
|
import com.caimei365.order.model.po.OrderProductPo;
|
|
|
import com.caimei365.order.model.po.UserBeansHistoryPo;
|
|
|
import com.caimei365.order.model.vo.*;
|
|
|
-import com.caimei365.order.service.MessagePushService;
|
|
|
+import com.caimei365.order.service.RemoteCallService;
|
|
|
import com.caimei365.order.service.OrderClubService;
|
|
|
import com.caimei365.order.utils.ImageUtil;
|
|
|
import com.caimei365.order.utils.MathUtil;
|
|
@@ -19,9 +20,11 @@ import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.google.common.util.concurrent.AtomicDouble;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
+import org.apache.commons.lang.RandomStringUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
@@ -46,7 +49,7 @@ public class OrderClubServiceImpl implements OrderClubService {
|
|
|
@Resource
|
|
|
private ProductService productService;
|
|
|
@Resource
|
|
|
- private MessagePushService messagePushService;
|
|
|
+ private RemoteCallService remoteCallService;
|
|
|
@Value("${caimei.wwwDomain}")
|
|
|
private String domain;
|
|
|
|
|
@@ -495,10 +498,10 @@ public class OrderClubServiceImpl implements OrderClubService {
|
|
|
//取消订单短信推送
|
|
|
String bindMobile = baseMapper.getBindMobileByUserId(order.getUserId());
|
|
|
if (StringUtils.isNotBlank(bindMobile)) {
|
|
|
- String shortLink = messagePushService.getShortLink(8, 11, domain + "/user/order/detail.html?orderId=" + orderId);
|
|
|
+ String shortLink = remoteCallService.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);
|
|
|
+ boolean sendSms = remoteCallService.getSendSms(11, bindMobile, content);
|
|
|
if (!sendSms) {
|
|
|
log.info("取消订单推送失败,orderId>>>>" + orderId);
|
|
|
}
|
|
@@ -624,8 +627,8 @@ public class OrderClubServiceImpl implements OrderClubService {
|
|
|
*/
|
|
|
@Override
|
|
|
public ResponseJson<List<LogisticsBatchVo>> getOrderLogistics(Integer orderId) {
|
|
|
- OrderPo order = orderClubMapper.getMainOrderByOrderId(orderId);
|
|
|
- if (null == order) {
|
|
|
+ int orderCount = orderClubMapper.countMainOrderByOrderId(orderId);
|
|
|
+ if (0 == orderCount) {
|
|
|
return ResponseJson.error("订单不存在!", null);
|
|
|
}
|
|
|
// 获取物流批次列表
|
|
@@ -659,4 +662,134 @@ public class OrderClubServiceImpl implements OrderClubService {
|
|
|
|
|
|
return ResponseJson.success(batchList);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分享订单,获取分享码
|
|
|
+ *
|
|
|
+ * @param orderId 订单Id
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<String> getOrderShareCode(Integer orderId) {
|
|
|
+ int orderCount = orderClubMapper.countMainOrderByOrderId(orderId);
|
|
|
+ if (0 == orderCount) {
|
|
|
+ return ResponseJson.error("订单不存在!", null);
|
|
|
+ }
|
|
|
+ // 生成分享码
|
|
|
+ String shareCode = RandomStringUtils.random(4, false, true);
|
|
|
+ // 过期时间
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(new Date());
|
|
|
+ calendar.add(Calendar.DATE, 1);
|
|
|
+ // 获取数据库已有分享码
|
|
|
+ OrderShareCodeVo orderCodeVo = orderClubMapper.getOrderCodeById(orderId);
|
|
|
+ if (orderCodeVo != null && orderCodeVo.getExpiredTime().compareTo(new Date()) >= 0 ) {
|
|
|
+ // 旧分享码还未过期,直接返回
|
|
|
+ return ResponseJson.success(orderCodeVo.getShareCode());
|
|
|
+ } else if (orderCodeVo != null) {
|
|
|
+ // 如果旧分享码已经过期,删除分享码使用记录
|
|
|
+ orderClubMapper.deleteOrderShareCodeRecord(orderId);
|
|
|
+ // 更新数据库的分享码
|
|
|
+ orderCodeVo.setShareCode(shareCode);
|
|
|
+ orderCodeVo.setExpiredTime(calendar.getTime());
|
|
|
+ orderCodeVo.setDelFlag(0);
|
|
|
+ orderClubMapper.updateOrderShareCode(orderCodeVo);
|
|
|
+ } else {
|
|
|
+ // 如果没有分享记录,新增数据库的分享码
|
|
|
+ OrderShareCodeVo newShareCodeVo = new OrderShareCodeVo();
|
|
|
+ newShareCodeVo.setOrderId(orderId);
|
|
|
+ newShareCodeVo.setShareCode(shareCode);
|
|
|
+ newShareCodeVo.setExpiredTime(calendar.getTime());
|
|
|
+ newShareCodeVo.setAddTime(new Date());
|
|
|
+ newShareCodeVo.setDelFlag(0);
|
|
|
+ orderClubMapper.insertOrderShareCode(newShareCodeVo);
|
|
|
+ }
|
|
|
+ // 返回新生成的分享码
|
|
|
+ return ResponseJson.success(shareCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分享订单,校验分享码
|
|
|
+ *
|
|
|
+ * @param orderId 订单Id
|
|
|
+ * @param userId 用户Id
|
|
|
+ * @param serviceProviderId 协销Id
|
|
|
+ * @param shareCode 分享码
|
|
|
+ * @param code 微信code
|
|
|
+ * @param encryptedData 微信加密数据
|
|
|
+ * @param iv 微信加密算法的初始向量
|
|
|
+ * @param headers HttpHeaders
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson<String> checkOrderShareCode(Integer orderId, Integer userId, Integer serviceProviderId, String shareCode, String code, String encryptedData, String iv, HttpHeaders headers) {
|
|
|
+ int orderCount = orderClubMapper.countMainOrderByOrderId(orderId);
|
|
|
+ if (0 == orderCount) {
|
|
|
+ return ResponseJson.error("订单不存在!", null);
|
|
|
+ }
|
|
|
+ // 微信小程序授权登录(调用user服务,发送服务间调用POST请求)
|
|
|
+ String loginData = remoteCallService.appletsAuthorization(code, encryptedData, iv, headers);
|
|
|
+ if (StringUtils.isEmpty(loginData)){
|
|
|
+ return ResponseJson.error("微信授权登录异常!", null);
|
|
|
+ }
|
|
|
+ // 解析登录后得到 userIdentity, openId等
|
|
|
+ JSONObject userInfo = JSONObject.parseObject(loginData);
|
|
|
+ String openId = userInfo.getString("openId");
|
|
|
+ if (StringUtils.isEmpty(openId)) {
|
|
|
+ return ResponseJson.error("微信授权登录异常!", null);
|
|
|
+ }
|
|
|
+ // 用户身份: 1协销 2会员机构 3供应商 4普通机构
|
|
|
+ Integer userIdentity = userInfo.getInteger("userIdentity");
|
|
|
+ Integer loginUserId = userInfo.getInteger("userId");
|
|
|
+ Integer loginSpId = userInfo.getInteger("serviceProviderId");
|
|
|
+ // 协销身份
|
|
|
+ boolean spFlag = (null != userIdentity && 1 == userIdentity);
|
|
|
+ // 机构身份
|
|
|
+ boolean clubFlag = (null != userIdentity && (2 == userIdentity || 4 ==userIdentity));
|
|
|
+ if (spFlag) {
|
|
|
+ if (null != serviceProviderId && serviceProviderId.equals(loginSpId)) {
|
|
|
+ // 该机构的协销
|
|
|
+ return ResponseJson.success(2, "该机构的协销查看分享订单!", loginData);
|
|
|
+ } else {
|
|
|
+ // 非该机构协销(游客)
|
|
|
+ return ResponseJson.success(0,"非该机构协销查看分享订单!", null);
|
|
|
+ }
|
|
|
+ } else if (clubFlag && userId.equals(loginUserId)) {
|
|
|
+ // 该机构的运营人员, 旧接口返回 0,true
|
|
|
+ return ResponseJson.success(1, "该机构的运营人员查看分享订单!", loginData);
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ * 其他按游客权限处理
|
|
|
+ */
|
|
|
+ // 根据openId统计数据库内是否有有效分享码
|
|
|
+ int codeCount = orderClubMapper.countShareCodeRecord(orderId, openId);
|
|
|
+ if (codeCount > 0) {
|
|
|
+ // 游客权限
|
|
|
+ return ResponseJson.success(0,"游客权限查看分享订单!", null);
|
|
|
+ }
|
|
|
+ // 根据订单Id获取分享码
|
|
|
+ OrderShareCodeVo orderCodeVo = orderClubMapper.getOrderCodeById(orderId);
|
|
|
+ if (null == orderCodeVo) {
|
|
|
+ return ResponseJson.error("该订单没有生成分享码!", null);
|
|
|
+ }
|
|
|
+ // 校验分享码
|
|
|
+ if (orderCodeVo.getShareCode().equals(shareCode)){
|
|
|
+ if (orderCodeVo.getExpiredTime().compareTo(new Date()) > 0) {
|
|
|
+ // 分享码有效, 保存分享码使用记录
|
|
|
+ OrderShareCodeRecordVo codeRecord = new OrderShareCodeRecordVo();
|
|
|
+ codeRecord.setOpenId(openId);
|
|
|
+ codeRecord.setAddTime(new Date());
|
|
|
+ codeRecord.setOrderId(orderCodeVo.getOrderId());
|
|
|
+ codeRecord.setDelFlag(0);
|
|
|
+ codeRecord.setShareCodeId(orderCodeVo.getId());
|
|
|
+ orderClubMapper.insertOrderShareCodeRecord(codeRecord);
|
|
|
+ // 返回
|
|
|
+ return ResponseJson.success(0,"游客权限查看分享订单!", null);
|
|
|
+ } else {
|
|
|
+ // 分享码过期
|
|
|
+ return ResponseJson.error("分享码已失效!", null);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return ResponseJson.error("分享码不正确!", null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|