Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop

This commit is contained in:
Chopper 2021-06-25 09:47:12 +08:00
commit e4dd156ae7
11 changed files with 132 additions and 103 deletions

View File

@ -4,11 +4,16 @@ import cn.hutool.core.util.RandomUtil;
import cn.lili.common.utils.CommonUtil; import cn.lili.common.utils.CommonUtil;
import cn.lili.event.OrderStatusChangeEvent; import cn.lili.event.OrderStatusChangeEvent;
import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderMessage;
import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -23,7 +28,8 @@ public class VerificationOrderExecute implements OrderStatusChangeEvent {
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@Autowired
private OrderItemService orderItemService;
@Override @Override
public void orderChange(OrderMessage orderMessage) { public void orderChange(OrderMessage orderMessage) {
//订单状态为待核验添加订单添加核验码 //订单状态为待核验添加订单添加核验码
@ -36,6 +42,10 @@ public class VerificationOrderExecute implements OrderStatusChangeEvent {
orderService.update(new LambdaUpdateWrapper<Order>() orderService.update(new LambdaUpdateWrapper<Order>()
.set(Order::getVerificationCode, code) .set(Order::getVerificationCode, code)
.eq(Order::getSn, orderMessage.getOrderSn())); .eq(Order::getSn, orderMessage.getOrderSn()));
//修改虚拟订单货物可以进行售后投诉
orderItemService.update(new LambdaUpdateWrapper<OrderItem>().eq(OrderItem::getOrderSn, orderMessage.getOrderSn())
.set(OrderItem::getAfterSaleStatus, OrderItemAfterSaleStatusEnum.NOT_APPLIED)
.set(OrderItem::getCommentStatus, OrderComplaintStatusEnum.NO_APPLY));
} }
} }

View File

@ -38,18 +38,11 @@ public class WechatLivePlayerUtil {
* @return 房间ID * @return 房间ID
*/ */
public Map<String, String> create(Studio studio) throws Exception { public Map<String, String> create(Studio studio) throws Exception {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=" + token; String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=";
//添加直播间 //添加直播间
Map<String, String> map = this.mockRoom(token, studio); Map<String, String> map = this.mockRoom(studio);
String content = HttpUtils.doPostWithJson(url, map); JSONObject json = this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序直播间创建结果:" + content);
if (!json.getStr("errcode").equals("0")) {
throw new ServiceException(json.getStr("errmsg"));
}
Map<String, String> roomMap = new HashMap<>(); Map<String, String> roomMap = new HashMap<>();
roomMap.put("roomId", json.getStr("roomId")); roomMap.put("roomId", json.getStr("roomId"));
roomMap.put("qrcodeUrl", json.getStr("qrcode_url")); roomMap.put("qrcodeUrl", json.getStr("qrcode_url"));
@ -63,20 +56,13 @@ public class WechatLivePlayerUtil {
* @return 房间ID * @return 房间ID
*/ */
public boolean editRoom(Studio studio) { public boolean editRoom(Studio studio) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/editroom?access_token=" + token; String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/editroom?access_token=";
//修改直播间 //修改直播间
Map<String, String> map = this.mockRoom(token, studio); Map<String, String> map = this.mockRoom(studio);
map.put("id", studio.getRoomId().toString()); map.put("id", studio.getRoomId().toString());
String content = HttpUtils.doPostWithJson(url, map); this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序直播间修改结果:" + content);
if (!json.getStr("errcode").equals("0")) {
throw new ServiceException(json.getStr("errmsg"));
}
return true; return true;
} }
@ -88,10 +74,8 @@ public class WechatLivePlayerUtil {
* @return 回放地址 * @return 回放地址
*/ */
public String getLiveInfo(Integer roomId) { public String getLiveInfo(Integer roomId) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token=" + token; String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token=";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
//获取回放 //获取回放
map.put("action", "get_replay"); map.put("action", "get_replay");
@ -101,10 +85,7 @@ public class WechatLivePlayerUtil {
map.put("start", "0"); map.put("start", "0");
//每次拉取的数量建议100以内 //每次拉取的数量建议100以内
map.put("limit", "1"); map.put("limit", "1");
JSONObject json = this.doPostWithJson(url, map);
String content = HttpUtils.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序获取信息:" + content);
//TODO get media_url //TODO get media_url
return json.getStr("live_replay"); return json.getStr("live_replay");
} }
@ -117,22 +98,15 @@ public class WechatLivePlayerUtil {
* @return 操作结果 * @return 操作结果
*/ */
public Boolean pushGoods(Integer roomId, Integer goodsId) { public Boolean pushGoods(Integer roomId, Integer goodsId) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=" + token; String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
//直播间回放 //直播间回放
Integer[] ids = {goodsId}; Integer[] ids = {goodsId};
map.put("ids", ids); map.put("ids", ids);
//商品ID //商品ID
map.put("roomId", roomId); map.put("roomId", roomId);
String content = HttpUtils.doPostWithJson(url, map); this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("直播间导入商品:" + content);
if (!json.getStr("errcode").equals("0")) {
throw new ServiceException(json.getStr("errmsg"));
}
return true; return true;
} }
@ -144,22 +118,15 @@ public class WechatLivePlayerUtil {
* @return 操作结果 * @return 操作结果
*/ */
public Boolean goodsDeleteInRoom(Integer roomId, Integer goodsId) { public Boolean goodsDeleteInRoom(Integer roomId, Integer goodsId) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/deleteInRoom?access_token=" + token; String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/deleteInRoom?access_token=";
Map<String, Integer> map = new HashMap<>(); Map<String, Integer> map = new HashMap<>();
//直播间回放 //直播间回放
map.put("goodsId", goodsId); map.put("goodsId", goodsId);
//商品ID //商品ID
map.put("roomId", roomId); map.put("roomId", roomId);
String content = HttpUtils.doPostWithJson(url, map); this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序直播间删除商品:" + content);
if(json.getStr("errcode").equals("0")){
return true; return true;
}
throw new ServiceException(json.getStr("errmsg"));
} }
@ -170,10 +137,8 @@ public class WechatLivePlayerUtil {
* @return 添加结果 * @return 添加结果
*/ */
public JSONObject addGoods(Commodity commodity) { public JSONObject addGoods(Commodity commodity) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=" + token; String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=";
//商品名称最长14个汉字 //商品名称最长14个汉字
if (commodity.getName().length() > 14) { if (commodity.getName().length() > 14) {
@ -183,14 +148,11 @@ public class WechatLivePlayerUtil {
//新建微信商品DTO //新建微信商品DTO
GoodsInfo goodsInfo = new GoodsInfo(commodity); GoodsInfo goodsInfo = new GoodsInfo(commodity);
//上传微信临时图片 //上传微信临时图片
goodsInfo.setCoverImgUrl(wechatMediaUtil.uploadMedia(token, "image", commodity.getGoodsImage())); goodsInfo.setCoverImgUrl(wechatMediaUtil.uploadMedia("image", commodity.getGoodsImage()));
Map<String, GoodsInfo> map = new HashMap<>(); Map<String, GoodsInfo> map = new HashMap<>();
//调用新增直播商品接口 //调用新增直播商品接口
map.put("goodsInfo", goodsInfo); map.put("goodsInfo", goodsInfo);
String content = HttpUtils.doPostWithJson(url, map); return this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序添加直播商品结果:" + content);
return json;
} }
/** /**
@ -200,16 +162,11 @@ public class WechatLivePlayerUtil {
* @return 删除结果 * @return 删除结果
*/ */
public JSONObject deleteGoods(String goodsId) { public JSONObject deleteGoods(String goodsId) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=" + token; String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("goodsId", goodsId); map.put("goodsId", goodsId);
String content = HttpUtils.doPostWithJson(url, map); return this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序删除直播商品结果:" + content);
return json;
} }
/** /**
@ -219,26 +176,48 @@ public class WechatLivePlayerUtil {
* @return 删除结果 * @return 删除结果
*/ */
public JSONObject getGoodsWareHouse(List<String> goodsIdList) { public JSONObject getGoodsWareHouse(List<String> goodsIdList) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//发送url //发送url
String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=" + token; String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("goods_ids", goodsIdList); map.put("goods_ids", goodsIdList);
String content = HttpUtils.doPostWithJson(url, map); return this.doPostWithJson(url, map);
JSONObject json = new JSONObject(content);
log.info("微信小程序查询直播商品结果:" + content);
return json;
} }
private Map<String, String> mockRoom(String token, Studio studio) { /**
* 请求微信接口
* @param url 链接
* @param map 参数
* @return 返回内容
*/
private JSONObject doPostWithJson(String url, Map map) {
//获取token
String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
//请求链接添加token
url+=token;
//发起请求
String content = HttpUtils.doPostWithJson(url, map);
//记录请求结果
log.info("微信小程序请求结果:" + content);
//获取请求内容如果token过期则重新获取如果出错则抛出错误
JSONObject jsonObject = new JSONObject(content);
if (jsonObject.get("errcode").equals("0")) {
return jsonObject;
} else if (jsonObject.get("errcode").equals("40001")) {
wechatAccessTokenUtil.removeAccessToken(ClientTypeEnum.WECHAT_MP);
return this.doPostWithJson(url, map);
} else {
throw new ServiceException(jsonObject.get("errmsg").toString());
}
}
private Map<String, String> mockRoom(Studio studio) {
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
//背景图 //背景图
map.put("coverImg", wechatMediaUtil.uploadMedia(token, "image", studio.getCoverImg())); map.put("coverImg", wechatMediaUtil.uploadMedia("image", studio.getCoverImg()));
//分享图 //分享图
map.put("shareImg", wechatMediaUtil.uploadMedia(token, "image", studio.getShareImg())); map.put("shareImg", wechatMediaUtil.uploadMedia("image", studio.getShareImg()));
//购物直播频道封面图 //购物直播频道封面图
map.put("feedsImg", wechatMediaUtil.uploadMedia(token, "image", studio.getFeedsImg())); map.put("feedsImg", wechatMediaUtil.uploadMedia("image", studio.getFeedsImg()));
//直播间名字 //直播间名字
map.put("name", studio.getName()); map.put("name", studio.getName());
//直播计划开始时间 //直播计划开始时间

View File

@ -1,7 +1,11 @@
package cn.lili.modules.broadcast.util; package cn.lili.modules.broadcast.util;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.lili.common.exception.ServiceException;
import cn.lili.modules.base.entity.enums.ClientTypeEnum;
import cn.lili.modules.message.util.WechatAccessTokenUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.*; import java.io.*;
@ -18,14 +22,18 @@ import java.util.Date;
@Slf4j @Slf4j
@Component @Component
public class WechatMediaUtil { public class WechatMediaUtil {
@Autowired
private WechatAccessTokenUtil wechatAccessTokenUtil;
/** /**
* 上传多媒体数据到微信服务器 * 上传多媒体数据到微信服务器
* @param accessToken 从微信获取到的access_token *
* @param mediaFileUrl 来自网络上面的媒体文件地址 * @param mediaFileUrl 来自网络上面的媒体文件地址
* @return * @return
*/ */
public String uploadMedia(String accessToken, String type, String mediaFileUrl) { public String uploadMedia(String type, String mediaFileUrl) {
//获取token
String accessToken = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP);
/* /*
* 上传媒体文件到微信服务器需要请求的地址 * 上传媒体文件到微信服务器需要请求的地址
*/ */
@ -38,21 +46,21 @@ public class WechatMediaUtil {
try { try {
String boundary = "----WebKitFormBoundaryOYXo8heIv9pgpGjT"; String boundary = "----WebKitFormBoundaryOYXo8heIv9pgpGjT";
URL url = new URL(mediaStr); URL url = new URL(mediaStr);
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
//让输入输出流开启 //让输入输出流开启
urlConn.setDoInput(true); urlConn.setDoInput(true);
urlConn.setDoOutput(true); urlConn.setDoOutput(true);
//使用post方式请求的时候必须关闭缓存 //使用post方式请求的时候必须关闭缓存
urlConn.setUseCaches(false); urlConn.setUseCaches(false);
//设置请求头的Content-Type属性 //设置请求头的Content-Type属性
urlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary); urlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
urlConn.setRequestMethod("POST"); urlConn.setRequestMethod("POST");
//获取输出流使用输出流拼接请求体 //获取输出流使用输出流拼接请求体
OutputStream out = urlConn.getOutputStream(); OutputStream out = urlConn.getOutputStream();
//读取文件的数据,构建一个GET请求然后读取指定地址中的数据 //读取文件的数据,构建一个GET请求然后读取指定地址中的数据
mediaUrl = new URL(mediaFileUrl); mediaUrl = new URL(mediaFileUrl);
HttpURLConnection mediaConn = (HttpURLConnection)mediaUrl.openConnection(); HttpURLConnection mediaConn = (HttpURLConnection) mediaUrl.openConnection();
//设置请求方式 //设置请求方式
mediaConn.setRequestMethod("GET"); mediaConn.setRequestMethod("GET");
//设置可以打开输入流 //设置可以打开输入流
@ -68,15 +76,15 @@ public class WechatMediaUtil {
byte[] bytes = new byte[1024]; byte[] bytes = new byte[1024];
int size = 0; int size = 0;
//使用outputStream流输出信息到请求体当中去 //使用outputStream流输出信息到请求体当中去
out.write(("--"+boundary+"\r\n").getBytes()); out.write(("--" + boundary + "\r\n").getBytes());
out.write(("Content-Disposition: form-data; name=\"media\";\r\n" out.write(("Content-Disposition: form-data; name=\"media\";\r\n"
+ "filename=\""+(new Date().getTime())+fileExt+"\"\r\n" + "filename=\"" + (new Date().getTime()) + fileExt + "\"\r\n"
+ "Content-Type: "+contentType+"\r\n\r\n").getBytes()); + "Content-Type: " + contentType + "\r\n\r\n").getBytes());
while( (size = bufferedIn.read(bytes)) != -1) { while ((size = bufferedIn.read(bytes)) != -1) {
out.write(bytes, 0, size); out.write(bytes, 0, size);
} }
//切记这里的换行符不能少否则将会报41005错误 //切记这里的换行符不能少否则将会报41005错误
out.write(("\r\n--"+boundary+"--\r\n").getBytes()); out.write(("\r\n--" + boundary + "--\r\n").getBytes());
bufferedIn.close(); bufferedIn.close();
in.close(); in.close();
@ -87,7 +95,7 @@ public class WechatMediaUtil {
BufferedReader bufferedReader = new BufferedReader(reader); BufferedReader bufferedReader = new BufferedReader(reader);
String tempStr = null; String tempStr = null;
resultStr = new StringBuffer(); resultStr = new StringBuffer();
while((tempStr = bufferedReader.readLine()) != null) { while ((tempStr = bufferedReader.readLine()) != null) {
resultStr.append(tempStr); resultStr.append(tempStr);
} }
bufferedReader.close(); bufferedReader.close();
@ -95,19 +103,31 @@ public class WechatMediaUtil {
resultIn.close(); resultIn.close();
urlConn.disconnect(); urlConn.disconnect();
} catch (Exception e) { } catch (Exception e) {
log.error("微信媒体上传失败",e); log.error("微信媒体上传失败", e);
} }
JSONObject jsonObject=new JSONObject(resultStr.toString()); JSONObject jsonObject = new JSONObject(resultStr.toString());
log.info("微信媒体上传:" + jsonObject.toString());
//判断是否传递成功如果token过期则重新获取
if (jsonObject.get("errcode") != null && jsonObject.get("errcode").equals("40001")) {
wechatAccessTokenUtil.removeAccessToken(ClientTypeEnum.WECHAT_MP);
return this.uploadMedia(type, mediaFileUrl);
} else if (jsonObject.get("errcode") != null) {
throw new ServiceException(jsonObject.get("errmsg").toString());
} else {
return jsonObject.get("media_id").toString(); return jsonObject.get("media_id").toString();
} }
}
/** /**
* 通过传过来的contentType判断是哪一种类型 * 通过传过来的contentType判断是哪一种类型
*
* @param contentType 获取来自连接的contentType * @param contentType 获取来自连接的contentType
* @return * @return
*/ */
public String judgeType(String contentType) { public String judgeType(String contentType) {
String fileExt = ""; String fileExt = "";
switch (contentType){ switch (contentType) {
case "image/png": case "image/png":
fileExt = ".png"; fileExt = ".png";
break; break;

View File

@ -110,5 +110,12 @@ public class WechatAccessTokenUtil {
} }
/**
* 清除 token
* @param clientTypeEnum
*/
public void removeAccessToken(ClientTypeEnum clientTypeEnum) {
cache.remove(CachePrefix.WECHAT_CGI_ACCESS_TOKEN.getPrefix() + clientTypeEnum.name());
}
} }

View File

@ -47,4 +47,12 @@ public class AfterSaleApplyVO {
*/ */
@ApiModelProperty(value = "账号类型", allowableValues = "ALIPAY,WECHATPAY,MEMBERWALLET,BANKTRANSFER") @ApiModelProperty(value = "账号类型", allowableValues = "ALIPAY,WECHATPAY,MEMBERWALLET,BANKTRANSFER")
private String accountType; private String accountType;
@ApiModelProperty(value = "是否支持退货")
private boolean returnGoods;
@ApiModelProperty(value = "是否支持退款")
private boolean returnMoney;
} }

View File

@ -69,8 +69,9 @@ public class AllowOperation implements Serializable {
//新订单允许支付 //新订单允许支付
this.pay = status.equals(OrderStatusEnum.UNPAID.name()) && payStatus.equals(PayStatusEnum.UNPAID.name()); this.pay = status.equals(OrderStatusEnum.UNPAID.name()) && payStatus.equals(PayStatusEnum.UNPAID.name());
//订单未发货就可以编辑收货人信息 //订单未发货就可以编辑收货人信息实物订单
this.editConsignee = order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name()) && !status.equals(OrderStatusEnum.CANCELLED.name()); this.editConsignee = order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) &&
order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name()) && !status.equals(OrderStatusEnum.CANCELLED.name());
//是否允许被发货 //是否允许被发货
this.ship = editConsignee && status.equals(OrderStatusEnum.UNDELIVERED.name()); this.ship = editConsignee && status.equals(OrderStatusEnum.UNDELIVERED.name());

View File

@ -20,6 +20,7 @@ import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.dto.AfterSaleDTO; import cn.lili.modules.order.order.entity.dto.AfterSaleDTO;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderTypeEnum;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO; import cn.lili.modules.order.order.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.order.entity.vo.AfterSaleSearchParams;
@ -128,6 +129,14 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
} else { } else {
afterSaleApplyVO.setRefundWay(AfterSaleRefundWayEnum.ORIGINAL.name()); afterSaleApplyVO.setRefundWay(AfterSaleRefundWayEnum.ORIGINAL.name());
} }
//判断订单类型虚拟订单只支持退款
if(order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())){
afterSaleApplyVO.setReturnMoney(true);
afterSaleApplyVO.setReturnGoods(false);
}else{
afterSaleApplyVO.setReturnMoney(true);
afterSaleApplyVO.setReturnGoods(true);
}
afterSaleApplyVO.setAccountType(order.getPaymentMethod()); afterSaleApplyVO.setAccountType(order.getPaymentMethod());
afterSaleApplyVO.setApplyRefundPrice(CurrencyUtil.sub(orderItem.getFlowPrice(), orderItem.getNum())); afterSaleApplyVO.setApplyRefundPrice(CurrencyUtil.sub(orderItem.getFlowPrice(), orderItem.getNum()));

View File

@ -365,13 +365,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
//检测虚拟订单信息 //检测虚拟订单信息
checkVerificationOrder(order, verificationCode); checkVerificationOrder(order, verificationCode);
order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); order.setOrderStatus(OrderStatusEnum.COMPLETED.name());
//修改订单信息 //订单完成
this.updateById(order); this.complete(orderSn);
//发送订单完成消息
OrderMessage orderMessage = new OrderMessage();
orderMessage.setNewStatus(OrderStatusEnum.COMPLETED);
orderMessage.setOrderSn(order.getSn());
this.sendUpdateStatusMessage(orderMessage);
return order; return order;
} }

View File

@ -66,7 +66,7 @@ public class Coupon extends BasePromotion {
@ApiModelProperty(value = "活动描述") @ApiModelProperty(value = "活动描述")
private String description; private String description;
@ApiModelProperty(value = "发行数量") @ApiModelProperty(value = "发行数量,如果是0则是不限制")
private Integer publishNum; private Integer publishNum;
@ApiModelProperty(value = "领取限制") @ApiModelProperty(value = "领取限制")

View File

@ -271,8 +271,8 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
if (coupon.getCouponLimitNum() < 0) { if (coupon.getCouponLimitNum() < 0) {
throw new ServiceException("领取限制数量不能为负数"); throw new ServiceException("领取限制数量不能为负数");
} }
//如果发行数量是0则判断领取限制数量
if (coupon.getCouponLimitNum() > coupon.getPublishNum()) { if (coupon.getPublishNum() != 0 && coupon.getCouponLimitNum() > coupon.getPublishNum()) {
throw new ServiceException("领取限制数量超出发行数量"); throw new ServiceException("领取限制数量超出发行数量");
} }
@ -282,7 +282,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
throw new ServiceException("优惠券折扣必须小于10且大于0"); throw new ServiceException("优惠券折扣必须小于10且大于0");
} }
if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { if (coupon.getRangeDayType() != null && coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) {
long nowTime = DateUtil.getDateline() * 1000; long nowTime = DateUtil.getDateline() * 1000;
if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) {
throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作");

View File

@ -55,7 +55,7 @@ public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, Mem
if (!PromotionStatusEnum.START.name().equals(coupon.getPromotionStatus())) { if (!PromotionStatusEnum.START.name().equals(coupon.getPromotionStatus())) {
throw new ServiceException("当前优惠券状态不可领取"); throw new ServiceException("当前优惠券状态不可领取");
} }
if (coupon.getReceivedNum() >= coupon.getPublishNum()) { if (coupon.getPublishNum() != 0 && coupon.getReceivedNum() >= coupon.getPublishNum()) {
throw new ServiceException("优惠券剩余领取数量不足"); throw new ServiceException("优惠券剩余领取数量不足");
} }
if (haveCoupons >= coupon.getCouponLimitNum()) { if (haveCoupons >= coupon.getCouponLimitNum()) {