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 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 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 list = new ArrayList<>(); list.add(OrderEnum.待入库.getValue()); list.add(OrderEnum.入库中.getValue()); list.add(OrderEnum.完成.getValue()); criteria.andIn("orderStatus", list); //订单数必须大于1 List list1 = orderMapper.selectByExample(example); List 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 childItemTypeByType = sysEnvironmentalInfoService.findChildItemTypeByType(Constants.TIANXIN_CODE, Constants.HOUSE_HOLD_ITEM_TYPE); if(CollUtil.isNotEmpty(childItemTypeByType)){ List 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 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> redPaperList(@RequestBody XzxUserRedpaperInfoModel model) { Map map =redPaperService.redPaperList(model); return JsonResult.success(map); } @PostMapping(Constants.ADMIN_VIEW_PREFIX + "/xzxUserRedpaperInfo/cancelRedPaper.do") @ResponseBody @ApiOperation(value="红包记录-红包退还", notes="test: 仅0有正确返回") public JsonResult> 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 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); } } }