diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java index a9fa6ada6..5f038950b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java @@ -10,17 +10,21 @@ import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity.SortField; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.service.*; import com.iformall.utils.DateUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import jodd.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.*; @@ -37,6 +41,9 @@ public class WxOfflineActivityController extends BaseController { @Autowired private WxOfflineActivityService wxOfflineActivityService; + @Autowired + private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -52,7 +59,6 @@ public class WxOfflineActivityController extends BaseController { return new ResultData(page); } - @ApiOperation("新增修改接口") @PostMapping("saveOrUpdate") public ResultData saveOrUpdate(@RequestBody WxOfflineActivity wxOfflineActivity) { @@ -129,5 +135,16 @@ public class WxOfflineActivityController extends BaseController { return new ResultData(activity); } + @ApiOperation("活动奖品发放明细导出") + @GetMapping("/grantExport") + public void grantExport(@ModelAttribute WxOfflineActivity wxOfflineActivity, HttpServletRequest request, HttpServletResponse response) { + if(wxOfflineActivity.getId() == null){ + throw new MallinkException(Result.ERROR,"ID 为空"); + } + + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantInfo); + wxOfflineActivityGrantAwardService.activityGrantExport(request,response,wxOfflineActivity); + } } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java index 7db661c8a..606ebc417 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java @@ -63,8 +63,6 @@ public class WxOfflineActivityRecordController extends BaseController { return new ResultData(waitAudiCount); } - - @ApiOperation("导出") @GetMapping("/export") public void export(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, HttpServletRequest request, HttpServletResponse response) { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java index e51a70fd1..465909c78 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java @@ -86,6 +86,8 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ @TableField(value = "create_by") private Long createBy; @TableField(exist = false) + private List createByName; + @TableField(exist = false) private List createByIds; /** diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java index 4b02d1624..1699085fa 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java @@ -19,6 +19,8 @@ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper getRecordIdList(WxOfflineActivityGrantAward grantAwardQ); WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId); + + List findList(WxOfflineActivityGrantAward grantAwardQ); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java index b1abb9fd2..4e972f736 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java @@ -29,6 +29,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java index 00999c067..246bd646c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java @@ -1,5 +1,6 @@ package com.iformall.service; +import com.iformall.domain.po.WxOfflineActivity; import com.iformall.domain.po.WxOfflineActivityGrantAward; import com.baomidou.mybatisplus.extension.service.IService; import com.iformall.domain.po.WxOfflineActivityRecord; @@ -7,6 +8,7 @@ import com.iformall.domain.po.base.TenantEntity; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.net.MalformedURLException; import java.util.List; import java.util.Map; @@ -30,4 +32,6 @@ public interface WxOfflineActivityGrantAwardService { void recordExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord); WxOfflineActivityGrantAward grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + + void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java index 8db7cc74b..c82ab143a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java @@ -451,7 +451,7 @@ public class WxGameServiceImpl implements WxGameService { List couponIdsList = wxGame.getCouponIdsList(); int x = (int)(Math.random()*100+1); int y = 0; - if(couponIdsList != null || couponIdsList.size() > 0){ + if(couponIdsList != null && !couponIdsList.isEmpty()){ for (Object a:couponIdsList) { int weight = 0; if(a instanceof WxCouponChannelVo){ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index e6222f299..9b064c531 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -1,5 +1,7 @@ package com.iformall.service.impl; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; import com.alibaba.fastjson.JSON; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,6 +15,7 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; import com.iformall.utils.DateUtils; +import com.iformall.utils.DownFileUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -20,6 +23,8 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; +import java.net.MalformedURLException; +import java.net.URL; import java.text.NumberFormat; import java.util.*; import java.util.function.Function; @@ -60,6 +65,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity @Autowired WxOfflineActivityItemService wxOfflineActivityItemService; + @Autowired + WxOfflineActivityService wxOfflineActivityService; + @Autowired WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService; @@ -183,7 +191,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityItem.setIsMeet(true); //奖项限制数量 int limitCount = 0; - if(activityItem.getAwardsItemPrice() != null || activityItem.getAwardsItemPrice() > 0){ + if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice() > 0){ limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice(); } if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 @@ -345,7 +353,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } //奖项限制数量 int limitCount = 0; - if(activityItem.getAwardsItemPrice() != null || activityItem.getAwardsItemPrice() > 0){ + if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice() > 0){ limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice(); } if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 @@ -406,7 +414,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); } - } if(i == 0){ throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); @@ -519,6 +526,159 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity return grantAward; } + @Override + public void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity) { + WxOfflineActivity activity = wxOfflineActivityService.getInfoById(wxOfflineActivity.getId(), wxOfflineActivity.getTenantId()); + if(activity == null){ + throw new MallinkException(Result.ERROR, "未查询到活动"); + } + List headList = getActivityGrantExportHead(activity); + + List> activityGrantObjectList = new ArrayList<>(); + + WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); + grantAwardQ.updateTenantInfo(wxOfflineActivity); + grantAwardQ.setActivityId(wxOfflineActivity.getId()); + List grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); + if(grantAwardList != null){ + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(wxOfflineActivity); + Map merchantMap = wxMerchantService.getIdAndNamesMap(merchantQ); + + MallUserInfo userInfoQ = new MallUserInfo(); + userInfoQ.updateTenantInfo(wxOfflineActivity); + Map userMap = mallUserInfoService.getUserMap(userInfoQ); + // + WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); + grantItemQ.updateTenantInfo(wxOfflineActivity); + grantItemQ.setActivityId(wxOfflineActivity.getId()); + List grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ); + Map> grantItemMap = grantItem.stream().collect(Collectors.groupingBy(WxOfflineActivityGrantItem::getGrantId)); + for (WxOfflineActivityGrantAward grantAward : grantAwardList) { + List recordList = wxOfflineActivityRecordMapper.findGrantList(grantAward.getId(),grantAward.getTenantId()); + List grantItemList = grantItemMap.get(grantAward.getId()); + Map activityGrantObject = new HashMap<>(); + activityGrantObject.put("activityName",activity.getName()); + List merchantOrder = new ArrayList<>(); + for (WxOfflineActivityRecord record : recordList) { + merchantOrder.add(record.getOrderNo()+"["+merchantMap.get(record.getMerchantId())+"]"); + } + activityGrantObject.put("merchantOrder",merchantOrder.stream().collect(Collectors.joining(";"))); + activityGrantObject.put("orderMoneySum",grantAward.getOrderMoneySum()); + activityGrantObject.put("cusName",grantAward.getCusName()); + activityGrantObject.put("cusPhone",grantAward.getCusPhone()); + activityGrantObject.put("realName",grantAward.getRealName()); + activityGrantObject.put("realCard",grantAward.getRealCard()); + activityGrantObject.put("createByName",grantAward.getCreateBy()!=null?userMap.get(grantAward.getCreateBy()).getName():""); + activityGrantObject.put("createDate",DateUtils.date2String(grantAward.getCreateDate())); + Map> granActivityItemMap = grantItemList.stream().collect(Collectors.groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); + for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) { + List granActivityItemList = granActivityItemMap.get(activityItem.getId()); + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + Map granAwardItamMap = new HashMap<>(); + if(granActivityItemList != null && !granActivityItemList.isEmpty()){ + granAwardItamMap = granActivityItemList.stream().collect(Collectors.toMap(WxOfflineActivityGrantItem::getAwardItamId, Function.identity())); + } + for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) { + WxOfflineActivityGrantItem grantAwardsItem = granAwardItamMap.get(awardsItem.getId()); + if(grantAwardsItem != null){ + activityGrantObject.put(String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),grantAwardsItem.getAwardCount()); + } else { + activityGrantObject.put(String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),0); + } + } + }else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ + if(granActivityItemList != null && !granActivityItemList.isEmpty()){ + activityGrantObject.put(String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardName()); + } + }else if(EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())){ + if(granActivityItemList != null && !granActivityItemList.isEmpty()){ + activityGrantObject.put("r"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getCashBackRatio()); + activityGrantObject.put("p"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardPrice()); + }else{ + activityGrantObject.put("r"+String.valueOf(activityItem.getId()),0); + activityGrantObject.put("p"+String.valueOf(activityItem.getId()),0); + } + } + } + activityGrantObject.put("lotteryNum",grantAward.getLotteryNum()); + activityGrantObject.put("lotteryCount",grantAward.getLotteryCount()); + activityGrantObject.put("anniversaryLotteryNum",grantAward.getAnniversaryLotteryNum()); +// if(StringUtils.isNotBlank(grantAward.getSignImg())){ +// try{ +// activityGrantObject.put("signImg",DownFileUtil.url2byte(grantAward.getSignImg())); +// }catch (Exception e){} +// } + activityGrantObjectList.add(activityGrantObject); + } + } + + excelService.exportExcel(headList, activityGrantObjectList, null, "活动奖品发放明细", "活动奖品发放明细.xlsx",true, response); + } + + private List getActivityGrantExportHead(WxOfflineActivity activity){ + List headList = new ArrayList<>(); + ExcelExportEntity entity1 = new ExcelExportEntity("活动名称","activityName",20); + headList.add(entity1); + ExcelExportEntity entity2 = new ExcelExportEntity("订单[门店]","merchantOrder",20); + headList.add(entity2); + ExcelExportEntity entity3 = new ExcelExportEntity("订单总金额","orderMoneySum",20); + headList.add(entity3); + ExcelExportEntity entity4 = new ExcelExportEntity("客户姓名","cusName",20); + headList.add(entity4); + ExcelExportEntity entity5 = new ExcelExportEntity("客户电话","cusPhone",20); + headList.add(entity5); + ExcelExportEntity entity6 = new ExcelExportEntity("实际领奖人","realName",20); + headList.add(entity6); + ExcelExportEntity entity7 = new ExcelExportEntity("实际领奖人身份证号","realCard",20); + headList.add(entity7); + ExcelExportEntity entity8 = new ExcelExportEntity("发奖人","createByName",20); + headList.add(entity8); + ExcelExportEntity entity9 = new ExcelExportEntity("发奖时间","createDate",20); + headList.add(entity9); + + for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) { + //抽奖活动 + //【活动项名称】【奖项名称】数量 + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) { + ExcelExportEntity entity10 = new ExcelExportEntity("【"+activityItem.getName()+"】【"+awardsItem.getName()+"】数量", + String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),20); + headList.add(entity10); + } + } + //满额赠礼活动 + //【活动项名称】奖项 + else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) { + ExcelExportEntity entity11 = new ExcelExportEntity("【"+activityItem.getName()+"】奖项", + String.valueOf(activityItem.getId()),20); + headList.add(entity11); + } + //返现活动 + //【活动项名称】返现比例 + //【活动项名称】返现金额 + else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { + ExcelExportEntity entity12 = new ExcelExportEntity("【"+activityItem.getName()+"】返现比例", + "r"+String.valueOf(activityItem.getId()),20); + headList.add(entity12); + ExcelExportEntity entity13 = new ExcelExportEntity("【"+activityItem.getName()+"】返现金额", + "p"+String.valueOf(activityItem.getId()),20); + headList.add(entity13); + } + } + ExcelExportEntity entity14 = new ExcelExportEntity("抽奖券编码","lotteryNum",20); + headList.add(entity14); + ExcelExportEntity entity15 = new ExcelExportEntity("抽奖券数量","lotteryCount",20); + headList.add(entity15); + ExcelExportEntity entity16 = new ExcelExportEntity("周年庆抽奖编码","anniversaryLotteryNum",20); + headList.add(entity16); + ExcelExportEntity entity17 = new ExcelExportEntity("签名图片","signImg",20); +// entity17.setType(BaseEntityTypeConstants.IMAGE_TYPE); + headList.add(entity17); + + return headList; + } + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java index 1c8dbfdf6..9813fa9b7 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java @@ -146,6 +146,9 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ @Override public WxOfflineActivity getInfoById(Long id, String tenantId) { WxOfflineActivity wxOfflineActivity = wxOfflineActivityMapper.selectById(id, tenantId); + if (wxOfflineActivity == null) { + return null; + } List activityItemList = wxOfflineActivityItemService.getActivityItemList(wxOfflineActivity.getId(),tenantId); wxOfflineActivity.setActivityItemList(activityItemList); if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(wxOfflineActivity.getAllMerchant())){ diff --git a/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java b/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java index 362b72ed6..8aa397097 100644 --- a/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java @@ -82,4 +82,18 @@ public class DownFileUtil { return bos.toByteArray(); } + public static byte[] url2byte(String urlStr) throws IOException { + URL url = new URL(urlStr); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + //设置超时间为3秒 + conn.setConnectTimeout(3 * 1000); + //防止屏蔽程序抓取而返回403错误 + conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); + + //得到输入流 + InputStream inputStream = conn.getInputStream(); + //获取自己数组 + return readInputStream(inputStream); + } + } diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml index 57a4f31c4..10b6f60ba 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml @@ -33,6 +33,46 @@ lottery_count,anniversary_lottery_num + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `activity_id` = #{activityId} + + + + and `cus_name` like concat('%', #{cusName},'%') + + + + and `cus_phone` = #{cusPhone} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + select r.id,r.tenant_id,r.parent_tenant_id, + r.order_no,r.order_money,r.cus_name, + r.real_cus_name,r.cus_phone,r.cus_address, + r.cus_card,r.lottery_num,r.lottery_count, + r.anniversary_lottery_num,r.create_by,r.merchant_id,r.business_id, + r.create_date,r.update_date,r.audit_remark, + r.audit_status,r.audit_by,audit_time + from wx_offline_activity_record_grant rg + left join wx_offline_activity_record r on rg.record_id = r.id + where rg.grant_id = #{grantId} and rg.tenant_id=#{tenantId} + +