Commit c0ac5a0b authored by hezhen's avatar hezhen

添加活动购买

parent 430038a3
...@@ -15,7 +15,7 @@ public class OrderGoodsDTO { ...@@ -15,7 +15,7 @@ public class OrderGoodsDTO {
public static final Integer TYPE_TOUR = 2; public static final Integer TYPE_TOUR = 2;
public static final Integer TYPE_MEMBER = 3; public static final Integer TYPE_MEMBER = 3;
public static final Integer TYPE_CAMPSITE = 4; public static final Integer TYPE_CAMPSITE = 4;
public static final Integer TYPE_ACTIVITY = 5;
/** /**
* 商品id * 商品id
*/ */
...@@ -53,4 +53,8 @@ public class OrderGoodsDTO { ...@@ -53,4 +53,8 @@ public class OrderGoodsDTO {
@ApiModelProperty(value = "售价") @ApiModelProperty(value = "售价")
private BigDecimal price; private BigDecimal price;
@ApiModelProperty(value = "拥金")
private BigDecimal comission;
} }
\ No newline at end of file
...@@ -184,6 +184,62 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A ...@@ -184,6 +184,62 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
} }
} }
//购买计算用户拥金
public void payOrderActivityWater(OrderWaterDTO orderWaterDTO) {
//订单id
Integer orderId = orderWaterDTO.getOrderId();
//订单号
String orderNo = orderWaterDTO.getOrderNo();
//用户id
Integer userId = orderWaterDTO.getUserId();
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList();
log.info("活动计算用户拥金----payOrderWater----userId====" + userId + "---orderId===" + orderId + "---orderNo===" + orderNo);
if (orderId == null || orderId == 0 || userId == null || userId == 0 | CollectionUtils.isEmpty(goodsDTOList)) {
log.info("购买计算用户拥金----payOrderWater----参数不能为空----orderId===" + orderId);
return;
}
AppUserRelation relation = relationBiz.getRelationByIdUserIdAndTime(userId);
if (relation == null || relation.getParentId() == null || relation.getParentId() == 0) {
log.info("活动计算用户拥金----payOrderWater--------userId===" + userId + "---无有效上线");
return;
}
Integer parentId = relation.getParentId();
log.info("活动计算用户拥金----payOrderWater--------userId===" + userId + "---parentId===" + parentId);
BigDecimal amount = new BigDecimal("0.00");
for (OrderGoodsDTO goodsDto : goodsDTOList) {
//商品id
Integer goodId = goodsDto.getGoodId();
//商品价格
BigDecimal price = goodsDto.getPrice();
BigDecimal commission = goodsDto.getComission() == null ? BigDecimal.ZERO : goodsDto.getComission();
AppUserSellingWater sellingWater = new AppUserSellingWater();
sellingWater.setOrderId(orderId);
sellingWater.setGoodId(goodId);
sellingWater = selectOne(sellingWater);
if (sellingWater != null)
continue;
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "---commission===" + commission);
sellingWater = new AppUserSellingWater();
sellingWater.setUserId(parentId);
sellingWater.setSourceId(userId);
sellingWater.setOrderId(orderId);
sellingWater.setOrderNo(orderNo);
sellingWater.setOrderType(goodsDto.getType());
sellingWater.setGoodId(goodId);
sellingWater.setTitle(goodsDto.getTitle());
sellingWater.setImg(goodsDto.getImg());
sellingWater.setPrice(price);
sellingWater.setGoodNumber(goodsDto.getGoodNumber());
sellingWater.setCommission(commission);
insertSelective(sellingWater);
log.info("活动计算用户拥成功----payOrderWater--------userId===" + userId);
amount = amount.add(commission);
}
log.info("活动计算用户未入账----payOrderWater--------userId===" + parentId + "----amount====" + amount );
finishOrderWater(orderWaterDTO);
}
//订单完成计算用户拥金 //订单完成计算用户拥金
public void finishOrderWater(OrderWaterDTO orderWaterDTO) { public void finishOrderWater(OrderWaterDTO orderWaterDTO) {
//订单id //订单id
......
package com.github.wxiaoqi.security.admin.handler; package com.github.wxiaoqi.security.admin.handler;
import cn.hutool.db.sql.Order;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz; import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz;
import com.github.wxiaoqi.security.admin.dto.OrderGoodsDTO; import com.github.wxiaoqi.security.admin.dto.OrderGoodsDTO;
import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO; import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO;
...@@ -27,6 +26,7 @@ import java.util.concurrent.ExecutorService; ...@@ -27,6 +26,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import static com.github.wxiaoqi.security.admin.config.RabbitAdminConfig.*; import static com.github.wxiaoqi.security.admin.config.RabbitAdminConfig.*;
import static com.xxfc.platform.order.contant.enumerate.OrderTypeEnum.*;
import static com.xxfc.platform.order.pojo.mq.OrderMQDTO.*; import static com.xxfc.platform.order.pojo.mq.OrderMQDTO.*;
@Component @Component
...@@ -124,11 +124,30 @@ public class WaterMQHandler { ...@@ -124,11 +124,30 @@ public class WaterMQHandler {
}} }}
); );
break; break;
case ACTIVITY:
orderWaterDTO.setGoodsDTOList(
new ArrayList<OrderGoodsDTO>() {{
add(new OrderGoodsDTO() {{
setGoodId(orderMQDTO.getOrderActivityDetail().getActivityId());
setGoodNumber(1);
setImg(orderMQDTO.getPicture());
setPrice(orderMQDTO.getRealAmount());
setComission(orderMQDTO.getOrderActivityDetail().getParentComisson());
setTitle(orderMQDTO.getName());
setType(OrderGoodsDTO.TYPE_ACTIVITY);
}});
}}
);
break;
default: default:
break; break;
} }
waterBiz.orderWater(orderWaterDTO); if (OrderTypeEnum.get(orderMQDTO.getType()).equals(ACTIVITY)){
waterBiz.payOrderActivityWater(orderWaterDTO);
}else {
waterBiz.orderWater(orderWaterDTO);
}
executorService.shutdown(); executorService.shutdown();
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG); Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
......
package com.xxfc.platform.activity.entity;
import cn.hutool.json.JSONUtil;
import com.xxfc.platform.activity.vo.ActivityInfoRuleVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import javax.persistence.*;
import java.io.Serializable;
/**
* 通用活动规则表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
@Data
@Table(name = "activity_info")
public class ActivityInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
@Column(name = "type")
@ApiModelProperty(value = "活动类型:1-2680活动")
private Integer type;
/**
* 活动名称
*/
@Column(name = "name")
@ApiModelProperty(value = "活动名称")
private String name;
@Column(name = "img")
@ApiModelProperty(value = "活动名称")
private String img;
@Column(name = "descr")
@ApiModelProperty(value = "活动描述")
private String descr;
@Column(name = "start_time")
@ApiModelProperty(value = "活动开始时间")
private Long startTime;
@Column(name = "end_time")
@ApiModelProperty(value = "活动结束时间")
private Long endTime;
@Column(name = "number")
@ApiModelProperty(value = "活动人数限制")
private Integer number;
@Column(name = "join_number")
@ApiModelProperty(value = "参加活动人数")
private Integer joinNumber;
@Column(name = "status")
@ApiModelProperty(value = "活动是否开启:0-未开启;1-已开启;2-已关闭")
private Integer status;
@Column(name = "value")
@ApiModelProperty(value = "活动奖励规则,json")
private String value;
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除:0-正常;1-删除")
private Integer isDel;
@Transient
private ActivityInfoRuleVo activityInfoRuleVo;
@Transient
private Integer isJoin;
@Transient
private Integer orderId;
public ActivityInfoRuleVo getActivityInfoRuleVo(){
ActivityInfoRuleVo activityInfoRuleVo = null;
if (StringUtils.isNotBlank(value)){
activityInfoRuleVo = JSONUtil.toBean(value,ActivityInfoRuleVo.class);
}
return activityInfoRuleVo;
}
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
/**
* 用户活动表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
@Data
@Table(name = "activity_info_user")
public class ActivityInfoUser implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
@Column(name = "activity_id")
@ApiModelProperty(value = "活动id")
private Integer activityId;
@Column(name = "status")
@ApiModelProperty(value = "状态:0-参加中;1-已参加;2-已取消")
private Integer status;
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
@Column(name = "order_no")
@ApiModelProperty(value = "订单号")
private String orderNo;
@Column(name = "crt_time")
@ApiModelProperty(value = "参与时间", hidden = true )
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除:0-正常;1-删除")
private Integer isDel;
@Transient
private Integer type;
}
...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.dto.UserInfoDTO; ...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.admin.dto.UserInfoDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.dto.ActivityListDTO; import com.xxfc.platform.activity.dto.ActivityListDTO;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO; import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.activity.entity.ActivityProduct; import com.xxfc.platform.activity.entity.ActivityProduct;
import com.xxfc.platform.activity.entity.ActivityProductSpecs; import com.xxfc.platform.activity.entity.ActivityProductSpecs;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
...@@ -103,4 +104,7 @@ public interface ActivityFeign { ...@@ -103,4 +104,7 @@ public interface ActivityFeign {
@PostMapping(value = "/activity/product/app/unauth/update") @PostMapping(value = "/activity/product/app/unauth/update")
public ObjectRestResponse updateProduct(@RequestBody ActivityProduct activityProduct); public ObjectRestResponse updateProduct(@RequestBody ActivityProduct activityProduct);
@PostMapping("app/activityInfo/app/unauth/updActivty")
ObjectRestResponse updActivty(@RequestBody ActivityInfo activityInfo);
} }
package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 通用活动规则表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
@Data
public class ActivityInfoRuleVo extends ActivityRuleVo implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "支付金额")
private BigDecimal payPrice;
@ApiModelProperty(value = "天数")
private Integer days;
@ApiModelProperty(value = "上级拥金")
private BigDecimal parentComisson;
}
package com.xxfc.platform.activity.biz;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.activity.entity.ActivityRule;
import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.mapper.ActivityInfoMapper;
import com.xxfc.platform.activity.mapper.ActivityRuleMapper;
import com.xxfc.platform.activity.vo.ActivityRuleVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.List;
/**
* 通用活动规则表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
@Slf4j
@Service
public class ActivityInfoBiz extends BaseBiz<ActivityInfoMapper, ActivityInfo> {
//获取最新的生效的活动
public ActivityInfo getActity(Integer type){
Example example=new Example(ActivityInfo.class);
example.createCriteria().andEqualTo("status",1).andEqualTo("type",type).andEqualTo("isDel",0);
example.setOrderByClause("id desc");
List<ActivityInfo> list=mapper.selectByExample(example);
if(list.size()>0){
return list.get(0);
}
return null;
}
//获取最新活动的H5页面
public ActivityInfo getActivityH5(Integer type){
type = type == null ? 1 : type;
ActivityInfo activityInfo=getActity(type);
if (activityInfo == null)
throw new BaseException("无有效的活动",ResultCode.NULL_CODE);
return activityInfo;
}
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.activity.entity.ActivityInfoUser;
import com.xxfc.platform.activity.mapper.ActivityInfoUserMapper;
import com.xxfc.platform.activity.vo.ActivityInfoRuleVo;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderActivityDetail;
import com.xxfc.platform.order.feign.OrderFeign;
import com.xxfc.platform.order.pojo.order.ActivityInfoBO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
import java.util.stream.Collectors;
/**
* 用户活动表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
@Service
@Slf4j
public class ActivityInfoUserBiz extends BaseBiz<ActivityInfoUserMapper, ActivityInfoUser> {
@Autowired
ActivityInfoBiz activityInfoBiz;
@Autowired
OrderFeign orderFeign;
@Autowired
UserFeign userFeign;
//参与活动
@Transactional(rollbackFor = Exception.class)
public BaseOrder joinActivity(ActivityInfoUser activityInfoUser){
ActivityInfo activityInfo=activityInfoBiz.selectById(activityInfoUser.getActivityId());
if (activityInfo == null || activityInfo.getStatus() != 1)
throw new BaseException("无效的活动",ResultCode.NULL_CODE);
Integer joinNumber = activityInfo.getJoinNumber() == null ? 0 : activityInfo.getJoinNumber();
Integer number = activityInfo.getNumber() == null ? 0 : activityInfo.getNumber();
if(number > 0 && joinNumber >= number)
throw new BaseException("----活动已超过参与人数----number==="+number,ResultCode.FAILED_CODE);
Integer activityId=activityInfo.getId();
activityInfoUser.setActivityId(activityId);
activityInfoUser.setStatus(1);
Long num = selectCount(activityInfoUser);
if(num != null && num > 0)
throw new BaseException("用户已参与该活动",ResultCode.FAILED_CODE);
activityInfoUser.setStatus(0);
ActivityInfoUser activityInfoUserStatus = getOne(activityInfoUser);
if (activityInfoUserStatus != null ){
activityInfoUserStatus.setStatus(2);
updateSelectiveById(activityInfoUserStatus);
}else {
joinNumber += 1 ;
}
BaseOrder baseOrder = addOrder(activityInfo);
if (baseOrder == null)
throw new BaseException("下单失败",ResultCode.FAILED_CODE);
activityInfoUser.setOrderId(baseOrder.getId());
activityInfoUser.setOrderNo(baseOrder.getNo());
insertSelective(activityInfoUser);
activityInfo.setJoinNumber(joinNumber);
activityInfoBiz.updateSelectiveById(activityInfo);
return baseOrder;
}
public ActivityInfoUser getOne(ActivityInfoUser activityInfoUser){
Example example = new Example(ActivityInfoUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("activityId",activityInfoUser.getActivityId()).andEqualTo("userId",activityInfoUser.getUserId()).andEqualTo("isDel",0);
if (activityInfoUser.getStatus() != null )
criteria.andEqualTo("status",activityInfoUser.getStatus());
example.setOrderByClause("id desc");
List<ActivityInfoUser> list=mapper.selectByExample(example);
if(list.size()>0){
return list.get(0);
}
return null;
}
public BaseOrder addOrder(ActivityInfo activityInfo){
ActivityInfoBO activityInfoBO = new ActivityInfoBO();
activityInfoBO.setActivity(activityInfo);
ObjectRestResponse<BaseOrder> restResponse = orderFeign.add(activityInfoBO);
if (restResponse.getData() == null ){
throw new BaseException(restResponse.getMessage(),restResponse.getStatus());
}
return restResponse.getData();
}
public ActivityInfo getInfo(ActivityInfoUser activityInfoUser){
ActivityInfo activityInfo=activityInfoBiz.getActivityH5(activityInfoUser.getType());
activityInfoUser.setActivityId(activityInfo.getId());
activityInfoUser.setStatus(1);
activityInfoUser = getOne(activityInfoUser);
Integer isJoin = 0 ;
if(activityInfoUser != null ){
isJoin = 1;
}
activityInfo.setIsJoin(isJoin);
return activityInfo;
}
public ObjectRestResponse updActivty(ActivityInfo activityInfo){
Integer orderId = activityInfo.getOrderId();
ActivityInfoUser activityInfoUser = new ActivityInfoUser();
activityInfoUser.setOrderId(orderId);
activityInfoUser = selectOne(activityInfoUser);
if (activityInfoUser == null ){
throw new BaseException("未参加活动",ResultCode.FAILED_CODE);
}
activityInfoUser.setStatus(1);
updateSelectiveById(activityInfoUser);
Integer userId = activityInfoUser.getUserId() == null ? 0 : activityInfoUser.getUserId();
ActivityInfoRuleVo activityInfoRuleVo = activityInfo.getActivityInfoRuleVo();
Integer days = 0;
if (activityInfoRuleVo != null ){
days = activityInfoRuleVo.getDays();
}
UserMemberDTO userMemberDTO = new UserMemberDTO() {{
setUserId(userId);
setIsBind(ISBIND_BIND);
}};
userMemberDTO.setRentFreeDays(days);
userMemberDTO.setTotalNumber(days);
return userFeign.buyMember(userMemberDTO);
}
}
\ No newline at end of file
...@@ -53,7 +53,8 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -53,7 +53,8 @@ public class WebConfiguration implements WebMvcConfigurer {
private ArrayList<String> getIncludePathPatterns() { private ArrayList<String> getIncludePathPatterns() {
ArrayList<String> list = new ArrayList<>(); ArrayList<String> list = new ArrayList<>();
String[] urls = { String[] urls = {
"/activityPopularize/**" "/activityPopularize/**",
"/app/activityInfo/**"
}; };
Collections.addAll(list, urls); Collections.addAll(list, urls);
return list; return list;
......
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityInfo;
import tk.mybatis.mapper.common.Mapper;
/**
* 通用活动表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
public interface ActivityInfoMapper extends Mapper<ActivityInfo> {
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityInfoUser;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户活动表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-16 14:04:22
*/
public interface ActivityInfoUserMapper extends Mapper<ActivityInfoUser> {
}
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityInfoUserBiz;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.activity.entity.ActivityInfoUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
/**
* @author Administrator
*/
@Slf4j
@RestController
@RequestMapping("app/activityInfo")
@Api(tags = {"2680活动"})
public class AppActivityInfoController extends BaseController<ActivityInfoUserBiz> {
@PostMapping("join")
@ApiModelProperty("参加")
public ObjectRestResponse join(@RequestBody ActivityInfoUser activityInfoUser){
activityInfoUser.setUserId(getCurrentUserIdInt());
return ObjectRestResponse.succ(baseBiz.joinActivity(activityInfoUser));
}
@ApiOperation("新人有礼参加活动")
@RequestMapping(value = "/app/unauth/H5", method = RequestMethod.GET)
@IgnoreUserToken
public ObjectRestResponse H5(ActivityInfoUser activityInfoUser){
activityInfoUser.setUserId(getCurrentUserIdInt());
return ObjectRestResponse.succ(baseBiz.getInfo(activityInfoUser));
}
@PostMapping("app/unauth/updActivty")
@ApiModelProperty("支付后处理")
@IgnoreUserToken
public ObjectRestResponse updActivty(@RequestBody ActivityInfo activityInfo) {
baseBiz.updActivty(activityInfo);
return ObjectRestResponse.succ();
}
}
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@Slf4j
public class BaseController<Biz extends BaseBiz> extends CommonBaseController implements UserRestInterface {
@Autowired
protected Biz baseBiz;
@Autowired
protected UserAuthConfig userAuthConfig;
@Autowired
private UserAuthUtil userAuthUtil;
@Autowired
UserFeign userFeign;
@Override
public UserFeign getUserFeign() {
return userFeign;
}
public String getUserName()throws Exception{ return userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)).getUniqueName(); }
public Biz getBaseBiz() {
return baseBiz;
}
public String getUserId()throws Exception{ return userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)).getId(); }
}
package com.xxfc.platform.order.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
/**
*
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-19 17:00:35
*/
@Data
@Table(name = "order_activity_detail")
public class OrderActivityDetail implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
@Column(name = "order_id")
@ApiModelProperty(value = "基础订单id")
private Integer orderId;
@Column(name = "activity_id")
@ApiModelProperty(value = "活动id")
private Integer activityId;
@Column(name = "activity_info")
@ApiModelProperty(value = "活动详情")
private String activityInfo;
@Column(name = "rent_free_num")
@ApiModelProperty(value = "出租免费天数")
private Integer rentFreeNum;
@Column(name = "parent_comisson")
@ApiModelProperty(value = "上级拥金")
private BigDecimal parentComisson;
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
private Long updTime;
}
...@@ -3,8 +3,10 @@ package com.xxfc.platform.order.feign; ...@@ -3,8 +3,10 @@ package com.xxfc.platform.order.feign;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderInvoice; import com.xxfc.platform.order.entity.OrderInvoice;
import com.xxfc.platform.order.pojo.dto.OrderDTO; import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.order.ActivityInfoBO;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -34,4 +36,8 @@ public interface OrderFeign { ...@@ -34,4 +36,8 @@ public interface OrderFeign {
@PostMapping(value = "/count/basebase/findOrdersByorderIdV2") @PostMapping(value = "/count/basebase/findOrdersByorderIdV2")
ObjectRestResponse<List<OrderDTO>> findOrdersByorderIdV2(@RequestBody List<Integer> orderIds); ObjectRestResponse<List<OrderDTO>> findOrdersByorderIdV2(@RequestBody List<Integer> orderIds);
@PostMapping(value = "tainde/orderActivity/add")
ObjectRestResponse<BaseOrder> add(@RequestBody ActivityInfoBO bo);
} }
...@@ -25,6 +25,9 @@ public class OrderMQDTO extends BaseOrder implements OrderItemInter { ...@@ -25,6 +25,9 @@ public class OrderMQDTO extends BaseOrder implements OrderItemInter {
OrderMemberDetail orderMemberDetail; OrderMemberDetail orderMemberDetail;
OrderActivityDetail orderActivityDetail;
List<OrderItem> items; List<OrderItem> items;
public OrderItem getItemByTypeEnum(ItemTypeEnum itemTypeEnum) { public OrderItem getItemByTypeEnum(ItemTypeEnum itemTypeEnum) {
......
package com.xxfc.platform.order.pojo.order;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderActivityDetail;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.inter.OrderDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class ActivityInfoBO extends OrderActivityDetail implements OrderDetail {
private BaseOrder order;
private ActivityInfo activity;
AppUserDTO appUserDTO;
/**
* 促成人联系方式
*/
@ApiModelProperty(value = "促成人联系方式")
String facilitatePhone;
/**
* 下单来源,1--app;2--小程序
*/
private Integer orderOrigin;
/**
* 优惠券*
*/
private List<String> tickerNo;
/**
* 订单子项
*/
List<OrderItem> items;
}
...@@ -25,6 +25,7 @@ import com.github.wxiaoqi.security.common.util.Query; ...@@ -25,6 +25,7 @@ import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.activity.entity.ActivityProductSpecs; import com.xxfc.platform.activity.entity.ActivityProductSpecs;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
...@@ -152,6 +153,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -152,6 +153,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
@Autowired @Autowired
ShuntApplyBiz shuntApplyBiz; ShuntApplyBiz shuntApplyBiz;
@Autowired
OrderActivityInfoDetailBiz activityInfoDetailBiz;
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
...@@ -711,6 +715,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -711,6 +715,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
OrderTourDetail otd = new OrderTourDetail(); OrderTourDetail otd = new OrderTourDetail();
OrderMemberDetail omd = new OrderMemberDetail(); OrderMemberDetail omd = new OrderMemberDetail();
OrderActiveDetail activeDetail = new OrderActiveDetail(); OrderActiveDetail activeDetail = new OrderActiveDetail();
OrderActivityDetail activityDetail = null;
BaseOrder baseOrder = this.selectOne(new BaseOrder() {{ BaseOrder baseOrder = this.selectOne(new BaseOrder() {{
setNo(orderNo); setNo(orderNo);
}}); }});
...@@ -799,6 +804,16 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -799,6 +804,16 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
} }
} }
} }
activityDetail = activityInfoDetailBiz.getOne(baseOrder.getId());
if (activityDetail != null ){
String activityInfoStr = activityDetail.getActivityInfo();
ActivityInfo activityInfo = JSONUtil.toBean(activityInfoStr, ActivityInfo.class);
activityInfo.setOrderId(baseOrder.getId());
ObjectRestResponse restResponse = activityFeign.updActivty(activityInfo);
if (restResponse.getStatus() != 200 )
throw new BaseException(restResponse.getMessage(),restResponse.getStatus());
}
} }
try { try {
...@@ -819,21 +834,25 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -819,21 +834,25 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
}}); }});
} }
} finally { } finally {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData(); if (activityDetail != null ){
sendOrderActivityMq(activityDetail, baseOrder, ORDER_PAY);
}else {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
//处理App用户提醒短信的发送 //处理App用户提醒短信的发送
// orderMsgBiz.handelAppUserMsg(orvd, omd, baseOrder, appUserDTO); // orderMsgBiz.handelAppUserMsg(orvd, omd, baseOrder, appUserDTO);
orderMsgBiz.handelMsgPayNew(orvd, otd, omd, baseOrder, appUserDTO); orderMsgBiz.handelMsgPayNew(orvd, otd, omd, baseOrder, appUserDTO);
//处理后台用户提醒短信的发送 //处理后台用户提醒短信的发送
// orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_PAY); // orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_PAY);
sendOrderMq(orvd, otd, omd, baseOrder, ORDER_PAY); sendOrderMq(orvd, otd, omd, baseOrder, ORDER_PAY);
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) { if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
sendOrderMq(orvd, otd, omd, baseOrder, ORDER_FINISH); sendOrderMq(orvd, otd, omd, baseOrder, ORDER_FINISH);
sendOrderMq(orvd, otd, omd, baseOrder, ORDER_END_1); sendOrderMq(orvd, otd, omd, baseOrder, ORDER_END_1);
//订单完成时,payway为 支付宝,则转支付 //订单完成时,payway为 支付宝,则转支付
baseOrder.setPayWay(payWay); baseOrder.setPayWay(payWay);
orderAccountBiz.finishFreeze2PayAmount(baseOrder); orderAccountBiz.finishFreeze2PayAmount(baseOrder);
}
} }
} }
} else { } else {
...@@ -856,6 +875,18 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -856,6 +875,18 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
sendQueue(orderMQDTO, sign); sendQueue(orderMQDTO, sign);
} }
public void sendOrderActivityMq(OrderActivityDetail omd, BaseOrder baseOrder, Integer sign) {
//发送队列消息
OrderMQDTO orderMQDTO = BeanUtil.toBean(baseOrder, OrderMQDTO.class);
orderMQDTO.setOrderActivityDetail(omd);
//获取item
orderMQDTO.setItems(orderItemBiz.selectList(new OrderItem() {{
setOrderId(baseOrder.getId());
}}));
sendQueue(orderMQDTO, sign);
}
public ObjectRestResponse updateBaseOrder(BaseOrder baseOrder) { public ObjectRestResponse updateBaseOrder(BaseOrder baseOrder) {
if(baseOrder.getId() == null) { if(baseOrder.getId() == null) {
return ObjectRestResponse.paramIsEmpty(); return ObjectRestResponse.paramIsEmpty();
......
package com.xxfc.platform.order.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.order.entity.OrderActivityDetail;;
import com.xxfc.platform.order.mapper.OrderActivityDetailMapper;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
@Service
@Slf4j
@Api("活动订单详情")
public class OrderActivityInfoDetailBiz extends BaseBiz<OrderActivityDetailMapper, OrderActivityDetail> {
public OrderActivityDetail getOne(Integer orderId) {
Example example = new Example(OrderActivityDetail.class);
example.createCriteria().andEqualTo("orderId", orderId);
return mapper.selectOneByExample(example);
}
}
...@@ -62,6 +62,7 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -62,6 +62,7 @@ public class WebConfiguration implements WebMvcConfigurer {
"/orderVehicle/**", "/orderVehicle/**",
"/shuntApply/**", "/shuntApply/**",
"/admin/**", "/admin/**",
"/tainde/**",
}; };
Collections.addAll(list, urls); Collections.addAll(list, urls);
return list; return list;
......
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderActivityDetail;
import tk.mybatis.mapper.common.Mapper;
/**
*
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-19 17:00:35
*/
public interface OrderActivityDetailMapper extends Mapper<OrderActivityDetail> {
}
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderActivityInfoDetailBiz;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderActivityDetail;
import com.xxfc.platform.order.pojo.order.ActivityInfoBO;
import com.xxfc.platform.order.service.OrderActivityInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("tainde/orderActivity")
@Api(value = "活动订单", tags = {"活动订单"})
@IgnoreClientToken
public class OrderActivityInfoController extends BaseController<OrderActivityInfoDetailBiz, OrderActivityDetail> {
@Autowired
OrderActivityInfoService activityInfoService;
@Autowired
UserFeign userFeign;
@RequestMapping(value = "add", method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "确认订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody ActivityInfoBO bo) {
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
//查询优惠券
activityInfoService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder());
}
}
\ No newline at end of file
package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.xxfc.platform.activity.entity.ActivityInfo;
import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.activity.vo.ActivityInfoRuleVo;
import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.pojo.order.ActivityInfoBO;
import com.xxfc.platform.order.pojo.price.OrderPriceVO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service
@Log4j
public class OrderActivityInfoService extends AbstractOrderHandle<OrderActivityInfoDetailBiz, ActivityInfoBO> implements UserRestInterface {
@Autowired
VehicleFeign vehicleFeign;
@Autowired
ThirdFeign thirdFeign;
@Autowired
OrderAccountBiz orderAccountBiz;
@Autowired
BaseOrderBiz baseOrderBiz;
private static Integer IS_CHILD = 1;
private static Integer LEVEL_DEFAULT = 0;
private static Integer NUMBER_ZERO = 0;
private static Long autoCancelTime;
@Autowired
OrderCostDetailBiz orderCostDetailBiz;
@Autowired
OrderTemplateBiz orderTemplateBiz;
@Autowired
protected UserAuthConfig userAuthConfig;
@Autowired
ActivityFeign activityFeign;
@Autowired
public HttpServletRequest request;
private SimpleDateFormat simleFormatter = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYYMMddHHmmss");
@PostConstruct
public void init() {
this.channel = null;
this.orderTypeEnum = OrderTypeEnum.ACTIVITY;
}
@Override
public void initDetail(ActivityInfoBO bo) {
super.initDetail(bo);
initDictionary();
}
public void initDictionary() {
dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
this.autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ACT_MEMBER).getDetail());
}
@Override
public void handleDetail(ActivityInfoBO bo) {
//设置订单状态为3
bo.getOrder().setStatus(OrderStatusEnum.ORDER_UNPAY.getCode());
ActivityInfo activityInfo = bo.getActivity();
if (activityInfo != null ){
//设置订单图片
bo.getOrder().setPicture(activityInfo.getImg());
//设置订单名称
bo.getOrder().setName(activityInfo.getName());
bo.setActivityId(activityInfo.getId());
bo.setActivityInfo(JSON.toJSONString(activityInfo));
ActivityInfoRuleVo activityInfoRuleVo = activityInfo.getActivityInfoRuleVo();
if (activityInfoRuleVo != null ){
bo.setRentFreeNum(activityInfoRuleVo.getDays());
bo.setParentComisson(activityInfoRuleVo.getParentComisson());
}
}
super.handleDetail(bo);
//发送定时取消订单(30分钟)
rabbitProduct.sendDelayMessage(bo.getOrder(), autoCancelTime);
}
@Override
public void handleCalculate(ActivityInfoBO bo) {
OrderPriceVO tpv = calculatePrice(bo);
BeanUtil.copyProperties(tpv, bo.getOrder());
BeanUtil.copyProperties(tpv, bo);
}
@Override
public OrderPriceVO calculatePrice(ActivityInfoBO detail) {
BigDecimal orderAmount = BigDecimal.ZERO;
BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal realAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO;
ActivityInfo activityInfo = detail.getActivity();
BigDecimal activityAmount = BigDecimal.ZERO;
if (activityInfo != null ) {
ActivityInfoRuleVo activityInfoRuleVo = activityInfo.getActivityInfoRuleVo();
if (activityInfoRuleVo != null ){
activityAmount = activityInfoRuleVo.getPayPrice();
}
}
//商品价格
goodsAmount = goodsAmount.add(activityAmount);
//订单总价格
orderAmount = orderAmount.add(goodsAmount);
//真实价格
realAmount = realAmount.add(orderAmount).subtract(couponAmount);
//生成订单明细
OrderPriceVO opv = new OrderPriceVO();
opv.setOrderAmount(orderAmount);
opv.setGoodsAmount(goodsAmount);
opv.setRealAmount(realAmount);
opv.setCouponAmount(couponAmount);
return opv;
}
}
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