Commit 617874e3 authored by shiyu's avatar shiyu

团购商品首页展示

parent 7bcff6ba
......@@ -127,7 +127,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/admin/dashboard/**", "anon");
filterChainDefinitionMap.put("/admin/specialPerformance/**", "anon");
filterChainDefinitionMap.put("/admin/sysFinance/**", "anon");
filterChainDefinitionMap.put("/admin/groupPurchase/**", "anon");
filterChainDefinitionMap.put("/admin/invitationCode/**", "anon");
// filterChainDefinitionMap.put("/admin/**", "anon");
......
package com.wwdz.ch.admin.controller;
import com.alibaba.fastjson.JSON;
import com.wwdz.ch.admin.service.SysGroupPurchaseService;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.xxdxxs.utils.StringUtils;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/admin/groupPurchase")
public class SysGroupPurchaseController {
private static final Logger logger = LoggerFactory.getLogger(SysGroupPurchaseController.class);
@Autowired
SysGroupPurchaseService sysGroupPurchaseService;
@ApiOperation(value = "藏品转团购")
@PostMapping("/collectorItemConvertToGroupPurchase")
public Result collectorItemConvertToAuction(@RequestBody SupplierItemRequestDto dto) {
logger.info("藏品转团购,请求参数:{}", JSON.toJSONString(dto));
if (StringUtils.isEmpty(dto.getItemIdsStr())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
return sysGroupPurchaseService.collectorItemConvertToGroupPurchase(dto);
}
}
......@@ -72,10 +72,10 @@ public class SysSupplierItemController {
return sysSupplierItemService.findAuctionList(dto);
}
@ApiOperation(value = "添加专场商品查询拍卖品列表")
@ApiOperation(value = "添加专场商品-查询拍卖品列表")
@PostMapping("/findSupplierItemForSpecialPerformance")
public Result findSupplierItemForSpecialPerformance(@RequestBody SupplierItemRequestDto dto) {
logger.info("添加专场商品查询拍卖品列表,请求参数:{}", JSON.toJSONString(dto));
logger.info("添加专场商品-查询拍卖品列表,请求参数:{}", JSON.toJSONString(dto));
if (dto.getSpecialPerformanceId() == null) {
return Result.failed(ResultCode.PARAM_ERROR);
}
......
......@@ -22,9 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
......
......@@ -182,11 +182,19 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
if (supplierItem.getBuyLimitNum() == -1) {
supplierItemVo.setIsLimitBuy(false);
}
AuctionConfig auctionConfig = auctionConfigDao.findByItemId(supplierItem.getId());
if (auctionConfig != null && auctionConfig.getIsValid()) {
supplierItemVo.setEditAble(false);
} else {
supplierItemVo.setEditAble(true);
if (supplierItem.getType() == DistributionEnum.DistributionTypeEnum.AUCTION.getCode()) {
AuctionConfig auctionConfig = auctionConfigDao.findByItemId(supplierItem.getId());
if (auctionConfig != null && auctionConfig.getIsValid()) {
supplierItemVo.setEditAble(false);
} else {
supplierItemVo.setEditAble(true);
}
} else if (supplierItem.getType() == DistributionEnum.DistributionTypeEnum.GROUP_PURCHASE.getCode()) {
GroupPurchaseConfig groupPurchaseConfig = groupPurchaseConfigDao.findByItemId(supplierItem.getId());
supplierItemVo.setSalePrice(PriceUtil.convertPriceFenToYuan(groupPurchaseConfig.getPrice()));
supplierItemVo.setDeposit(PriceUtil.convertPriceFenToYuan(groupPurchaseConfig.getDeposit()));
supplierItemVo.setGroupPurchaseStartTime(DateUtils.toString(groupPurchaseConfig.getStartTime()));
supplierItemVo.setGroupPurchaseEndTime(DateUtils.toString(groupPurchaseConfig.getEndTime()));
}
supplierItemVos.add(supplierItemVo);
//售出数量
......@@ -430,7 +438,7 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
}
SupplierItem supplierItem = new SupplierItem();
EntityMapper.copyAttribute(dto, supplierItem);
supplierItem.setRebate(new BigDecimal(dto.getRebate()));
supplierItem.setRebate(new BigDecimal(dto.getRebate() == null ? "3" : dto.getRebate()));
supplierItem.setDistributionPrice(PriceUtil.convertPriceFromStr(dto.getDistributionPrice()));
if (StringUtils.hasLength(dto.getSupplyPrice())) {
supplierItem.setSupplyPrice(PriceUtil.convertPriceFromStr(dto.getSupplyPrice()));
......
......@@ -94,6 +94,11 @@ public interface CommConsts {
*/
public final static String GROUPPURCHASE_DEPOSIT_PREFIX = "GP";
/**
* 系统订单号
*/
public final static String DISTRIBUTION_ORDER_PREFIX = "DA";
/**
* 平台收货地址
*/
......@@ -110,6 +115,13 @@ public interface CommConsts {
*/
public final static String ITEM_OF_SPECIAL_PERFORMANCE_URL = "/pages/saleAuctionDetail/index";
/**
* 消息跳转团购商品详情
*/
public final static String ITEM_OF_GROUPPURCHASE_URL = "/pages/saleAuctionDetail/index";
/**
* 微信手续费,按照最高的1%计算
*/
......
......@@ -12,7 +12,8 @@ public class DisposableSubscribeRecordEnum {
PRE_START(1, "AzJht7hkLJHSCN7trT3zsV3TaOE0Xk8faqm2sTf3Pm4", "拍卖开始通知"),
PRE_END(2, "G-GwA4yn63RJ6IysFotHB4anctNqbOy5qrz_R6vBJkM", "即将结束"),
ITEM_PRE_END(3, "XhEvunfXdO0j5JSpCVKKYlLuQbF7Yux8QfVEz5_L9xQ", "拍品即将结束"),
GROUPPURASE_SURPLUS_AMOUNT_PAY(4, "e6-VlkWBST_sN3PQ2Yx3iuPkxQL5Hf6cfMia3MDNinc", "尾款支付提醒"),
GROUPPURASE_CLOSER_TO_SUCCESS(5, "ekZ3s3OL6ZlWnORvvMOONfWNZsbm6DTlMNyv_2j2ijk", "拼团待成团提醒"),
;
private int type;
......
package com.wwdz.ch.core.entity;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class GroupPurchaseNoticeMsg implements Entity {
/**
* 团购定金支付id
*/
private String depositPayId;
/**
* 关联的预售订单id
*/
private String distributionOrderId;
/**
* 预支付id
*/
private String prepayId;
/**
* 微信支付订单号
*/
private String transactionId;
/**
* 商品id
*/
private Long itemId;
private String itemName;
/**
* 商品数量
*/
private Integer itemNum;
/**
* 用户id
*/
private Long userId;
/**
* 用户openid
*/
private String openId;
/**
* 订单金额
*/
private String orderAmount;
/**
* 定金金额
*/
private String deposit;
/**
* 尾款金额
*/
private String surplusAmount;
/**
* 支付结束时间
*/
private String payEndTime;
/**
* 要求拼团人数
*/
private Integer requireNum;
/**
* 已拼团人数
*/
private Integer peopleNum;
/**
* 剩余拼团人数
*/
private Integer surplusNum;
/**
* 拼团成功价格
*/
private String groupPuraseAmount;
/**
* 拼团剩余时间
*/
private String surplusTime;
}
......@@ -356,4 +356,14 @@ public class SupplierItemVo implements Entity {
*/
private Boolean isSubscribed;
/**
* 团购开始时间
*/
private Date startTime;
/**
* 团购结束时间
*/
private Date endTime;
}
......@@ -747,6 +747,100 @@ public class SendMsgServiceImpl implements SendMsgService {
return Result.success();
}
@Override
public Result sendGroupPurchaseSurplusAmountPayMsg(GroupPurchaseNoticeMsg groupPurchaseNoticeMsg) {
String openId = groupPurchaseNoticeMsg.getOpenId();
String token = wxAppletApi.getAppletAccessToken();
String url = SEND_SUBSCRIBE_MSG_URL + "?access_token=" + token;
OkHttpUtil okHttpUtil = OkHttpUtil.builder().url(url);
Map<String, Object> map = new HashMap<>();
map.put("touser", openId);
map.put("template_id", DisposableSubscribeRecordEnum.TypeEnum.GROUPPURASE_SURPLUS_AMOUNT_PAY.getTemplateId());
Map<String, Object> miniprogramMap = new HashMap<>();
miniprogramMap.put("appid", APPLET_APPID);
StringBuffer stringBuffer = new StringBuffer(CommConsts.ITEM_OF_GROUPPURCHASE_URL);
stringBuffer.append("?itemId=" + groupPurchaseNoticeMsg.getItemId());
map.put("page", stringBuffer.toString());
Map<String, Object> paramMap = new LinkedHashMap<>();
paramMap.put("thing1", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getItemName());
}});
paramMap.put("amount11", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getOrderAmount());
}});
paramMap.put("amount13", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getDeposit());
}});
paramMap.put("amount12", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getSurplusAmount());
}});
paramMap.put("date7", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getPayEndTime());
}});
map.put("data", paramMap);
logger.info("============ 团购尾款支付提醒订阅消息内容 : {}", JsonUtils.fromMap(map));
okHttpUtil.addParams(map);
okHttpUtil.post(true);
String responseStr = okHttpUtil.async();
logger.info("openid : {}, 发送团购尾款支付提醒订阅消息 response :{}", openId, responseStr);
String errorCode = JsonUtils.getValueByPath(responseStr, "errcode");
String errmsg = JsonUtils.getValueByPath(responseStr, "errmsg");
if (!"0".equals(errorCode)) {
logger.error("openid : {}, 发送团购尾款支付提醒订阅消息, errorCode : {}, errmsg : {} ", openId, errorCode, errmsg);
return Result.failed(responseStr);
}
logger.info("============= 发送团购尾款支付提醒订阅消息成功 ===========");
return Result.success();
}
@Override
public Result sendGroupPurchasecloserToSuccessMsg(GroupPurchaseNoticeMsg groupPurchaseNoticeMsg) {
String openId = groupPurchaseNoticeMsg.getOpenId();
String token = wxAppletApi.getAppletAccessToken();
String url = SEND_SUBSCRIBE_MSG_URL + "?access_token=" + token;
OkHttpUtil okHttpUtil = OkHttpUtil.builder().url(url);
Map<String, Object> map = new HashMap<>();
map.put("touser", openId);
map.put("template_id", DisposableSubscribeRecordEnum.TypeEnum.GROUPPURASE_CLOSER_TO_SUCCESS.getTemplateId());
Map<String, Object> miniprogramMap = new HashMap<>();
miniprogramMap.put("appid", APPLET_APPID);
StringBuffer stringBuffer = new StringBuffer(CommConsts.ITEM_OF_GROUPPURCHASE_URL);
stringBuffer.append("?itemId=" + groupPurchaseNoticeMsg.getItemId());
map.put("page", stringBuffer.toString());
Map<String, Object> paramMap = new LinkedHashMap<>();
paramMap.put("thing1", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getItemName());
}});
paramMap.put("number5", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getPeopleNum());
}});
paramMap.put("number2", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getSurplusNum());
}});
paramMap.put("amount4", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getGroupPuraseAmount());
}});
paramMap.put("thing8", new HashMap() {{
put("value", groupPurchaseNoticeMsg.getSurplusTime());
}});
map.put("data", paramMap);
logger.info("============ 拼团待成团提醒订阅消息内容 : {}", JsonUtils.fromMap(map));
okHttpUtil.addParams(map);
okHttpUtil.post(true);
String responseStr = okHttpUtil.async();
logger.info("openid : {}, 发送拼团待成团提醒订阅消息 response :{}", openId, responseStr);
String errorCode = JsonUtils.getValueByPath(responseStr, "errcode");
String errmsg = JsonUtils.getValueByPath(responseStr, "errmsg");
if (!"0".equals(errorCode)) {
logger.error("openid : {}, 发送拼团待成团提醒订阅消息, errorCode : {}, errmsg : {} ", openId, errorCode, errmsg);
return Result.failed(responseStr);
}
logger.info("============= 发送拼团待成团提醒订阅消息成功 ===========");
return Result.success();
}
@Override
public Result followNoticeMsg(FollowFansMsg followFansMsg) {
try {
......
......@@ -94,5 +94,20 @@ public interface SendMsgService {
*/
Result sendItemOfSpecialPerformanceEndMsg(AuctionOfferNoticeMsg auctionOfferNoticeMsg);
/**
* 拼团尾款支付提醒
* 拼团结束后24小时为截止支付时间
* @param groupPurchaseNoticeMsg
* @return
*/
Result sendGroupPurchaseSurplusAmountPayMsg(GroupPurchaseNoticeMsg groupPurchaseNoticeMsg);
/**
* 拼团待成团提醒
* 结束前2小时发送
* @param groupPurchaseNoticeMsg
* @return
*/
Result sendGroupPurchasecloserToSuccessMsg(GroupPurchaseNoticeMsg groupPurchaseNoticeMsg);
}
package com.wwdz.ch.db.dao.distribution;
import com.wwdz.ch.db.domain.distribution.GroupPurchaseConfig;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseConfigRequestDto;
import java.util.List;
public interface GroupPurchaseConfigDao {
......@@ -45,4 +48,12 @@ public interface GroupPurchaseConfigDao {
* @return
*/
GroupPurchaseConfig findByItemId(long itemId);
/**
* 查询团购商品列表
* @param itemId
* @return
*/
List<GroupPurchaseConfig> findList(GroupPurchaseConfigRequestDto dto);
}
......@@ -18,8 +18,12 @@ public interface GroupPurchaseRecordDao {
GroupPurchaseRecord findByPayId(String dispositPayId);
GroupPurchaseRecord findByOrderId(String distributionOrderId);
int updateByPayId(GroupPurchaseRecord groupPurchaseRecord);
int updateByPrimaryKey(GroupPurchaseRecord groupPurchaseRecord);
/**
* 统计当前商品已经团购的件数
* @param dto
......
package com.wwdz.ch.db.dto.request.distribution;
import com.wwdz.ch.db.dto.request.BaseRequestDto;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class GroupPurchaseConfigRequestDto extends BaseRequestDto implements Entity {
/**
* id
*/
private Integer id;
private Long userId;
/**
* 商品id
*/
private Long itemId;
/**
* 商品所属人id
*/
private Long creatorId;
/**
* 团购开始时间
*/
private Date startTime;
/**
* 团购结束时间
*/
private Date endTime;
/**
* 售价
*/
private Long price;
/**
* 供货价
*/
private Long supplyPrice;
/**
* 定金
*/
private Long deposit;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 状态
*/
private Integer state;
/**
* 是否有效
*/
private Boolean isValid;
/**
* 是否成交
*/
private Boolean isDeal;
}
......@@ -170,8 +170,6 @@ public class SupplierItemRequestDto extends BaseRequestDto implements Entity {
*/
private String auctionEndTime;
/**
* 团购开始时间
*/
......
package com.wwdz.ch.db.impl.distribution;
import com.github.pagehelper.PageHelper;
import com.wwdz.ch.db.dao.distribution.GroupPurchaseConfigDao;
import com.wwdz.ch.db.domain.distribution.GroupPurchaseConfig;
import com.wwdz.ch.db.domain.distribution.GroupPurchaseConfigExample;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseConfigRequestDto;
import com.wwdz.ch.db.mapper.distribution.GroupPurchaseConfigMapper;
import com.xxdxxs.db.component.JdbcHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository
public class GroupPurchaseConfigDaoImpl implements GroupPurchaseConfigDao {
......@@ -53,4 +57,15 @@ public class GroupPurchaseConfigDaoImpl implements GroupPurchaseConfigDao {
criteria.andItemIdEqualTo(itemId);
return groupPurchaseConfigMapper.selectOneByExample(example);
}
@Override
public List<GroupPurchaseConfig> findList(GroupPurchaseConfigRequestDto dto) {
GroupPurchaseConfigExample example = new GroupPurchaseConfigExample();
GroupPurchaseConfigExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getItemId(), criteria:: andItemIdEqualTo);
JdbcHelper.ifPresent(dto.getState(), criteria:: andStateEqualTo);
example.setOrderByClause(" create_time desc");
PageHelper.startPage(dto.getPage(), dto.getLimit());
return groupPurchaseConfigMapper.selectByExample(example);
}
}
......@@ -9,6 +9,7 @@ import com.xxdxxs.db.component.JdbcHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository
......@@ -31,6 +32,14 @@ public class GroupPurchaseRecordDaoImpl implements GroupPurchaseRecordDao {
return groupPurchaseRecordMapper.selectOneByExample(example);
}
@Override
public GroupPurchaseRecord findByOrderId(String distributionOrderId) {
GroupPurchaseRecordExample example = new GroupPurchaseRecordExample();
GroupPurchaseRecordExample.Criteria criteria = example.createCriteria();
criteria.andDistributionOrderIdEqualTo(distributionOrderId);
return groupPurchaseRecordMapper.selectOneByExample(example);
}
@Override
public int updateByPayId(GroupPurchaseRecord groupPurchaseRecord) {
GroupPurchaseRecordExample example = new GroupPurchaseRecordExample();
......@@ -39,6 +48,11 @@ public class GroupPurchaseRecordDaoImpl implements GroupPurchaseRecordDao {
return groupPurchaseRecordMapper.updateByExampleSelective(groupPurchaseRecord, example);
}
@Override
public int updateByPrimaryKey(GroupPurchaseRecord groupPurchaseRecord) {
groupPurchaseRecord.setUpdateTime(new Date());
return groupPurchaseRecordMapper.updateByPrimaryKeySelective(groupPurchaseRecord);
}
@Override
public long summaryItemNum(GroupPurchaseRecordRequestDto dto) {
......
......@@ -594,13 +594,32 @@ public class WxPayCallbackController {
redisUtils.set(refundId, refundId);
//退款成功
if (refundNotification.getRefundStatus().equals(Status.SUCCESS)){
String successTime = refundNotification.getSuccessTime();
//查询系统中订单现在的状态,避免重复更新
DistributionOrder distributionOrder = distributionOrderDao.findById(distributionOrderId);
//只有在订单状态为退款处理中,才进行退款成功的状态修改
if (distributionOrder.getState() == DistributionEnum.DistributionOrderStateEnum.REFUNDING.getCode()) {
//订单改为已取消的状态
distributionOrderDao.updateState(distributionOrderId, DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
String successTime = refundNotification.getSuccessTime();
if (distributionOrderId.startsWith(CommConsts.DISTRIBUTION_ORDER_PREFIX)) {
//只有在订单状态为退款处理中,才进行退款成功的状态修改
if (distributionOrder.getState() == DistributionEnum.DistributionOrderStateEnum.REFUNDING.getCode()) {
//订单改为已取消的状态
distributionOrderDao.updateState(distributionOrderId, DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
//退款单状态改为成功
RefundOrder refundOrder = new RefundOrder();
refundOrder.setRefundId(refundId);
refundOrder.setWxRefundId(refundNotification.getRefundId());
refundOrder.setUpdateTime(new Date());
refundOrder.setSuccessTime(TimeUtil.wxTimeConvertToDate(successTime));
refundOrder.setUserReceivedAccount(refundNotification.getUserReceivedAccount());
refundOrder.setState(RefundOrderEnum.StateEnum.SUCCESS.getCode());
refundOrderDao.update(refundOrder);
//分销商利润记录改为无效
distributorProfitDao.updateValidState(distributionOrderId, false);
logger.info(">>>>>>>> 分销单号:{}, 退款单号:{},退款处理成功, 退款时间为: {}<<<<<<<<<", distributionOrderId, refundId, TimeUtil.wxTimeConvertToDate(successTime));
returnMap.put("code", "SUCCESS");
returnMap.put("message", "成功");
return JsonUtils.from(returnMap);
}
} else if (distributionOrderId.startsWith(CommConsts.GROUPPURCHASE_DEPOSIT_PREFIX)) {
//团购定金交易单的退款处理
//退款单状态改为成功
RefundOrder refundOrder = new RefundOrder();
refundOrder.setRefundId(refundId);
......@@ -610,12 +629,6 @@ public class WxPayCallbackController {
refundOrder.setUserReceivedAccount(refundNotification.getUserReceivedAccount());
refundOrder.setState(RefundOrderEnum.StateEnum.SUCCESS.getCode());
refundOrderDao.update(refundOrder);
//分销商利润记录改为无效
distributorProfitDao.updateValidState(distributionOrderId, false);
logger.info(">>>>>>>> 分销单号:{}, 退款单号:{},退款处理成功, 退款时间为: {}<<<<<<<<<", distributionOrderId, refundId, TimeUtil.wxTimeConvertToDate(successTime));
returnMap.put("code", "SUCCESS");
returnMap.put("message", "成功");
return JsonUtils.from(returnMap);
}
} else {
//退款单状态改为失败
......
package com.wwdz.ch.wx.entity.vo.distribution;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Map;
@Data
public class GroupPurchaseItemVo implements Entity {
/**
* 商品id
*/
private Long itemId;
/**
* 商品名称
*/
private String itemName;
/**
* 用于列表展示的图片对象
*/
private Map<String, Object> homePageImage;
/**
* 商品详细介绍,是富文本格式
*/
private String description;
/**
* 头像
*/
private String creatorAvatar;
/**
* 简介
*/
private String creatorProfile;
private Long creatorId;
private String creatorName;
/**
* 是否订阅了待成团消息
*/
private Boolean isSubscribedOfCloseToSuccess;
/**
* 是否订阅了尾款支付提醒消息
*/
private Boolean isSubscribedOfPay;
/**
* 折扣相关信息、进度
*/
private Map<String, Object> discountInfo;
}
......@@ -56,7 +56,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
private static final Logger logger = LoggerFactory.getLogger(DistributionOrderServiceImpl.class);
private final static String DISTRIBUTION_ORDER_PREFIX = "DA";
private final static String DISTRIBUTION_ORDER_PREFIX = CommConsts.DISTRIBUTION_ORDER_PREFIX;
private final static String SECRET = "117eb48AX0864490fbe4d1ef081B9cc25";
......@@ -1116,8 +1116,11 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
distributionOrderDetailVo.setTypeName(DistributionEnum.DistributionTypeEnum.getNameByCode(distributionOrder.getType()));
DistributorProfit distributorProfit = distributorProfitDao.findByIdOfDistributor(dto.getDistributionOrderId(), distributionOrder.getSellerId());
if (distributorProfit != null) {
distributionOrderDetailVo.setChannelCost(PriceUtil.convertPriceFenToYuan(distributorProfit.getChannelCost()));
distributionOrderDetailVo.setIntroduceCost(PriceUtil.convertPriceFenToYuan(distributorProfit.getIntroduceCost()));
if (distributionOrder.getType() != DistributionEnum.DistributionTypeEnum.AUCTION.getCode()
&& distributionOrder.getType() != DistributionEnum.DistributionTypeEnum.GROUP_PURCHASE.getCode()) {
distributionOrderDetailVo.setChannelCost(PriceUtil.convertPriceFenToYuan(distributorProfit.getChannelCost()));
distributionOrderDetailVo.setIntroduceCost(PriceUtil.convertPriceFenToYuan(distributorProfit.getIntroduceCost()));
}
FollowFansRecordRequestDto followFansRecordRequestDto = new FollowFansRecordRequestDto();
followFansRecordRequestDto.setFollowerId(supplierItem.getCreatorId());
followFansRecordRequestDto.setFansId(distributionOrder.getBuyerId());
......@@ -1359,9 +1362,5 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
return Result.failed();
}
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("15.00");
bigDecimal = PriceUtil.convertToDivide(bigDecimal);
System.out.println(bigDecimal.doubleValue());
}
}
package com.wwdz.ch.wx.impl.distribution;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.Status;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.GroupPurchaseEnum;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.consts.*;
import com.wwdz.ch.core.entity.wxPay.DistributionOrderRefundRequestDto;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.core.util.StringUtil;
import com.wwdz.ch.core.util.*;
import com.wwdz.ch.db.dao.DisposableSubscribeRecordDao;
import com.wwdz.ch.db.dao.distribution.*;
import com.wwdz.ch.db.domain.User;
import com.wwdz.ch.db.domain.distribution.*;
import com.wwdz.ch.db.dto.request.FollowFansRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseConfigRequestDto;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseRecordRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SpecialPerformanceRequestDto;
import com.wwdz.ch.wx.entity.vo.distribution.GroupPurchaseItemVo;
import com.wwdz.ch.wx.service.distribution.DistributorProfitService;
import com.wwdz.ch.wx.service.distribution.GroupPurchaseService;
import jdk.internal.org.objectweb.asm.Handle;
import org.redisson.api.RLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -29,6 +32,7 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
public class GroupPurchaseServiceImpl implements GroupPurchaseService {
......@@ -62,6 +66,83 @@ public class GroupPurchaseServiceImpl implements GroupPurchaseService {
@Autowired
DistributorProfitDao distributorProfitDao;
@Autowired
RefundOrderDao refundOrderDao;
@Autowired
DisposableSubscribeRecordDao disposableSubscribeRecordDao;
@Override
public Result findList(GroupPurchaseConfigRequestDto dto) {
try {
Date now = new Date();
//检测团购商品的开始时间,修改状态
dto.setState(GroupPurchaseEnum.ItemStateEnum.NOT_START.getCode());
List<GroupPurchaseConfig> groupPurchaseConfigList = groupPurchaseConfigDao.findList(dto);
for (GroupPurchaseConfig groupPurchaseConfig : groupPurchaseConfigList) {
if (now.after(groupPurchaseConfig.getStartTime()) && groupPurchaseConfig.getEndTime().after(now)) {
groupPurchaseConfigDao.updateState(groupPurchaseConfig.getItemId(), GroupPurchaseEnum.ItemStateEnum.PROCESSING.getCode());
}
}
//查询进行中的团购
dto.setState(GroupPurchaseEnum.ItemStateEnum.PROCESSING.getCode());
List<GroupPurchaseConfig> groupPurchaseConfigs = groupPurchaseConfigDao.findList(dto);
List<GroupPurchaseItemVo> groupPurchaseItemVos = new ArrayList<>();
for (GroupPurchaseConfig groupPurchaseConfig : groupPurchaseConfigs) {
SupplierItem supplierItem = supplierItemDao.findById(groupPurchaseConfig.getItemId());
GroupPurchaseItemVo groupPurchaseItemVo = new GroupPurchaseItemVo();
groupPurchaseItemVo.setItemId(supplierItem.getId());
groupPurchaseItemVo.setItemName(supplierItem.getName());
groupPurchaseItemVo.setCreatorId(supplierItem.getCreatorId());
groupPurchaseItemVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
GroupPurchaseRecordRequestDto groupPurchaseRecordRequestDto = new GroupPurchaseRecordRequestDto();
groupPurchaseRecordRequestDto.setItemId(groupPurchaseConfig.getItemId());
Result<Map<String, Object>> result = checkGroupPurchase(groupPurchaseRecordRequestDto);
if (!result.getSuccess()) {
continue;
}
Map<String, Object> map = result.getData();
groupPurchaseItemVo.setDiscountInfo(map);
groupPurchaseItemVos.add(groupPurchaseItemVo);
}
return Result.success(groupPurchaseItemVos);
} catch (Exception e) {
logger.error("查询团购商品失败 error : {}", e);
}
return Result.failed("查询团购商品失败");
}
@Override
public Result findItemDetail(GroupPurchaseConfigRequestDto dto) {
try {
long itemId = dto.getItemId();
SupplierItem supplierItem = supplierItemDao.findById(itemId);
GroupPurchaseItemVo groupPurchaseItemVo = new GroupPurchaseItemVo();
groupPurchaseItemVo.setItemId(supplierItem.getId());
groupPurchaseItemVo.setItemName(supplierItem.getName());
groupPurchaseItemVo.setDescription(supplierItem.getDescription());
User user = cacheUtil.appletUserInfoCache.get(supplierItem.getCreatorId()).get();
groupPurchaseItemVo.setCreatorName(user.getNickname());
groupPurchaseItemVo.setCreatorAvatar(user.getAvatar());
groupPurchaseItemVo.setCreatorProfile(user.getProfile());
groupPurchaseItemVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
GroupPurchaseRecordRequestDto groupPurchaseRecordRequestDto = new GroupPurchaseRecordRequestDto();
groupPurchaseRecordRequestDto.setItemId(itemId);
Result<Map<String, Object>> result = checkGroupPurchase(groupPurchaseRecordRequestDto);
if (!result.getSuccess()) {
return Result.failed("查询团购信息错误");
}
Map<String, Object> map = result.getData();
groupPurchaseItemVo.setDiscountInfo(map);
groupPurchaseItemVo.setIsSubscribedOfCloseToSuccess(disposableSubscribeRecordDao.isSubscribed(dto.getUserId(), itemId, DisposableSubscribeRecordEnum.TypeEnum.GROUPPURASE_CLOSER_TO_SUCCESS.getType()));
groupPurchaseItemVo.setIsSubscribedOfPay(disposableSubscribeRecordDao.isSubscribed(dto.getUserId(), itemId, DisposableSubscribeRecordEnum.TypeEnum.GROUPPURASE_SURPLUS_AMOUNT_PAY.getType()));
return Result.success(groupPurchaseItemVo);
} catch (Exception e) {
logger.error("查询团购商品详情失败 error : {}", e);
}
return Result.failed("查询团购商品详情失败");
}
@Override
public Result payDeposit(GroupPurchaseRecordRequestDto dto) {
......@@ -96,6 +177,66 @@ public class GroupPurchaseServiceImpl implements GroupPurchaseService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result cancelDeposit(GroupPurchaseRecordRequestDto dto) {
RLock lock = null;
try {
String refundId = IdUtils.getOrderNumber(CommConsts.REFUND_ORDER_PREFIX);
//判断订单状态
String distributionOrderId = dto.getDistributionOrderId();
DistributionOrder distributionOrder = distributionOrderDao.findById(distributionOrderId);
if (distributionOrder.getState() != DistributionEnum.DistributionOrderStateEnum.PRE_SALE.getCode()) {
return Result.failed("订单不是预售状态,不能取消定金");
}
//查询定金支付记录
GroupPurchaseRecord groupPurchaseRecord = groupPurchaseRecordDao.findByOrderId(distributionOrderId);
DistributionOrderRefundRequestDto refundRequestDto = new DistributionOrderRefundRequestDto();
String depositPayId = groupPurchaseRecord.getDepositPayId();
refundRequestDto.setDistributionOrderId(depositPayId);
refundRequestDto.setRefundPrice(groupPurchaseRecord.getAmount());
refundRequestDto.setAmount(groupPurchaseRecord.getAmount());
refundRequestDto.setRefundId(refundId);
Result result = wxPayServiceApi.orderRefund(refundRequestDto);
if (!result.getSuccess()) {
return Result.failed("调用微信支付退款接口错误");
}
Refund refundResponse = (Refund) result.getData();
if (refundResponse.getStatus().equals(Status.SUCCESS) || refundResponse.getStatus().equals(Status.PROCESSING)) {
Date now = new Date();
//创建退款单
RefundOrder refundOrder = new RefundOrder();
refundOrder.setRefundId(refundId);
refundOrder.setRefundAmount(groupPurchaseRecord.getAmount());
refundOrder.setAmount(groupPurchaseRecord.getAmount());
refundOrder.setDistributionOrderId(depositPayId);
refundOrder.setDistributorId(distributionOrder.getSellerId());
refundOrder.setCreateTime(now);
refundOrder.setUpdateTime(now);
refundOrder.setState(RefundOrderEnum.StateEnum.PROCESSING.getCode());
refundOrderDao.insert(refundOrder);
//退款受理成功,订单的状态改为取消
distributionOrderDao.updateState(distributionOrderId, DistributionEnum.DistributionOrderStateEnum.CANCEL.getCode());
//团购的记录改为无效
GroupPurchaseRecord updateRecord = new GroupPurchaseRecord();
updateRecord.setId(groupPurchaseRecord.getId());
updateRecord.setState(GroupPurchaseEnum.StateEnum.INVALID.getCode());
groupPurchaseRecordDao.updateByPrimaryKey(updateRecord);
logger.info(">>>>>>>> 分销单号:{}, 退款单号:{}, 定金退款申请成功,创建退款单 <<<<<<<<<", distributionOrderId, refundId);
return Result.success(refundId);
}
} catch (Exception e) {
logger.error("定金退款申请失败 error : {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} finally {
if (lock != null && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return Result.failed();
}
@Override
public Result checkGroupPurchase(GroupPurchaseRecordRequestDto dto) {
try {
......
package com.wwdz.ch.wx.service.distribution;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseConfigRequestDto;
import com.wwdz.ch.db.dto.request.distribution.GroupPurchaseRecordRequestDto;
import java.util.Map;
public interface GroupPurchaseService {
/**
* 查询团购商品
* @param dto
* @return
*/
Result findList(GroupPurchaseConfigRequestDto dto);
/**
* 查询团购商品详情
* @param dto
* @return
*/
Result findItemDetail(GroupPurchaseConfigRequestDto dto);
/**
* 支付团购定金
* @param dto
......@@ -14,6 +31,15 @@ public interface GroupPurchaseService {
*/
Result payDeposit(GroupPurchaseRecordRequestDto dto);
/**
* 取消订单,退定金
* @param dto
* @return
*/
Result cancelDeposit(GroupPurchaseRecordRequestDto dto);
/**
* 查询团购当前进度
* @param dto
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment