package com.xzx.gc.order.controller;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.xzx.gc.common.Result;
|
import com.xzx.gc.common.constant.CommonEnum;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.OrderEnum;
|
import com.xzx.gc.common.constant.UserEnum;
|
import com.xzx.gc.common.dto.CommonDto;
|
import com.xzx.gc.common.dto.log.OperationAppLog;
|
import com.xzx.gc.common.request.BaseController;
|
import com.xzx.gc.common.utils.DateUtils;
|
import com.xzx.gc.common.utils.MqUtil;
|
import com.xzx.gc.entity.*;
|
import com.xzx.gc.model.JsonResult;
|
import com.xzx.gc.model.admin.XzxUserRedpaperInfoModel;
|
import com.xzx.gc.model.order.RedPaperDto;
|
import com.xzx.gc.order.mapper.ConfigMapper;
|
import com.xzx.gc.order.mapper.OrderDetailMapper;
|
import com.xzx.gc.order.mapper.OrderMapper;
|
import com.xzx.gc.order.service.*;
|
import com.xzx.gc.util.SessionUtil;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
import tk.mybatis.mapper.entity.Example;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
@Api(tags = "红包管理")
|
@RequestMapping
|
@RestController
|
@Slf4j
|
@Validated
|
public class RedPaperController extends BaseController {
|
|
@Autowired
|
SessionUtil sessionUtil;
|
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private RedPaperService redPaperService;
|
|
@Autowired
|
private RedPaperRuleService redPaperRuleService;
|
|
@Autowired
|
private OrderMapper orderMapper;
|
|
@Autowired
|
private OrderService orderService;
|
|
@Autowired
|
private ConfigMapper configMapper;
|
|
@Autowired
|
private OrderDetailMapper orderDetailMapper;
|
|
@Autowired
|
private OrderItemService orderItemService;
|
|
@Autowired
|
private OtherUserService otherUserService;
|
|
@Autowired
|
private UserService userService;
|
|
@Autowired
|
private PartnerGaodeService partnerGaodeService;
|
|
@Autowired
|
private SysEnvironmentalInfoService sysEnvironmentalInfoService;
|
|
@Autowired
|
private MqUtil mqUtil;
|
|
|
|
@ApiOperation( value = "查询当前用户是否有可领红包")
|
@PostMapping("/redpaper/find")
|
public Result<RedPaperDto> find(HttpServletRequest request) {
|
String partnerId = partnerGaodeService.findPartnerIdByUserId(getUserId(request), 0);
|
RedPaperRule one = redPaperRuleService.getOne(UserEnum.红包规则.getValue(),partnerId);
|
String userId=getUserId(request);
|
if(one==null){
|
return Result.error(-3,"当前时间段无红包活动");
|
}else{
|
UserInfo byId = userService.findById(userId);
|
if(byId!=null){
|
String mobilePhone = byId.getMobilePhone();
|
List<OtherUserInfo> byMobile = otherUserService.findByMobile(mobilePhone);
|
if(CollUtil.isNotEmpty(byMobile)) {
|
return Result.error(-3,"平台用户不参与活动");
|
}
|
}
|
String conversionPerUnit = one.getConversionPerUnit();
|
String sharingProfitType = one.getSharingProfitType();
|
String text="";
|
if(StrUtil.isNotBlank(sharingProfitType)){
|
ConfigInfo configInfo=new ConfigInfo();
|
configInfo.setConfigTypeCode("REDPAPER_TEXT");
|
ConfigInfo configInfo1 = configMapper.selectOne(configInfo);
|
if(configInfo1!=null){
|
text=configInfo1.getConfigValueName();
|
}
|
}
|
|
RedPaper redPaper = redPaperService.getOne(one.getId());
|
if(redPaper==null){
|
return Result.error(-3,"红包已被领完");
|
}
|
//查询用户是否已领取过红包
|
boolean b = redPaperService.checkIsReceive(userId, one.getId());
|
if(b) {
|
return Result.error(-3,"您已领取过红包");
|
}
|
|
RedPaperDto redPaperDto=new RedPaperDto();
|
redPaperDto.setText(text);
|
redPaperDto.setRuleId(one.getId());
|
redPaperDto.setIssuanceRules(one.getIssuanceRules());
|
redPaperDto.setRandomAmountAverage(one.getRandomAmountAverage());
|
String applicableObject = one.getApplicableObject();
|
if(UserEnum.全部用户.getValue().equals(applicableObject)){
|
redPaperDto.setDesignatedUser(1);
|
return Result.success(redPaperDto);
|
}else if(UserEnum.指定用户.getValue().equals(applicableObject)){
|
String designatedUser = one.getDesignatedUser();
|
if(UserEnum.首次下单用户.getValue().equals(designatedUser)){
|
int i=orderService.findByCreateTime(userId,Constants.ONLINE_REBATE_TIME,0);
|
int i2=orderService.findByCreateTime(userId,Constants.ONLINE_REBATE_TIME,1);
|
if(i==1&&i2==0){
|
redPaperDto.setDesignatedUser(2);
|
return Result.success(redPaperDto);
|
}
|
}else if(UserEnum.非首次下单用户.getValue().equals(designatedUser)){
|
//满足红包的下单重量
|
String designatedWeight = one.getDesignatedWeight();
|
Example example = new Example(OrderInfo.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("createUserId", userId);
|
List<String> list = new ArrayList<>();
|
list.add(OrderEnum.待入库.getValue());
|
list.add(OrderEnum.入库中.getValue());
|
list.add(OrderEnum.完成.getValue());
|
criteria.andIn("orderStatus", list);
|
//订单数必须大于1
|
List<OrderInfo> list1 = orderMapper.selectByExample(example);
|
List<OrderDetailInfo> list2 = new ArrayList<>();
|
if(CollUtil.isNotEmpty(list1)&&list1.size()>1){
|
|
for (OrderInfo orderInfo : list1) {
|
OrderDetailInfo orderDetailInfo = orderDetailMapper.selectByPrimaryKey(orderInfo.getOrderId());
|
if (orderDetailInfo != null) {
|
Date startTime = DateUtil.parse(one.getStartTime(), DateUtils.DATE_FORMAT_YMD);
|
Date endTime = DateUtil.parse(one.getEndTime(), DateUtils.DATE_FORMAT_YMD);
|
//订单完成时间要在规则有效时间之内
|
boolean in = DateUtil.isIn(DateUtil.parse(orderDetailInfo.getCompleteTime(), DateUtils.DATE_FORMAT_YMD), startTime, endTime);
|
if (in) {
|
//家电折算成30kg/每个
|
int amountNum = 0;
|
List<String> childItemTypeByType = sysEnvironmentalInfoService.findChildItemTypeByType(Constants.TIANXIN_CODE, Constants.HOUSE_HOLD_ITEM_TYPE);
|
if(CollUtil.isNotEmpty(childItemTypeByType)){
|
List<OrderItemInfo> houseHold = orderItemService.findByOrderIdAndTypes(orderInfo.getOrderId(), childItemTypeByType);
|
if (CollUtil.isNotEmpty(houseHold)) {
|
for (OrderItemInfo orderItemInfo : houseHold) {
|
String amount = orderItemInfo.getAmount();
|
if (StrUtil.isNotBlank(amount)) {
|
amountNum = amountNum + Convert.toInt(amount, 0);
|
}
|
}
|
}
|
if (StrUtil.isBlank(conversionPerUnit)) {
|
conversionPerUnit = "0";
|
}
|
BigDecimal i = NumberUtil.mul(Convert.toBigDecimal(amountNum), Convert.toBigDecimal(conversionPerUnit));
|
orderDetailInfo.setHouseHoldWeight(Convert.toStr(i));
|
}
|
list2.add(orderDetailInfo);
|
}
|
}
|
}
|
if(CollUtil.isNotEmpty(list2)){
|
Double sum = list2.stream().mapToDouble(x -> Convert.toDouble(x.getWeight(), Convert.toDouble(Constants.WEIGHT_INIT))).sum();
|
Double sumHouse = list2.stream().mapToDouble(x -> Convert.toDouble(x.getHouseHoldWeight(), Convert.toDouble(Constants.WEIGHT_INIT))).sum();
|
sum=NumberUtil.add(sum,sumHouse);
|
if(NumberUtil.compare(sum,Convert.toDouble(designatedWeight))>=0){
|
redPaperDto.setDesignatedUser(3);
|
return Result.success(redPaperDto);
|
}
|
}
|
|
}
|
}
|
}
|
}
|
return Result.error(-3,"无红包可领");
|
}
|
|
|
@ApiOperation( value = "领取红包",notes = "id为查询接口返回的id")
|
@PostMapping("/redpaper")
|
public Result<RedPaper> get(HttpServletRequest request, @RequestBody CommonDto commonDto) {
|
RedPaper redPaper=redPaperService.get(commonDto.getId(),getUserId(request));
|
|
String mobilePhone = userService.findOtherByUserId(getUserId(request),0);
|
OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone)
|
.methodName(Constants.ORDER_MODUL_NAME).operateAction("领取红包-"+redPaper.getId()).build();
|
mqUtil.sendApp(build);
|
|
return Result.success(redPaper);
|
}
|
|
|
@PostMapping(Constants.ADMIN_VIEW_PREFIX + "/xzxUserRedpaperInfo/redPaperList.do")
|
@ResponseBody
|
@ApiOperation(value="红包记录-红包列表", notes="test: 仅0有正确返回")
|
@ApiImplicitParams({
|
@ApiImplicitParam(paramType="query", name = "page", value = "页码", required = true, dataType = "int"),
|
@ApiImplicitParam(paramType="query", name = "limit", value = "每页条数", required = true, dataType = "int"),
|
@ApiImplicitParam(paramType="query", name = "startTime", value = "开始时间", required = true, dataType = "String"),
|
@ApiImplicitParam(paramType="query", name = "endTime", value = "结束时间", required = true, dataType = "String"),
|
@ApiImplicitParam(paramType="query", name = "receiveFlag", value = "红包领取状态0:已领取 1未领取", required = true, dataType = "Integer")
|
})
|
public JsonResult<Map<String,Object>> redPaperList(@RequestBody XzxUserRedpaperInfoModel model)
|
{
|
Map<String,Object> map =redPaperService.redPaperList(model);
|
return JsonResult.success(map);
|
}
|
@PostMapping(Constants.ADMIN_VIEW_PREFIX + "/xzxUserRedpaperInfo/cancelRedPaper.do")
|
@ResponseBody
|
@ApiOperation(value="红包记录-红包退还", notes="test: 仅0有正确返回")
|
public JsonResult<Map<String,Object>> cancelRedPaper(HttpServletRequest request){
|
CoreUser user = sessionUtil.getCurrentUser();
|
CityPartner partner = cityPartnerService.queryById(user.getId());
|
String msg = redPaperService.cancelRedPaper(partner,"1");
|
if(null!=msg&&!"".equals(msg)){
|
return JsonResult.failMessage(msg);
|
}else{
|
|
Map<String,Object> map=new HashMap<>();
|
map.put("code",0);
|
map.put("msg","退还成功");
|
|
OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request))
|
.methodName(Constants.ORDER_MODUL_NAME).operateAction("红包退还-"+partner.getId()).build();
|
mqUtil.sendApp(build);
|
|
return JsonResult.success(map);
|
}
|
}
|
}
|