diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java new file mode 100644 index 000000000..5f038950b --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java @@ -0,0 +1,150 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.annotation.ApiVersion; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; +import com.iformall.controller.base.BaseController; +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.*; + +/** + * @author alascor + * + */ +@RestController +@RequestMapping("/offline") +@Api(description = "线下活动相关接口") +public class WxOfflineActivityController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOfflineActivityService wxOfflineActivityService; + + @Autowired + private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService; + + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData list(@ModelAttribute WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize) { + if (null == wxOfflineActivity) wxOfflineActivity = new WxOfflineActivity(); + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantInfo); + wxOfflineActivity.setSortColumns(SortField.CreateDate_DESC); + final PageInfo page = wxOfflineActivityService.listAsPage(wxOfflineActivity, pageNum, pageSize); + + return new ResultData(page); + } + + @ApiOperation("新增修改接口") + @PostMapping("saveOrUpdate") + public ResultData saveOrUpdate(@RequestBody WxOfflineActivity wxOfflineActivity) { + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantEntity); + if(wxOfflineActivity.getActivityItemList() == null || wxOfflineActivity.getActivityItemList().size() == 0){ + return new ResultData(Result.ERROR,"活动项不能为空"); + } + if(wxOfflineActivity.getAllMerchant() == null){ + return new ResultData(Result.ERROR,"活动商户不能为空"); + } + for (WxOfflineActivityItem activityItem:wxOfflineActivity.getActivityItemList()){ + if(activityItem.getActivityAwardsItemList() == null || activityItem.getActivityAwardsItemList().size() == 0){ + return new ResultData(Result.ERROR,"活动["+activityItem.getName()+"]奖项不能为空"); + } + for (WxOfflineActivityAwardsItem activityAwardsItem :activityItem.getActivityAwardsItemList()){ + if(EnumOfflineActivityAwardsMoneyRule.MALL_ONLY.getCode().equals(activityAwardsItem.getMoneyRule())){ + activityAwardsItem.setMallShareRate(new BigDecimal(100)); + activityAwardsItem.setMerchantShareRate(new BigDecimal(0)); + } + else if (EnumOfflineActivityAwardsMoneyRule.MERCHANT_ONLY.getCode().equals(activityAwardsItem.getMoneyRule())){ + activityAwardsItem.setMallShareRate(new BigDecimal(0)); + activityAwardsItem.setMerchantShareRate(new BigDecimal(100)); + } + else if (EnumOfflineActivityAwardsMoneyRule.SHARE.getCode().equals(activityAwardsItem.getMoneyRule())) { + if (activityAwardsItem.getMallShareRate().add(activityAwardsItem.getMerchantShareRate()).intValue() != 100) { + return new ResultData(Result.ERROR,"分担规则下,商户和商管的比例总和需要为100%"); + } + } + + } + } + if(EnumOfflineActivityMerchantType.ADD.getCode().equals(wxOfflineActivity.getAllMerchant())){ + if(wxOfflineActivity.getActivityMerchantList() == null || wxOfflineActivity.getActivityMerchantList().size() == 0){ + return new ResultData(Result.ERROR,"活动参加商户不能为空"); + } + } + else if (EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(wxOfflineActivity.getAllMerchant())) { + if(wxOfflineActivity.getActivityMerchantList() == null || wxOfflineActivity.getActivityMerchantList().size() == 0){ + return new ResultData(Result.ERROR,"活动不参加商户不能为空"); + } + } + wxOfflineActivityService.saveOrUpdate(wxOfflineActivity); + return new ResultData(wxOfflineActivity); + } + + @ApiOperation("上架") + @PostMapping("online") + public ResultData online(@RequestBody WxOfflineActivity wxOfflineActivity) { + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantEntity); + wxOfflineActivity.setStatus(EnumOfflineActivityStatus.ON_LINE.getCode()); + wxOfflineActivityService.updateStatus(wxOfflineActivity); + return new ResultData(); + } + + @ApiOperation("下架") + @PostMapping("offline") + public ResultData offline(@RequestBody WxOfflineActivity wxOfflineActivity) { + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantEntity); + wxOfflineActivity.setStatus(EnumOfflineActivityStatus.OFF_LINE.getCode()); + wxOfflineActivityService.updateStatus(wxOfflineActivity); + return new ResultData(); + } + + @ApiOperation("查询详情") + @GetMapping("getInfoById") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "主键id", dataType = "Long", paramType = "query", required = true)}) + public ResultData getInfoById(Long id) { + TenantEntity tenantInfo = getTenantInfo(); + WxOfflineActivity activity = wxOfflineActivityService.getInfoById(id, tenantInfo.getTenantId()); + 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/WxOfflineActivityGrantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java new file mode 100644 index 000000000..7d75661c8 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java @@ -0,0 +1,141 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.BaseEntity.SortField; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxOfflineActivityGrantAwardService; +import io.swagger.annotations.Api; +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.util.List; +import java.util.Map; + +/** + * @author alascor + * + */ +@RestController +@RequestMapping("/offlineGrant") +@Api(description = "线下活动登记相关接口") +public class WxOfflineActivityGrantController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService; + + @ApiOperation("参加活动用户订单统计") + @GetMapping("recordStatistics") + public ResultData statisticsCount(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) { + if(wxOfflineActivityRecord.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){ + return new ResultData(Result.ERROR,"请输入用户手机号"); + } + + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + Map statisticsMap = wxOfflineActivityGrantAwardService.getRecordStatistics(wxOfflineActivityRecord); + return new ResultData(statisticsMap); + } + + @ApiOperation("参加活动用户订单列表") + @GetMapping("recordList") + @ApiImplicitParams({}) + public ResultData recordList(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) { + if(wxOfflineActivityRecord.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){ + return new ResultData(Result.ERROR,"请输入用户手机号"); + } + + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); + List recordList = wxOfflineActivityGrantAwardService.getRecordList(wxOfflineActivityRecord); + + return new ResultData(recordList); + } + + @ApiOperation("参加活动用户订单导出") + @GetMapping("/recordExport") + public void recordExport(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, HttpServletRequest request, HttpServletResponse response) { + if(wxOfflineActivityRecord.getActivityId() == null){ + throw new MallinkException(Result.ERROR,"请选择活动"); + } + if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){ + throw new MallinkException(Result.ERROR,"请输入用户手机号"); + } + + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); + wxOfflineActivityGrantAwardService.recordExport(request,response,wxOfflineActivityRecord); + } + + @ApiOperation("活动发放页面处理") + @PostMapping("grantAwardPage") + public ResultData grantAwardPage(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + if(wxOfflineActivityGrantAward.getActivityId() == null){ + return new ResultData(Result.ERROR,"活动ID为空"); + } + if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ + return new ResultData(Result.ERROR,"请选择订单"); + } + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); + wxOfflineActivityGrantAwardService.handlerGrantAwardPage(wxOfflineActivityGrantAward); + return new ResultData(wxOfflineActivityGrantAward); + } + + + @ApiOperation("活动发放") + @PostMapping("grantAward") + public ResultData grantAward(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + if(wxOfflineActivityGrantAward.getActivityId() == null){ + return new ResultData(Result.ERROR,"活动ID为空"); + } + if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ + return new ResultData(Result.ERROR,"请选择订单"); + } +// if(StringUtil.isBlank(wxOfflineActivityGrantAward.getSignImg())){ +// return new ResultData(Result.ERROR,"签名为空"); +// } + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); + wxOfflineActivityGrantAward.setCreateBy(getUserId()); + wxOfflineActivityGrantAwardService.grantAward(wxOfflineActivityGrantAward); + return new ResultData(); + } + + @ApiOperation("活动发奖详情") + @GetMapping("grantAwardDetail") + @ApiImplicitParams({}) + public ResultData grantAwardDetail(@ModelAttribute WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + if(wxOfflineActivityGrantAward.getActivityId() == null){ + return new ResultData(Result.ERROR,"活动ID为空"); + } + if(wxOfflineActivityGrantAward.getRecordId() == null){ + return new ResultData(Result.ERROR,"订单ID为空"); + } + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityGrantAward.updateTenantInfo(tenantInfo); + WxOfflineActivityGrantAward grantAward = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward); + return new ResultData(grantAward); + } + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java new file mode 100644 index 000000000..606ebc417 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java @@ -0,0 +1,111 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.BaseEntity.SortField; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule; +import com.iformall.enums.EnumOfflineActivityMerchantType; +import com.iformall.enums.EnumOfflineActivityRecordStatus; +import com.iformall.enums.EnumOfflineActivityStatus; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxOfflineActivityRecordService; +import com.iformall.service.WxOfflineActivityService; +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; + +/** + * @author alascor + * + */ +@RestController +@RequestMapping("/offlineRecord") +@Api(description = "线下活动登记相关接口") +public class WxOfflineActivityRecordController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOfflineActivityRecordService wxOfflineActivityRecordService; + + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData list(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, Integer pageNum, Integer pageSize) { + if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord(); + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); + final PageInfo page = wxOfflineActivityRecordService.listAsPage(wxOfflineActivityRecord, pageNum, pageSize); + + return new ResultData(page); + } + + @ApiOperation("获取待审批数量") + @GetMapping("waitAudiCount") + public ResultData waitAudiCount() { + Integer waitAudiCount = wxOfflineActivityRecordService.getWaitAudiCount(getTenantInfo()); + return new ResultData(waitAudiCount); + } + + @ApiOperation("导出") + @GetMapping("/export") + public void export(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, HttpServletRequest request, HttpServletResponse response) { + if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord(); + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); + wxOfflineActivityRecordService.exportData(request,response,wxOfflineActivityRecord); + } + + @ApiOperation("审核通过") + @PostMapping("audiPass") + public ResultData audiPass(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) { + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantEntity); + wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode()); + wxOfflineActivityRecordService.auditRecord(wxOfflineActivityRecord,getUserId()); + return new ResultData(); + } + + @ApiOperation("审核驳回") + @PostMapping("audtFail") + public ResultData audtFail(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) { + + if(StringUtil.isBlank(wxOfflineActivityRecord.getAuditRemark())){ + return new ResultData(Result.ERROR,"驳回意见不能为空"); + } + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantEntity); + wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode()); + wxOfflineActivityRecordService.auditRecord(wxOfflineActivityRecord,getUserId()); + return new ResultData(); + } + + @ApiOperation("查询详情") + @GetMapping("getInfoById") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "主键id", dataType = "Long", paramType = "query", required = true)}) + public ResultData getInfoById(Long id) { + TenantEntity tenantInfo = getTenantInfo(); + WxOfflineActivityRecord record = wxOfflineActivityRecordService.getInfoById(id, tenantInfo.getTenantId()); + return new ResultData(record); + } + + +} diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java new file mode 100644 index 000000000..e299767f3 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java @@ -0,0 +1,153 @@ +package com.iformall.controller.market; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.BaseEntity.SortField; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivitySettlement; +import com.iformall.exception.MallinkException; +import com.iformall.service.WxOfflineActivityGrantAwardService; +import com.iformall.service.WxOfflineActivityGrantSettlementService; +import com.iformall.service.WxOfflineActivityRecordService; +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.util.List; +import java.util.Map; + +/** + * @author alascor + * + */ +@RestController +@RequestMapping("/offlineSettlement") +@Api(description = "线下活动结算相关接口") +public class WxOfflineActivitySettlementController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService; + + @Autowired + private WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService; + + @Autowired + private WxOfflineActivityRecordService wxOfflineActivityRecordService; + + @ApiOperation("中奖会员相关统计") + @GetMapping("cusStatistics") + public ResultData cusStatistics() { + Map statisticsMap = wxOfflineActivityGrantAwardService.cusStatistics(getTenantInfo()); + return new ResultData(statisticsMap); + } + + @ApiOperation("发奖结算相关统计") + @GetMapping("settlementStatistics") + public ResultData settlementStatistics() { + Map statisticsMap = wxOfflineActivityGrantSettlementService.settlementStatistics(getTenantInfo()); + return new ResultData(statisticsMap); + } + + @ApiOperation("订单相关统计") + @GetMapping("recordStatistics") + public ResultData recordStatistics() { + Map statisticsMap = wxOfflineActivityRecordService.orderStatistics(getTenantInfo()); + return new ResultData(statisticsMap); + } + + @ApiOperation("活动结算分页列表接口") + @GetMapping("activityList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData activityList(@ModelAttribute WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize) { + if (null == wxOfflineActivity) wxOfflineActivity = new WxOfflineActivity(); + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivity.updateTenantInfo(tenantInfo); + wxOfflineActivity.setSortColumns(SortField.CreateDate_DESC); + final PageInfo page = wxOfflineActivityGrantSettlementService.activityListAsPage(wxOfflineActivity, pageNum, pageSize); + + return new ResultData(page); + } + + @ApiOperation("单个活动结算列表") + @GetMapping("activitySettlement") + @ApiImplicitParams({}) + public ResultData activitySettlement(@ModelAttribute OfflineActivitySettlement grantSettlement) { + + if(grantSettlement.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + + TenantEntity tenantInfo = getTenantInfo(); + grantSettlement.updateTenantInfo(tenantInfo); + List recordList = wxOfflineActivityGrantSettlementService.getActivitySettlement(grantSettlement); + + return new ResultData(recordList); + } + + @ApiOperation("单个活动单个门店结算汇总") + @GetMapping("merchantSettlementStatistics") + @ApiImplicitParams({}) + public ResultData merchantSettlementStatistics(@ModelAttribute OfflineActivitySettlement grantSettlement) { + + if(grantSettlement.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + if(grantSettlement.getMerchantId() == null){ + return new ResultData(Result.ERROR,"请选择门店"); + } + + TenantEntity tenantInfo = getTenantInfo(); + grantSettlement.updateTenantInfo(tenantInfo); + Map recordList = wxOfflineActivityGrantSettlementService.merchantSettlementStatistics(grantSettlement); + + return new ResultData(recordList); + } + + @ApiOperation("单个活动单个门店结算列表") + @GetMapping("merchantSettlement") + @ApiImplicitParams({}) + public ResultData merchantSettlement(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement) { + + if(grantSettlement.getActivityId() == null){ + return new ResultData(Result.ERROR,"请选择活动"); + } + if(grantSettlement.getMerchantId() == null){ + return new ResultData(Result.ERROR,"请选择门店"); + } + + TenantEntity tenantInfo = getTenantInfo(); + grantSettlement.updateTenantInfo(tenantInfo); + List recordList = wxOfflineActivityGrantSettlementService.findList(grantSettlement); + + return new ResultData(recordList); + } + + @ApiOperation("单个活动单个门店结算记录导出") + @GetMapping("/merchantSettlementExport") + public void exportData(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement, HttpServletRequest request, HttpServletResponse response) { + if(grantSettlement.getActivityId() == null){ + throw new MallinkException(Result.ERROR,"请选择活动"); + } + if(grantSettlement.getMerchantId() == null){ + throw new MallinkException(Result.ERROR,"请选择门店"); + } + TenantEntity tenantInfo = getTenantInfo(); + grantSettlement.updateTenantInfo(tenantInfo); + wxOfflineActivityGrantSettlementService.exportData(request,response,grantSettlement); + } + +} diff --git a/mallinkAdmin/src/main/resources/db/migration/V202408000000004.sql b/mallinkAdmin/src/main/resources/db/migration/V202408000000004.sql new file mode 100644 index 000000000..c389302f9 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V202408000000004.sql @@ -0,0 +1,231 @@ +/* + Navicat Premium Dump SQL + + Source Server : 101.200.130.134 + Source Server Type : MySQL + Source Server Version : 50728 (5.7.28) + Source Host : 101.200.130.134:3306 + Source Schema : mallink + + Target Server Type : MySQL + Target Server Version : 50728 (5.7.28) + File Encoding : 65001 + + Date: 15/08/2024 15:28:13 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for wx_offline_activity +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity`; +CREATE TABLE `wx_offline_activity` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '活动名称', + `start_time` datetime NULL DEFAULT NULL COMMENT '开始时间', + `end_time` datetime NULL DEFAULT NULL COMMENT '结束时间', + `status` smallint(2) NOT NULL DEFAULT 0 COMMENT '状态(0:未上架 1:已上架)', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `all_merchant` smallint(1) NOT NULL DEFAULT 0 COMMENT '是否全部商户', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_awards_item +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_awards_item`; +CREATE TABLE `wx_offline_activity_awards_item` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_item_id` bigint(20) NOT NULL COMMENT '活动项id', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '奖项名称', + `grade` int(11) NULL DEFAULT NULL COMMENT '奖项等级', + `min_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '限制最小金额', + `max_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '限制最大金额', + `cash_back_ratio` decimal(10, 2) NULL DEFAULT NULL COMMENT '返现比例', + `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项价值', + `money_rule` smallint(1) NOT NULL COMMENT '分担规则(0-商管 1-商户 2-分担)', + `mall_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商管分担比例', + `merchant_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商户分担比例', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动奖项' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_grant_award +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_grant_award`; +CREATE TABLE `wx_offline_activity_grant_award` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_id` bigint(20) NOT NULL COMMENT '活动ID', + `order_money_sum` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单总金额', + `order_count` int(11) NULL DEFAULT NULL COMMENT '订单数量', + `cus_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户姓名', + `cus_phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户电话', + `real_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实际领奖人', + `real_card` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实际领奖人身份证号', + `sign_img` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '签名图片', + `create_by` bigint(20) NULL DEFAULT NULL, + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `lottery_num` json NULL COMMENT '抽奖券编码', + `lottery_count` int(11) NULL DEFAULT NULL COMMENT '抽奖券数量', + `anniversary_lottery_num` json NULL COMMENT '周年庆抽奖编码', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动发放奖励' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_grant_item +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_grant_item`; +CREATE TABLE `wx_offline_activity_grant_item` ( + `id` bigint(20) NOT NULL, + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `grant_id` bigint(20) NOT NULL COMMENT '发放id', + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `activity_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '活动名称', + `activity_item_id` bigint(20) NOT NULL COMMENT '活动项id', + `activity_item_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '活动项名称', + `activity_item_type` smallint(1) NULL DEFAULT NULL COMMENT '活动项类型', + `award_itam_id` bigint(20) NOT NULL COMMENT '奖项id', + `award_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '奖项名称', + `award_grade` int(11) NULL DEFAULT NULL COMMENT '奖项等级', + `award_min_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项限制最小金额', + `award_max_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项限制最大金额', + `awards_item_rule` smallint(1) NULL DEFAULT NULL COMMENT '奖项计算规则', + `cash_back_ratio` decimal(10, 2) NULL DEFAULT NULL COMMENT '返现比例', + `award_price` decimal(10, 2) NOT NULL COMMENT '奖项价值', + `award_count` int(11) NULL DEFAULT NULL COMMENT '奖项数量', + `money_rule` smallint(1) NOT NULL COMMENT '分担规则(0-商管 1-商户 2-分担)', + `mall_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商管分担比例', + `merchant_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商户分担比例', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `activity_id`(`grant_id`, `activity_item_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动发放奖励' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_grant_settlement +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_grant_settlement`; +CREATE TABLE `wx_offline_activity_grant_settlement` ( + `id` bigint(20) NOT NULL, + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `record_id` bigint(20) NOT NULL COMMENT '参与记录id', + `order_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '订单编号', + `order_money` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单金额', + `merchant_id` bigint(20) NOT NULL COMMENT '商户id', + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `activity_item_id` bigint(20) NOT NULL COMMENT '活动项id', + `award_itam_id` bigint(20) NOT NULL COMMENT '奖项id', + `grant_id` bigint(20) NOT NULL COMMENT '发放id', + `grant_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '发放总价值', + `mall_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商管承担比率', + `merchant_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商户承担比率', + `order_ratio` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单占比', + `real_grant_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '实际发放总价值', + `real_mall_share_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '实际商管承担总金额', + `real_merchant_share_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '实际商户承担总金额', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动发放奖励结算' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_item +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_item`; +CREATE TABLE `wx_offline_activity_item` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `type` smallint(1) NOT NULL COMMENT '活动项类型', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '活动项名称', + `limit_money` decimal(10, 2) NOT NULL COMMENT '参与金额', + `awards_item_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项单价', + `awards_item_limit` int(11) NULL DEFAULT NULL COMMENT '奖项限制', + `awards_item_count` int(11) NULL DEFAULT NULL COMMENT '奖项总数量', + `awards_item_rule` smallint(1) NULL DEFAULT NULL COMMENT '奖项计算规则', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动项目' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_merchant +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_merchant`; +CREATE TABLE `wx_offline_activity_merchant` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_id` bigint(20) NOT NULL COMMENT '活动编号', + `merchant_id` bigint(20) NOT NULL COMMENT '商户编号', + `whether_in` smallint(1) NOT NULL COMMENT '是否参加', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动商户' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_record +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_record`; +CREATE TABLE `wx_offline_activity_record` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `order_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '订单号', + `order_money` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单金额', + `cus_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户姓名', + `real_cus_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `cus_phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户电话', + `cus_address` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '客户地址', + `cus_card` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '身份证号', + `lottery_num` json NULL COMMENT '抽奖券编码', + `lottery_count` int(11) NULL DEFAULT NULL COMMENT '抽奖券数量', + `anniversary_lottery_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '周年庆抽奖编码', + `create_by` bigint(11) NULL DEFAULT NULL, + `merchant_id` bigint(20) NOT NULL COMMENT '商户编号', + `business_id` int(11) NULL DEFAULT NULL COMMENT '业态', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + `audit_remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批意见', + `audit_status` int(1) NOT NULL DEFAULT 0 COMMENT '审批状态', + `audit_by` bigint(20) NULL DEFAULT NULL COMMENT '审核人', + `audit_time` datetime NULL DEFAULT NULL COMMENT '审核时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动参与登记' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Table structure for wx_offline_activity_record_grant +-- ---------------------------- +DROP TABLE IF EXISTS `wx_offline_activity_record_grant`; +CREATE TABLE `wx_offline_activity_record_grant` ( + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `record_id` bigint(20) NOT NULL COMMENT '参与记录id', + `grant_id` bigint(20) NOT NULL COMMENT '发放id', + UNIQUE INDEX `activity_id`(`activity_id`, `record_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动参与登记与发放关联表' ROW_FORMAT = DYNAMIC; + +SET FOREIGN_KEY_CHECKS = 1; + + + +ALTER TABLE `mallink`.`wx_offline_activity_grant_item` +DROP INDEX `activity_id`; \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java new file mode 100644 index 000000000..9bdacbd63 --- /dev/null +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java @@ -0,0 +1,90 @@ +package com.iformall.controller; + +import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxOfflineActivityRecord; +import com.iformall.domain.po.base.BaseEntity.SortField; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.service.*; +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 java.util.Map; + +/** + * @author alascor + * + */ +@RestController +@RequestMapping("/api/offlineRecord") +@Api(description = "线下活动登记相关接口") +public class WxOfflineActivityRecordController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOfflineActivityRecordService wxOfflineActivityRecordService; + + + @ApiOperation("分页列表接口") + @GetMapping("list") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData list(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, Integer pageNum, Integer pageSize) { + if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord(); + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); + wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId()); + final PageInfo page = wxOfflineActivityRecordService.listAsPage(wxOfflineActivityRecord, pageNum, pageSize); + return new ResultData(page); + } + + @ApiOperation("新增修改接口") + @PostMapping("saveOrUpdate") + public ResultData saveOrUpdate(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) { + if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){ + return new ResultData(Result.ERROR,"客户手机号不能为空"); + } + if (null == wxOfflineActivityRecord.getOrderMoney() ) { + return new ResultData(Result.ERROR,"订单金额不能为空"); + } + TenantEntity tenantEntity = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantEntity); + wxOfflineActivityRecord.setCreateBy(getMerchantBUserId()); + wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId()); + wxOfflineActivityRecordService.saveOrUpdate(wxOfflineActivityRecord); + return new ResultData(); + } + + @ApiOperation("查询当前信息详情") + @GetMapping("getInfoById") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "主键id", dataType = "Long", paramType = "query", required = true)}) + public ResultData getInfoById(Long id) { + TenantEntity tenantInfo = getTenantInfo(); + WxOfflineActivityRecord activity = wxOfflineActivityRecordService.getById(id, tenantInfo.getTenantId()); + return new ResultData(activity); + } + + @ApiOperation("查询当前信息统计") + @GetMapping("statistics") + public ResultData statisticsCount(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) { + TenantEntity tenantInfo = getTenantInfo(); + wxOfflineActivityRecord.updateTenantInfo(tenantInfo); + wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId()); + Map statisticsMap = wxOfflineActivityRecordService.getStatistics(wxOfflineActivityRecord); + return new ResultData(statisticsMap); + } + + + +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java new file mode 100644 index 000000000..0f962cf43 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java @@ -0,0 +1,139 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动 + * @TableName wx_offline_activity + */ +@TableName(value ="wx_offline_activity") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivity extends TenantEntity { + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 活动名称 + */ + @TableField(value = "name") + private String name; + + /** + * 开始时间 + */ + @TableField(value = "start_time") + private Date startTime; + + /** + * 结束时间 + */ + @TableField(value = "end_time") + private Date endTime; + + /** + * 状态(0:未上架 1:已上架) + */ + @TableField(value = "status") + private Integer status; + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + + /** + * 是否全部商户 + */ + @TableField(value = "all_merchant") + private Integer allMerchant; + + @TableField(exist = false) + private List activityItemList; + + @TableField(exist = false) + private List activityMerchantList; + + @TableField(exist = false) + private Date begin; + @TableField(exist = false) + private Date end; + + /** + * 是否过期 + */ + @TableField(exist = false) + private Integer validStatus; + + /** + * 参与订单数量 + */ + @TableField(exist = false) + private Integer recordCount; + /** + * 参与待审核订单数量 + */ + @TableField(exist = false) + private Integer waitRecordCount; + /** + * 参与已审核订单数量 + */ + @TableField(exist = false) + private Integer successRecordCount; + + /** + * 参与商户数量 + */ + @TableField(exist = false) + private Integer mershantCount; + + /** + * 发放商户数量 + */ + @TableField(exist = false) + private Integer grantMershantCount; + + /** + * 发放奖项数量 + */ + @TableField(exist = false) + private Integer grantItemCount; + + /** + * 发放订单数 + */ + @TableField(exist = false) + private Integer grantRecordCount; + /** + * 发放总额 + */ + @TableField(exist = false) + private BigDecimal grantPrice; + /** + * 商户结算总额 + */ + @TableField(exist = false) + private BigDecimal merchantSettlmentPrice; +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java new file mode 100644 index 000000000..f2511929b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java @@ -0,0 +1,101 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.math.BigDecimal; +import java.util.Date; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动奖项 + * @TableName wx_offline_activity_awards_item + */ +@TableName(value ="wx_offline_activity_awards_item") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityAwardsItem extends TenantEntity { + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 活动项id + */ + @TableField(value = "activity_item_id") + private Long activityItemId; + + /** + * 奖项名称 + */ + @TableField(value = "name") + private String name; + + /** + * 奖项等级 + */ + @TableField(value = "grade") + private Integer grade; + + /** + * 限制最小金额 + */ + @TableField(value = "min_amount") + private BigDecimal minAmount; + + /** + * 限制最大金额 + */ + @TableField(value = "max_amount") + private BigDecimal maxAmount; + + /** + * 返现比例(与奖项价值2选1) + */ + @TableField(value = "cash_back_ratio") + private BigDecimal cashBackRatio; + + /** + * 奖项价值 + */ + @TableField(value = "price") + private BigDecimal price; + + /** + * 分担规则(0-商管 1-商户 2-分担) + */ + @TableField(value = "money_rule") + private Integer moneyRule; + + /** + * 商管分担比例 + */ + @TableField(value = "mall_share_rate") + private BigDecimal mallShareRate; + + /** + * 商户分担比例 + */ + @TableField(value = "merchant_share_rate") + private BigDecimal merchantShareRate; + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java new file mode 100644 index 000000000..ef02730a5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java @@ -0,0 +1,164 @@ +package com.iformall.domain.po; + +import com.alibaba.fastjson.JSON; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import java.util.List; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动发放奖励 + * @TableName wx_offline_activity_grant_award + */ +@TableName(value ="wx_offline_activity_grant_award") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityGrantAward extends TenantEntity{ + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 活动ID + */ + @TableField(value = "activity_id") + private Long activityId; + + @TableField(exist = false) + private String activityName; + + /** + * 订单总金额 + */ + @TableField(value = "order_money_sum") + private BigDecimal orderMoneySum; + + /** + * 订单数量 + */ + @TableField(value = "order_count") + private Integer orderCount; + + /** + * 客户姓名 + */ + @TableField(value = "cus_name") + private String cusName; + + /** + * 客户电话 + */ + @TableField(value = "cus_phone") + private String cusPhone; + + /** + * 实际领奖人 + */ + @TableField(value = "real_name") + private String realName; + + /** + * 实际领奖人身份证号 + */ + @TableField(value = "real_card") + private String realCard; + + /** + * 签名图片 + */ + @TableField(value = "sign_img") + private String signImg; + + /** + * + */ + @TableField(value = "create_by") + private Long createBy; + @TableField(exist = false) + private List createByName; + @TableField(exist = false) + private List createByIds; + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + @TableField(exist = false) + private Date createDateBegin; + @TableField(exist = false) + private Date createDateEnd; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + + /** + * 抽奖券编码 + */ + @TableField(value = "lottery_num") + private String lotteryNum; + @TableField(exist = false) + private List lotteryNumList; + public List getLotteryNumList() { + if(StringUtils.isNotBlank(lotteryNum)){ + try { + List stringList = JSON.parseArray(lotteryNum, String.class); + stringList.removeIf(String::isEmpty); + lotteryNumList = stringList.isEmpty() ? null : stringList; + }catch(Exception e){} + } + return lotteryNumList; + } + + /** + * 抽奖券数量 + */ + @TableField(value = "lottery_count") + private Integer lotteryCount; + + /** + * 周年庆抽奖编码 + */ + @TableField(value = "anniversary_lottery_num") + private String anniversaryLotteryNum; + @TableField(exist = false) + private List anniversaryLotteryNumList; + public List getAnniversaryLotteryNumList() { + if(StringUtils.isNotBlank(anniversaryLotteryNum)){ + try { + List stringList = JSON.parseArray(anniversaryLotteryNum, String.class); + stringList.removeIf(String::isEmpty); + anniversaryLotteryNumList = stringList.isEmpty() ? null : stringList; + }catch(Exception e){} + } + return anniversaryLotteryNumList; + } + + @TableField(exist = false) + private Long recordId; + @TableField(exist = false) + private List recordIds; + @TableField(exist = false) + private List recordList; + + @TableField(exist = false) + private List activityItemList; +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java new file mode 100644 index 000000000..3b5f84b3d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java @@ -0,0 +1,151 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动发放奖励 + * @TableName wx_offline_activity_grant_item + */ +@TableName(value ="wx_offline_activity_grant_item") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityGrantItem extends TenantEntity { + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 发放id + */ + @TableField(value = "grant_id") + private Long grantId; + + /** + * 活动id + */ + @TableField(value = "activity_id") + private Long activityId; + + /** + * 活动名称 + */ + @TableField(value = "activity_name") + private String activityName; + + /** + * 活动项id + */ + @TableField(value = "activity_item_id") + private Long activityItemId; + + /** + * 活动项名称 + */ + @TableField(value = "activity_item_name") + private String activityItemName; + + /** + * 活动项类型 + */ + @TableField(value = "activity_item_type") + private Integer activityItemType; + + /** + * 奖项id + */ + @TableField(value = "award_itam_id") + private Long awardItamId; + + /** + * 奖项名称 + */ + @TableField(value = "award_name") + private String awardName; + + /** + * 奖项等级 + */ + @TableField(value = "award_grade") + private Integer awardGrade; + + /** + * 奖项限制最小金额 + */ + @TableField(value = "award_min_amount") + private BigDecimal awardMinAmount; + + /** + * 奖项限制最大金额 + */ + @TableField(value = "award_max_amount") + private BigDecimal awardMaxAmount; + + /** + * 奖项计算规则 + */ + @TableField(value = "awards_item_rule") + private Integer awardsItemRule; + + /** + * 返现比例 + */ + @TableField(value = "cash_back_ratio") + private BigDecimal cashBackRatio; + + /** + * 奖项价值 + */ + @TableField(value = "award_price") + private BigDecimal awardPrice; + + /** + * 奖项数量 + */ + @TableField(value = "award_count") + private Integer awardCount; + + /** + * 分担规则(0-商管 1-商户 2-分担) + */ + @TableField(value = "money_rule") + private Integer moneyRule; + + /** + * 商管分担比例 + */ + @TableField(value = "mall_share_rate") + private BigDecimal mallShareRate; + + /** + * 商户分担比例 + */ + @TableField(value = "merchant_share_rate") + private BigDecimal merchantShareRate; + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java new file mode 100644 index 000000000..71430bf2a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java @@ -0,0 +1,151 @@ +package com.iformall.domain.po; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动发放奖励结算 + * @TableName wx_offline_activity_grant_settlement + */ +@TableName(value ="wx_offline_activity_grant_settlement") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityGrantSettlement extends TenantEntity { + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 参与记录id + */ + @TableField(value = "record_id") + private Long recordId; + + /** + * 订单编号 + */ + @Excel(name = "订单号", width = 20, orderNum = "1") + @TableField(value = "order_no") + private String orderNo; + + /** + * 订单金额 + */ + @Excel(name = "订单金额(元)", width = 20, orderNum = "3") + @TableField(value = "order_money") + private BigDecimal orderMoney; + + /** + * 商户id + */ + @TableField(value = "merchant_id") + private Long merchantId; + @TableField(exist = false) + private String merchantName; + @TableField(exist = false) + private List merchantIdList; + + /** + * 活动id + */ + @TableField(value = "activity_id") + private Long activityId; + + /** + * 活动项id + */ + @TableField(value = "activity_item_id") + private Long activityItemId; + + /** + * 奖项id + */ + @TableField(value = "award_itam_id") + private Long awardItamId; + + /** + * 发放id + */ + @TableField(value = "grant_id") + private Long grantId; + + /** + * 发放总价值 + */ + @TableField(value = "grant_price") + private BigDecimal grantPrice; + + /** + * 商管承担z占比 + */ + @TableField(value = "mall_share_rate") + private BigDecimal mallShareRate; + + /** + * 商户承担占比 + */ + @TableField(value = "merchant_share_rate") + private BigDecimal merchantShareRate; + + /** + * 订单占比 + */ + @TableField(value = "order_ratio") + private BigDecimal orderRatio; + + /** + * 实际发放总价值 + */ + @Excel(name = "发放价值(元)", width = 20, orderNum = "4") + @TableField(value = "real_grant_price") + private BigDecimal realGrantPrice; + + /** + * 实际商管承担总金额 + */ + @Excel(name = "商管承担金额(元)", width = 20, orderNum = "5") + @TableField(value = "real_mall_share_price") + private BigDecimal realMallSharePrice; + + /** + * 实际商户承担总金额 + */ + @Excel(name = "商户承担金额(元)", width = 20, orderNum = "6") + @TableField(value = "real_merchant_share_price") + private BigDecimal realMerchantSharePrice; + + /** + * 创建时间 + */ + @Excel(name = "发放时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "2") + @TableField(value = "create_date") + private Date createDate; + + @TableField(exist = false) + private Date createDateBegin; + @TableField(exist = false) + private Date createDateEnd; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java new file mode 100644 index 000000000..16c1978d2 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java @@ -0,0 +1,113 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动项目 + * @TableName wx_offline_activity_item + */ +@TableName(value ="wx_offline_activity_item") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityItem extends TenantEntity { + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 活动id + */ + @TableField(value = "activity_id") + private Long activityId; + + /** + * 活动项类型 + */ + @TableField(value = "type") + private Integer type; + + /** + * 活动项名称 + */ + @TableField(value = "name") + private String name; + + /** + * 参与金额 + */ + @TableField(value = "limit_money") + private BigDecimal limitMoney; + + /** + * 奖项价值(用来计算奖券数量) + */ + @TableField(value = "awards_item_price") + private BigDecimal awardsItemPrice; + + /** + * 奖项数量限制(为0时无限制) + */ + @TableField(value = "awards_item_limit") + private Integer awardsItemLimit; + + /** + * 奖项总数量 + */ + @TableField(value = "awards_item_count") + private Integer awardsItemCount; + + /** + * 奖项计算规则(0代表无规则) + */ + @TableField(value = "awards_item_rule") + private Integer awardsItemRule; + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + + /** + * 奖项集合 + */ + @TableField(exist = false) + private List activityAwardsItemList; + /** + * 是否满足活动条件 + */ + @TableField(exist = false) + private Boolean isMeet; + /** + * 实际获得奖项限制(为0时无限制) + */ + @TableField(exist = false) + private Integer realAwardsItemLimit; + + /** + * 发放奖项 + */ + @TableField(exist = false) + private List activityGrantItemList; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityMerchant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityMerchant.java new file mode 100644 index 000000000..5ecf592ae --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityMerchant.java @@ -0,0 +1,62 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动商户 + * @TableName wx_offline_activity_merchant + */ +@TableName(value ="wx_offline_activity_merchant") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityMerchant extends TenantEntity { + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 活动编号 + */ + @TableField(value = "activity_id") + private Long activityId; + + /** + * 商户编号 + */ + @TableField(value = "merchant_id") + private Long merchantId; + + /** + * + */ + @TableField(value = "whether_in") + private Integer whetherIn; + + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + + @TableField(exist = false) + private WxMerchant merchant; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java new file mode 100644 index 000000000..16e97a2bc --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java @@ -0,0 +1,204 @@ +package com.iformall.domain.po; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.alibaba.fastjson.JSON; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动参与登记 + * @TableName wx_offline_activity_record + */ +@TableName(value ="wx_offline_activity_record") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityRecord extends TenantEntity { + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 订单号 + */ + @Excel(name = "订单号", width = 20, orderNum = "1") + @TableField(value = "order_no") + private String orderNo; + + /** + * 订单金额 + */ + @Excel(name = "订单金额(元)", width = 20, orderNum = "7") + @TableField(value = "order_money") + private BigDecimal orderMoney; + + /** + * 客户姓名 + */ + @Excel(name = "客户姓名", width = 20, orderNum = "3") + @TableField(value = "cus_name") + private String cusName; + + /** + * + */ + @TableField(value = "real_cus_name") + private String realCusName; + + /** + * 客户电话 + */ + @Excel(name = "客户电话", width = 20, orderNum = "4") + @TableField(value = "cus_phone") + private String cusPhone; + + /** + * 客户地址 + */ + @Excel(name = "客户地址", width = 20, orderNum = "5") + @TableField(value = "cus_address") + private String cusAddress; + + /** + * 身份证号 + */ + @TableField(value = "cus_card") + private String cusCard; + + /** + * 抽奖券编码 + */ + @TableField(value = "lottery_num") + private String lotteryNum; + @TableField(exist = false) + private List lotteryNumList; + public List getLotteryNumList() { + if(StringUtils.isNotBlank(lotteryNum)){ + try { + List stringList = JSON.parseArray(lotteryNum, String.class); + stringList.removeIf(String::isEmpty); + lotteryNumList = stringList.isEmpty() ? null : stringList; + }catch(Exception e){} + } + return lotteryNumList; + } + + /** + * 抽奖券数量 + */ + @TableField(value = "lottery_count") + private Integer lotteryCount; + + /** + * 周年庆抽奖编码 + */ + @TableField(value = "anniversary_lottery_num") + private String anniversaryLotteryNum; + + /** + * + */ + @TableField(value = "create_by") + private Long createBy; + + /** + * 商户编号 + */ + @TableField(value = "merchant_id") + private Long merchantId; + + @Excel(name = "商户名称", width = 20, orderNum = "6") + @TableField(exist = false) + private String merchantName; + + @TableField(exist = false) + private List merchantIdList; + @TableField(exist = false) + private List notMerchantIdList; + + @TableField(value = "business_id") + private Integer businessId; + + /** + * 创建时间 + */ + @Excel(name = "提交时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "2") + @TableField(value = "create_date") + private Date createDate; + + @TableField(exist = false) + private Date createDateBegin; + @TableField(exist = false) + private Date createDateEnd; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + + /** + * 审批意见 + */ + @Excel(name = "审核意见", width = 20, orderNum = "9") + @TableField(value = "audit_remark") + private String auditRemark; + + /** + * 审批状态 + */ + @Excel(name = "审核状态", width = 20, orderNum = "8", replace = {"审核中_0", "已审批_1", "已驳回_2", "已发奖_10"}) + @TableField(value = "audit_status") + private Integer auditStatus; + + /** + * 审核人 + */ + @TableField(value = "audit_by") + private Long auditBy; + + @Excel(name = "审核人", width = 20, orderNum = "11") + @TableField(exist = false) + private String auditByName; + + /** + * 审核时间 + */ + @Excel(name = "审核意见", width = 20, format = "yyyy-MM-dd HH:mm:ss", orderNum = "10") + @TableField(value = "audit_time") + private Date auditTime; + + @TableField(exist = false) + private Date auditTimeBegin; + @TableField(exist = false) + private Date auditTimeEnd; + + @TableField(exist = false) + private String sendByName; + @TableField(exist = false) + private Date sendTimeBegin; + @TableField(exist = false) + private Date sendTimeEnd; + + @TableField(exist = false) + private Long activityId; + + @TableField(exist = false) + private BigDecimal orderRatio; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecordGrant.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecordGrant.java new file mode 100644 index 000000000..4142ef748 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecordGrant.java @@ -0,0 +1,41 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; + +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 线下活动参与登记与发放关联表 + * @TableName wx_offline_activity_record_grant + */ +@TableName(value ="wx_offline_activity_record_grant") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityRecordGrant extends TenantEntity { + + /** + * 活动id + */ + @TableField(value = "activity_id") + private Long activityId; + + /** + * 参与记录id + */ + @TableField(value = "record_id") + private Long recordId; + + /** + * 发放id + */ + @TableField(value = "grant_id") + private Long grantId; +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityRecordStatistics.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityRecordStatistics.java new file mode 100644 index 000000000..5f1c313a9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityRecordStatistics.java @@ -0,0 +1,16 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class OfflineActivityRecordStatistics implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer auditStatus; + private Integer count; + private BigDecimal sumMoney; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java new file mode 100644 index 000000000..c1cd8cd96 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java @@ -0,0 +1,31 @@ +package com.iformall.domain.vo; + +import com.iformall.common.SortColumn; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class OfflineActivitySettlement extends TenantEntity { + + private Long id; + private List merchantIdList; + + private Long activityId; + private Long merchantId; + private String merchantName; + + @SortColumn(column = "recordCount") + private Integer recordCount; + @SortColumn(column = "sumOrderMoney") + private BigDecimal sumOrderMoney; + @SortColumn(column = "sumGrantPrice") + private BigDecimal sumGrantPrice; + @SortColumn(column = "sumMallPrice") + private BigDecimal sumMallPrice; + @SortColumn(column = "sumMerchantPrice") + private BigDecimal sumMerchantPrice; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java new file mode 100644 index 000000000..8f892a920 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java @@ -0,0 +1,18 @@ +package com.iformall.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +public class OfflineActivitySettlementStatistics implements Serializable { + + private static final long serialVersionUID = 1L; + + private BigDecimal sumGrantPrice; + private Integer recordCount; + private Integer merchantCount; + private BigDecimal sumMallPrice; + private BigDecimal sumMerchantPrice; +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsMoneyRule.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsMoneyRule.java new file mode 100644 index 000000000..3bee1a91d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsMoneyRule.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityAwardsMoneyRule { + + MALL_ONLY(0, "商管承担全部"), + MERCHANT_ONLY(1, "商户承担全部"), + SHARE(2, "商管商户分担"); + + public static EnumOfflineActivityAwardsMoneyRule getEnum(Integer code) { + for (EnumOfflineActivityAwardsMoneyRule value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityAwardsMoneyRule(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsRule.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsRule.java new file mode 100644 index 000000000..c24a2d57e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsRule.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityAwardsRule { + + DEF(0, "四舍五入(分)"), + YUAN(1, "四舍五入(元)"), + TEN(2, "四舍五入(十)"), + ; + + public static EnumOfflineActivityAwardsRule getEnum(Integer code) { + for (EnumOfflineActivityAwardsRule value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityAwardsRule(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMerchantType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMerchantType.java new file mode 100644 index 000000000..1c937d5ea --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMerchantType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityMerchantType { + + ALL(0, "全部商户"), + ADD(1, "参加商户"), + UN_ADD(2, "不参加商户") + ; + + public static EnumOfflineActivityMerchantType getEnum(Integer code) { + for (EnumOfflineActivityMerchantType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityMerchantType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityRecordStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityRecordStatus.java new file mode 100644 index 000000000..f35718ac5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityRecordStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityRecordStatus { + + AUDTING(0, "审核中"), + AUDI_SUCCESS(1, "审批通过"), + AUDT_FAIL(2, "审批拒绝"), + IS_GRANT(10, "已发奖"),; + + public static EnumOfflineActivityRecordStatus getEnum(Integer code) { + for (EnumOfflineActivityRecordStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityRecordStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityStatus.java new file mode 100644 index 000000000..1aac7fb23 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityStatus.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityStatus { + + OFF_LINE(0, "未上架"), + ON_LINE(1, "已上架"), + EXPIRE(2, "已过期") + ; + + public static EnumOfflineActivityStatus getEnum(Integer code) { + for (EnumOfflineActivityStatus value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityType.java new file mode 100644 index 000000000..b42d5bd9c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityType.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityType { + + LOTTERY_DRAW(1, "抽奖活动"), + GIFT(2, "满额赠礼"), + CASHBACK(3, "返现活动") + ; + + public static EnumOfflineActivityType getEnum(Integer code) { + for (EnumOfflineActivityType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsItemMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsItemMapper.java new file mode 100644 index 000000000..117a5559c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsItemMapper.java @@ -0,0 +1,28 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityAwardsItem; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_awards_item(线下活动奖项)】的数据库操作Mapper +* @createDate 2024-08-06 13:20:56 +* @Entity com.iformall.domain.po.WxOfflineActivityAwardsItem +*/ +public interface WxOfflineActivityAwardsItemMapper extends CommonMapper { + + WxOfflineActivityAwardsItem selectById(@Param("id")Long id, @Param("tenantId")String tenantId); + + List findList(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem); + + Integer itemCount(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem); + + void delete(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java new file mode 100644 index 000000000..1699085fa --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java @@ -0,0 +1,28 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Mapper +* @createDate 2024-08-09 00:13:44 +* @Entity com.iformall.domain.po.WxOfflineActivityGrantAward +*/ +public interface WxOfflineActivityGrantAwardMapper extends CommonMapper { + + Integer getCusCount(WxOfflineActivityGrantAward grantAwardQ); + + List 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/WxOfflineActivityGrantItemMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java new file mode 100644 index 000000000..991ed2d0e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java @@ -0,0 +1,27 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityGrantItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Mapper +* @createDate 2024-08-09 00:13:44 +* @Entity com.iformall.domain.po.WxOfflineActivityGrantItem +*/ +public interface WxOfflineActivityGrantItemMapper extends CommonMapper { + + void insertList(@Param("grantItemList")List grantItemList); + + Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ); + + List findList(WxOfflineActivityGrantItem grantItemQ); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java new file mode 100644 index 000000000..659345249 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java @@ -0,0 +1,31 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityGrantSettlement; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.iformall.domain.vo.OfflineActivitySettlement; +import com.iformall.domain.vo.OfflineActivitySettlementStatistics; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Mapper +* @createDate 2024-08-09 00:13:44 +* @Entity com.iformall.domain.po.WxOfflineActivityGrantSettlement +*/ +public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper { + + void insertList(@Param("settlementList")List settlementList); + + OfflineActivitySettlementStatistics settlementStatistics(WxOfflineActivityGrantSettlement settlement); + + List getActivitySettlement(OfflineActivitySettlement settlement); + + List findList(WxOfflineActivityGrantSettlement settlement); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityItemMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityItemMapper.java new file mode 100644 index 000000000..077d55007 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityItemMapper.java @@ -0,0 +1,28 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityItem; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_item(线下活动项目)】的数据库操作Mapper +* @createDate 2024-08-06 13:20:56 +* @Entity com.iformall.domain.po.WxOfflineActivityItem +*/ +public interface WxOfflineActivityItemMapper extends CommonMapper { + + WxOfflineActivityItem selectById(@Param("id")Long id, @Param("tenantId")String tenantId); + + List findList(WxOfflineActivityItem wxOfflineActivityItem); + + List findIds(WxOfflineActivityItem wxOfflineActivityItem); + + void delete(WxOfflineActivityItem wxOfflineActivityItem); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMapper.java new file mode 100644 index 000000000..3ea3df513 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMapper.java @@ -0,0 +1,28 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivity; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity(线下活动)】的数据库操作Mapper +* @createDate 2024-08-06 13:20:56 +* @Entity com.iformall.domain.po.WxOfflineActivity +*/ +public interface WxOfflineActivityMapper extends CommonMapper { + + WxOfflineActivity selectById(@Param("id")Long id, @Param("tenantId")String tenantId); + + List findList(WxOfflineActivity wxOfflineActivity); + + void updateStatus(WxOfflineActivity wxOfflineActivity); + + List findIds(WxOfflineActivity wxOfflineActivity); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMerchantMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMerchantMapper.java new file mode 100644 index 000000000..bf69b7fa8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMerchantMapper.java @@ -0,0 +1,27 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityMerchant; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_merchant(线下活动商户)】的数据库操作Mapper +* @createDate 2024-08-06 13:20:56 +* @Entity com.iformall.domain.po.WxOfflineActivityMerchant +*/ +public interface WxOfflineActivityMerchantMapper extends CommonMapper { + + List getMerchantIdList(@Param("activityId")Long activityId, @Param("tenantId")String tenantId); + + List findList(WxOfflineActivityMerchant wxOfflineActivityMerchant); + + void delete(WxOfflineActivityMerchant wxOfflineActivityMerchant); + +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordGrantMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordGrantMapper.java new file mode 100644 index 000000000..ae5feed7f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordGrantMapper.java @@ -0,0 +1,27 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityRecordGrant; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Mapper +* @createDate 2024-08-09 00:13:44 +* @Entity com.iformall.domain.po.WxOfflineActivityRecordGrant +*/ +public interface WxOfflineActivityRecordGrantMapper extends CommonMapper { + + Integer selectGrantCount(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); + + void insertList(@Param("recordGrantList")List recordGrantList); + + Long selectGrantId(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java new file mode 100644 index 000000000..4e972f736 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java @@ -0,0 +1,38 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.iformall.domain.vo.OfflineActivityRecordStatistics; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Mapper +* @createDate 2024-08-09 00:13:44 +* @Entity com.iformall.domain.po.WxOfflineActivityRecord +*/ +public interface WxOfflineActivityRecordMapper extends CommonMapper { + + List findList(WxOfflineActivityRecord record); + + WxOfflineActivityRecord selectById(@Param("id")Long id, @Param("tenantId")String tenantId); + + List auditStatusStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); + + void updateAuditStatus(WxOfflineActivityRecord record); + + WxOfflineActivityRecord selectLimitOne(WxOfflineActivityRecord wxOfflineActivityRecord); + + Integer getCount(WxOfflineActivityRecord recordQ); + + Integer getMerchantCount(WxOfflineActivityRecord recordQ); + + List findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java new file mode 100644 index 000000000..9e5dbc3b5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java @@ -0,0 +1,19 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxOfflineActivityAwardsItem; +import com.baomidou.mybatisplus.extension.service.IService; +import com.iformall.domain.po.WxOfflineActivityItem; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_awards_item(线下活动奖项)】的数据库操作Service +* @createDate 2024-08-06 13:20:56 +*/ +public interface WxOfflineActivityAwardsItemService { + + void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsItemList); + + List getActivityAwardsItemList(Long activityItemId, String tenantId); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java new file mode 100644 index 000000000..246bd646c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java @@ -0,0 +1,37 @@ +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; +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; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Service +* @createDate 2024-08-09 00:13:44 +*/ +public interface WxOfflineActivityGrantAwardService { + + Map getRecordStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); + + List getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord); + + void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + + void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + + Map cusStatistics(TenantEntity tenantInfo); + + 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/WxOfflineActivityGrantItemService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemService.java new file mode 100644 index 000000000..ec98eb2f4 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemService.java @@ -0,0 +1,15 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import com.iformall.domain.po.WxOfflineActivityGrantItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Service +* @createDate 2024-08-09 00:13:44 +*/ +public interface WxOfflineActivityGrantItemService { + + void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java new file mode 100644 index 000000000..dbea00751 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java @@ -0,0 +1,37 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxOfflineActivity; +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import com.iformall.domain.po.WxOfflineActivityGrantSettlement; +import com.baomidou.mybatisplus.extension.service.IService; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivitySettlement; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service +* @createDate 2024-08-09 00:13:44 +*/ +public interface WxOfflineActivityGrantSettlementService { + + void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); + + Map settlementStatistics(TenantEntity tenantInfo); + + PageInfo activityListAsPage(WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize); + + List getActivitySettlement(OfflineActivitySettlement grantSettlement); + + Map merchantSettlementStatistics(OfflineActivitySettlement grantSettlement); + + List findList(WxOfflineActivityGrantSettlement grantSettlement); + + void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityItemService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityItemService.java new file mode 100644 index 000000000..162f950fe --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityItemService.java @@ -0,0 +1,18 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxOfflineActivity; +import com.iformall.domain.po.WxOfflineActivityItem; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_item(线下活动项目)】的数据库操作Service +* @createDate 2024-08-06 13:20:56 +*/ +public interface WxOfflineActivityItemService { + + void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List activityItemList); + + List getActivityItemList(Long activityId, String tenantId); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityMerchantService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityMerchantService.java new file mode 100644 index 000000000..1cdc03a97 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityMerchantService.java @@ -0,0 +1,19 @@ +package com.iformall.service; + + +import com.iformall.domain.po.WxOfflineActivity; +import com.iformall.domain.po.WxOfflineActivityMerchant; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_merchant(线下活动商户)】的数据库操作Service +* @createDate 2024-08-06 13:20:56 +*/ +public interface WxOfflineActivityMerchantService { + + void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List activityMerchantList); + + List getActivityMerchantList(Long activityId, String tenantId); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordGrantService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordGrantService.java new file mode 100644 index 000000000..f7647467c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordGrantService.java @@ -0,0 +1,15 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import com.iformall.domain.po.WxOfflineActivityRecordGrant; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Service +* @createDate 2024-08-09 00:13:44 +*/ +public interface WxOfflineActivityRecordGrantService{ + + void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java new file mode 100644 index 000000000..c50d602d0 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java @@ -0,0 +1,36 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxOfflineActivityRecord; +import com.baomidou.mybatisplus.extension.service.IService; +import com.iformall.domain.po.WxRaffleActivityRecord; +import com.iformall.domain.po.base.TenantEntity; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Service +* @createDate 2024-08-09 00:13:44 +*/ +public interface WxOfflineActivityRecordService { + + PageInfo listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize); + + void saveOrUpdate(WxOfflineActivityRecord wxOfflineActivityRecord); + + WxOfflineActivityRecord getById(Long id, String tenantId); + WxOfflineActivityRecord getInfoById(Long id, String tenantId); + + Map getStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); + + void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId); + + Map orderStatistics(TenantEntity tenantInfo); + + void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord); + + Integer getWaitAudiCount(TenantEntity tenantInfo); +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityService.java new file mode 100644 index 000000000..9dbdf9bb8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityService.java @@ -0,0 +1,28 @@ +package com.iformall.service; + +import com.github.pagehelper.PageInfo; +import com.iformall.domain.po.WxOfflineActivity; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity(线下活动)】的数据库操作Service +* @createDate 2024-08-06 13:20:56 +*/ +public interface WxOfflineActivityService{ + + /** + * 根据实体查询分页列表 + * + * @param record + * @param pageIndex + * @param pageSize + * @return + */ + PageInfo listAsPage(WxOfflineActivity record, Integer pageIndex, Integer pageSize); + + void saveOrUpdate(WxOfflineActivity wxOfflineActivity); + + void updateStatus(WxOfflineActivity wxOfflineActivity); + + WxOfflineActivity getInfoById(Long id, String tenantId); +} 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/WxOfflineActivityAwardsItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java new file mode 100644 index 000000000..66e7b9597 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java @@ -0,0 +1,77 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxOfflineActivityAwardsItem; +import com.iformall.domain.po.WxOfflineActivityItem; +import com.iformall.enums.EnumOfflineActivityType; +import com.iformall.service.WxOfflineActivityAwardsItemService; +import com.iformall.mapper.WxOfflineActivityAwardsItemMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_awards_item(线下活动奖项)】的数据库操作Service实现 +* @createDate 2024-08-06 13:20:56 +*/ +@Service +public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivityAwardsItemService{ + + @Autowired + WxOfflineActivityAwardsItemMapper wxOfflineActivityAwardsItemMapper; + + @Override + public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsItemList) { + WxOfflineActivityAwardsItem activityAwardsItemDel = new WxOfflineActivityAwardsItem(); + activityAwardsItemDel.updateTenantInfo(activityItem); + activityAwardsItemDel.setActivityItemId(activityItem.getId()); + wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel); + + for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) { + if(awaItem.getId() == null){ + final IdWorker idWorker = IdWorker.get(); + awaItem.setId(idWorker.nextId()); + } + awaItem.updateTenantInfo(activityItem); + awaItem.setActivityItemId(activityItem.getId()); + + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + awaItem.setCashBackRatio(BigDecimal.ZERO); + awaItem.setGrade(-1); + awaItem.setMinAmount(null); + awaItem.setMaxAmount(null); + } + else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) { + awaItem.setCashBackRatio(BigDecimal.ZERO); + } + else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { + awaItem.setGrade(-1); + awaItem.setMinAmount(null); + awaItem.setMaxAmount(null); + awaItem.setPrice(BigDecimal.ZERO); + } + if(awaItem.getCreateDate() == null){ + awaItem.setCreateDate(activityItem.getUpdateDate()); + } + awaItem.setUpdateDate(activityItem.getUpdateDate()); + wxOfflineActivityAwardsItemMapper.insert(awaItem); + } + } + + @Override + public List getActivityAwardsItemList(Long activityItemId, String tenantId) { + WxOfflineActivityAwardsItem activityAwardsItemQuery = new WxOfflineActivityAwardsItem(); + activityAwardsItemQuery.setActivityItemId(activityItemId); + activityAwardsItemQuery.setTenantId(tenantId); + List activityAwardsItemList = wxOfflineActivityAwardsItemMapper.findList(activityAwardsItemQuery); + return activityAwardsItemList; + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java new file mode 100644 index 000000000..8d7dee101 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -0,0 +1,729 @@ +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; +import com.iformall.common.IdWorker; +import com.iformall.common.Result; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivityRecordStatistics; +import com.iformall.enums.*; +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; + +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; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.*; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Service实现 +* @createDate 2024-08-09 00:13:44 +*/ +@Service +public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivityGrantAwardService{ + + @Autowired + private WxOfflineActivityGrantAwardMapper wxOfflineActivityGrantAwardMapper; + + @Autowired + private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; + + @Autowired + WxOfflineActivityMapper wxOfflineActivityMapper; + + @Autowired + WxOfflineActivityMerchantMapper wxOfflineActivityMerchantMapper; + + @Autowired + WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; + + @Autowired + WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; + + @Autowired + WxOfflineActivityGrantItemService wxOfflineActivityGrantItemService; + + @Autowired + WxOfflineActivityRecordGrantService wxOfflineActivityRecordGrantService; + + @Autowired + WxOfflineActivityItemService wxOfflineActivityItemService; + + @Autowired + WxOfflineActivityService wxOfflineActivityService; + + @Autowired + WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService; + + @Autowired + WxMerchantService wxMerchantService; + @Autowired + MallUserInfoService mallUserInfoService; + + @Autowired + ExcelService excelService; + + + @Override + public Map getRecordStatistics(WxOfflineActivityRecord wxOfflineActivityRecord) { + handlerRecordQuery(wxOfflineActivityRecord); + WxOfflineActivityRecord limitOne = wxOfflineActivityRecordMapper.selectLimitOne(wxOfflineActivityRecord); + Map result = new HashMap<>(); + Integer audting = 0, audi_success = 0, audt_fail = 0; + BigDecimal sum_success = BigDecimal.ZERO, sum_fail = BigDecimal.ZERO; + if (limitOne == null) { + result.put("cus_name","查无此人"); + result.put("cus_phone",wxOfflineActivityRecord.getCusPhone()); + }else{ + result.put("cus_name",limitOne.getCusName()); + result.put("cus_phone",limitOne.getCusPhone()); + + List recordStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord); + + for(OfflineActivityRecordStatistics statistics : recordStatistics){ + if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){ + audting = statistics.getCount(); + } else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) { + audi_success = statistics.getCount(); + sum_success = statistics.getSumMoney(); + } else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) { + audt_fail = statistics.getCount(); + } + } + } + + result.put("audting",audting); + result.put("audi_success",audi_success); + result.put("sum_success",sum_success); + result.put("audt_fail",audt_fail); + result.put("sum_count",audting+audi_success+audt_fail); + return result; + } + + @Override + public List getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord) { + handlerRecordQuery(wxOfflineActivityRecord); + List recordList = wxOfflineActivityRecordMapper.findList(wxOfflineActivityRecord); + handlerRecordList(wxOfflineActivityRecord,recordList); + return recordList; + } + + private void handlerRecordQuery(WxOfflineActivityRecord wxOfflineActivityRecord){ + WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityRecord.getActivityId(), wxOfflineActivityRecord.getTenantId()); + if (activity == null) { + wxOfflineActivityRecord.setId(-1l); + return; + } + wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime()); + wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime()); + + if(EnumOfflineActivityMerchantType.ADD.getCode().equals(activity.getAllMerchant())){ + List merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); + wxOfflineActivityRecord.setMerchantIdList(merchantIds); + }else if(EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(activity.getAllMerchant())){ + List merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); + wxOfflineActivityRecord.setNotMerchantIdList(merchantIds); + } + } + + private void handlerRecordList(WxOfflineActivityRecord wxOfflineActivityRecord, List recordList) { + if (recordList == null || recordList.isEmpty()) { + return; + } + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(wxOfflineActivityRecord); + Map idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); + MallUserInfo userInfoQ = new MallUserInfo(); + userInfoQ.updateTenantInfo(wxOfflineActivityRecord); + Map userMap = mallUserInfoService.getUserMap(userInfoQ); + + for (WxOfflineActivityRecord record : recordList) { + record.setMerchantName(idAndNamesMap.get(record.getMerchantId())); + if(record.getAuditBy() != null){ + record.setAuditByName(userMap.get(record.getAuditBy()).getName()); + } + //判断订单是否发奖 + Integer grantCount = wxOfflineActivityRecordGrantMapper.selectGrantCount(wxOfflineActivityRecord.getTenantId(),wxOfflineActivityRecord.getActivityId(),record.getId()); + if(grantCount >= 1){ + record.setAuditStatus(EnumOfflineActivityRecordStatus.IS_GRANT.getCode()); + } + + } + } + + @Override + public void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityGrantAward.getActivityId(), wxOfflineActivityGrantAward.getTenantId()); + if(activity == null){ + throw new MallinkException(Result.ERROR, "未查询到活动"); + } + if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(activity.getStatus())){ + throw new MallinkException(Result.ERROR, "请检查活动状态"); + } + //订单合并 + handlerGrantData(activity,wxOfflineActivityGrantAward,true); + + //奖项处理 + List activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); + wxOfflineActivityGrantAward.setActivityItemList(activityItemList); + for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){ + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + + if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ + activityItem.setIsMeet(false); + continue; + } + activityItem.setIsMeet(true); + //奖项限制数量 + int limitCount = 0; + if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ + limitCount = wxOfflineActivityGrantAward.getOrderMoneySum().divide(activityItem.getAwardsItemPrice(),0,BigDecimal.ROUND_HALF_DOWN).intValue(); + } + if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 + && activityItem.getAwardsItemLimit() < limitCount){ + limitCount = activityItem.getAwardsItemLimit(); + } + if(limitCount == 0){ + activityItem.setIsMeet(false); + } + activityItem.setRealAwardsItemLimit(limitCount); + } + else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ + List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); + WxOfflineActivityAwardsItem grantAwardsItem = null; + for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ + if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) + && (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ + grantAwardsItem = awardsItem; + } + } + if(grantAwardsItem == null){ + activityItem.setIsMeet(false); + continue; + } + activityItem.setIsMeet(true); + activityItem.setRealAwardsItemLimit(1); + + WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); + grantItem.setActivityItemId(activityItem.getId()); + grantItem.setActivityItemName(activityItem.getName()); + grantItem.setActivityItemType(activityItem.getType()); + grantItem.setAwardItamId(grantAwardsItem.getId()); + grantItem.setAwardName(grantAwardsItem.getName()); + grantItem.setAwardGrade(grantAwardsItem.getGrade()); + grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount()); + grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount()); + grantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); + grantItem.setAwardCount(1); + grantItem.setAwardPrice(grantAwardsItem.getPrice()); + grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); + grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); + grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); + activityItem.setActivityGrantItemList(Collections.singletonList(grantItem)); + } + else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { + if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ + activityItem.setIsMeet(false); + continue; + } + activityItem.setIsMeet(true); + activityItem.setRealAwardsItemLimit(1); + for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) { + //计算返现金额 + BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() + .multiply(awardsItem.getCashBackRatio().divide(new BigDecimal(100))); + if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ + awardsItem.setPrice(cashBackPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); + } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { + awardsItem.setPrice(cashBackPrice.setScale(0, BigDecimal.ROUND_HALF_UP)); + }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ + BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP); + awardsItem.setPrice(cashBackPriceTen.multiply(new BigDecimal(10))); + } + } + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + + WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityGrantAward.getActivityId(), wxOfflineActivityGrantAward.getTenantId()); + if(activity == null){ + throw new MallinkException(Result.ERROR, "未查询到活动"); + } + if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(activity.getStatus())){ + throw new MallinkException(Result.ERROR, "请检查活动状态"); + } + + handlerGrantData(activity,wxOfflineActivityGrantAward,false); + Date now = new Date(); + final IdWorker idWorker = IdWorker.get(); + wxOfflineActivityGrantAward.setId(idWorker.nextId()); + wxOfflineActivityGrantAward.setCreateDate(now); + wxOfflineActivityGrantAward.setUpdateDate(now); + wxOfflineActivityGrantAwardMapper.insert(wxOfflineActivityGrantAward); + + wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward); + + //处理奖项 + handlerGrantItem(activity,wxOfflineActivityGrantAward); + wxOfflineActivityGrantItemService.insertFromGrantAward(wxOfflineActivityGrantAward); + + //结算 + wxOfflineActivityGrantSettlementService.settlement(wxOfflineActivityGrantAward); + } + + + private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward,boolean isForPage){ + + List wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); + if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) { + throw new MallinkException(Result.ERROR, "未查询到活动订单"); + } + if(wxOfflineActivityRecords.stream().map(WxOfflineActivityRecord::getCusPhone).distinct().count() != 1){ + throw new MallinkException(Result.ERROR, "请检查活动订单用户是否为同一人"); + } + + BigDecimal orderMoneySum = BigDecimal.ZERO; + List lotteryNumList = new ArrayList<>(); + List anniversaryLotteryNumList = new ArrayList<>(); + for (WxOfflineActivityRecord record : wxOfflineActivityRecords) { + if(!EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(record.getAuditStatus())){ + throw new MallinkException(Result.ERROR, "请检查活动订单审核状态"); + } + if(record.getCreateDate().before(activity.getStartTime()) || record.getCreateDate().after(activity.getEndTime())){ + throw new MallinkException(Result.ERROR, "请检查活动时间"); + } + if(wxOfflineActivityRecordGrantMapper.selectGrantCount(activity.getTenantId(),activity.getId(),record.getId()) > 0){ + throw new MallinkException(Result.ERROR, "请检查订单是否已参与活动"); + } + + orderMoneySum = orderMoneySum.add(record.getOrderMoney()); + if(record.getLotteryNumList() != null && !record.getLotteryNumList().isEmpty()){ + lotteryNumList.addAll(record.getLotteryNumList()); + } + if(StringUtils.isNotBlank(record.getAnniversaryLotteryNum())){ + anniversaryLotteryNumList.add(record.getAnniversaryLotteryNum()); + } + + } + wxOfflineActivityGrantAward.setRecordList(wxOfflineActivityRecords); + wxOfflineActivityGrantAward.setActivityName(activity.getName()); + wxOfflineActivityGrantAward.setCusName(wxOfflineActivityRecords.get(0).getCusName()); + wxOfflineActivityGrantAward.setCusPhone(wxOfflineActivityRecords.get(0).getCusPhone()); + wxOfflineActivityGrantAward.setOrderCount(wxOfflineActivityRecords.size()); + wxOfflineActivityGrantAward.setOrderMoneySum(orderMoneySum); + + if(isForPage){ + wxOfflineActivityGrantAward.setLotteryNum(JSON.toJSONString(lotteryNumList)); + wxOfflineActivityGrantAward.setAnniversaryLotteryNum(JSON.toJSONString(anniversaryLotteryNumList)); + } + } + + private void handlerGrantItem(WxOfflineActivity activity, WxOfflineActivityGrantAward wxOfflineActivityGrantAward){ + if(wxOfflineActivityGrantAward.getActivityItemList() == null){ + throw new MallinkException(Result.ERROR, "请检查活动项参数"); + } + + List activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); + Map activityItemMap = activityItemList.stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); + + int i = 0;//检查活动奖项 + for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) { + if(grantActivityItem.getId() == null){ + throw new MallinkException(Result.ERROR, "请检查活动项参数"); + } + WxOfflineActivityItem activityItem = activityItemMap.get(grantActivityItem.getId()); + if(activityItem == null){ + throw new MallinkException(Result.ERROR, "请检查活动项参数"); + } + List activityGrantItemList = grantActivityItem.getActivityGrantItemList(); + if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ + continue; +// throw new MallinkException(Result.ERROR, "请检查活动奖项参数"); + } + boolean isRepeat = activityGrantItemList.stream() + .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) + .entrySet().stream().anyMatch(e -> e.getValue() > 1); + if(isRepeat){ + throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); + } + + Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); + + for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { + i++; + if(grantGrantItem.getAwardCount() == null){ + grantGrantItem.setAwardCount(1); + } + } + + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + + if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ + throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); + } + //奖项限制数量 + int limitCount = 0; + if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ + limitCount = wxOfflineActivityGrantAward.getOrderMoneySum().divide(activityItem.getAwardsItemPrice(),0,BigDecimal.ROUND_HALF_DOWN).intValue(); + } + if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 + && activityItem.getAwardsItemLimit() < limitCount){ + limitCount = activityItem.getAwardsItemLimit(); + } + if(activityGrantItemList.stream().mapToInt(WxOfflineActivityGrantItem::getAwardCount).sum()>limitCount){ + throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"奖券超过限制"); + } + + + for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { + if(grantGrantItem.getAwardItamId() == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); + if(awardsItem == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + + handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); + } + + } + else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ + if(activityGrantItemList.size() != 1){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); + if(grantGrantItem.getAwardItamId() == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); + if(awardsItem == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } +// if(awardsItem.getMinAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) < 0){ +// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)"); +// } + if((awardsItem.getMinAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) < 0) + || (awardsItem.getMaxAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) > 0)){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)"); + } + + handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); + + } + else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { + if(activityGrantItemList.size() != 1){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); + if(grantGrantItem.getAwardItamId() == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); + if(awardsItem == null){ + throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); + } + + handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); + + } + } + if(i == 0){ + throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); + } + } + + private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ +// grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); + grantGrantItem.setActivityId(activity.getId()); + grantGrantItem.setActivityName(activity.getName()); + grantGrantItem.setActivityItemId(activityItem.getId()); + grantGrantItem.setActivityItemName(activityItem.getName()); + grantGrantItem.setActivityItemType(activityItem.getType()); + grantGrantItem.setAwardItamId(awardsItem.getId()); + grantGrantItem.setAwardName(awardsItem.getName()); + grantGrantItem.setAwardGrade(awardsItem.getGrade()); + grantGrantItem.setAwardMinAmount(awardsItem.getMinAmount()); + grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount()); + grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); + grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio()); + grantGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(grantGrantItem.getAwardCount())).setScale(2, BigDecimal.ROUND_HALF_UP)); + grantGrantItem.setMoneyRule(awardsItem.getMoneyRule()); + grantGrantItem.setMallShareRate(awardsItem.getMallShareRate()); + grantGrantItem.setMerchantShareRate(awardsItem.getMerchantShareRate()); + } + + + @Override + public Map cusStatistics(TenantEntity tenantInfo) { + //最近30天 + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + String today = DateUtils.getTimeBefore(0, now); + + //最近30天数据 + WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); + grantAwardQ.updateTenantInfo(tenantInfo); + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); + Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + //一周前的昨天 + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate)); + grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(weekStartdate)); + Integer yesWeekCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + //昨天的昨天 + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesyesDate)); + grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate)); + Integer yesYesCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + //昨天 + grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate)); + grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(today)); + Integer yesCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); + + Map result = new HashMap<>(); + result.put("monthCount",monthCount); + + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + String dayPercentage = "--"; + if (yesYesCount > 0) { + Integer count = yesCount - yesYesCount; + dayPercentage = nf.format(count.doubleValue() / new Double(yesYesCount).doubleValue()); + } + result.put("dayPercentage",dayPercentage); + String weekPercentage = "--"; + if (yesWeekCount > 0) { + Integer count = yesCount - yesWeekCount; + weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue()); + } + result.put("weekPercentage",weekPercentage); + return result; + } + + @Override + public void recordExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord) { + handlerRecordQuery(wxOfflineActivityRecord); + List recordList = wxOfflineActivityRecordMapper.findList(wxOfflineActivityRecord); + handlerRecordList(wxOfflineActivityRecord,recordList); + excelService.exportExcel(recordList, null, "用户参加活动订单列表", WxOfflineActivityRecord.class, "用户参加活动订单列表.xlsx", response, false); + } + + @Override + public WxOfflineActivityGrantAward grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + Long grantId = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId()); + if(grantId == null){ + return null; + } + WxOfflineActivityGrantAward grantAward = wxOfflineActivityGrantAwardMapper.selectById(grantId,wxOfflineActivityGrantAward.getTenantId()); + //获取奖项 + List activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId()); + grantAward.setActivityItemList(activityItemList); + //获取实际获得奖项 + WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); + grantItemQ.updateTenantInfo(grantAward); + grantItemQ.setGrantId(grantId); + List grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ); + Map> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); + for (WxOfflineActivityItem activityItem : grantAward.getActivityItemList()) { + List grantActivityItemList = activityItemGrantMap.get(activityItem.getId()); + if (grantActivityItemList == null || grantActivityItemList.isEmpty()) { + activityItem.setIsMeet(false); + continue; + } + activityItem.setIsMeet(true); + activityItem.setActivityGrantItemList(grantActivityItemList); + } + 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(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", String.join(";", merchantOrder)); + 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(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(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().toString()+"%"); + activityGrantObject.put("p"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardPrice()); + }else{ + activityGrantObject.put("r"+String.valueOf(activityItem.getId()),"%"); + activityGrantObject.put("p"+String.valueOf(activityItem.getId()),0); + } + } + } + if(grantAward.getLotteryNumList() != null && !grantAward.getLotteryNumList().isEmpty()){ + activityGrantObject.put("lotteryNum",String.join(";", grantAward.getLotteryNumList())); + } + activityGrantObject.put("lotteryCount",grantAward.getLotteryCount()); + if(grantAward.getAnniversaryLotteryNumList() != null && !grantAward.getAnniversaryLotteryNumList().isEmpty()){ + activityGrantObject.put("anniversaryLotteryNum",String.join(";", grantAward.getAnniversaryLotteryNumList())); + } +// if(StringUtils.isNotBlank(grantAward.getSignImg())){ +// try{ +// activityGrantObject.put("signImg",DownFileUtil.url2byte(grantAward.getSignImg())); +// }catch (Exception e){} +// } + activityGrantObject.put("signImg",grantAward.getSignImg()); + 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",30); + 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",40); +// entity17.setType(BaseEntityTypeConstants.IMAGE_TYPE); +// entity17.setExportImageType(1); +// entity17.setHeight(20); + + headList.add(entity17); + + return headList; + } + +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java new file mode 100644 index 000000000..5d1ff180e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java @@ -0,0 +1,70 @@ +package com.iformall.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import com.iformall.domain.po.WxOfflineActivityGrantItem; +import com.iformall.domain.po.WxOfflineActivityItem; +import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule; +import com.iformall.enums.EnumOfflineActivityAwardsRule; +import com.iformall.enums.EnumOfflineActivityType; +import com.iformall.service.WxOfflineActivityGrantItemService; +import com.iformall.mapper.WxOfflineActivityGrantItemMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Service实现 +* @createDate 2024-08-09 00:13:44 +*/ +@Service +public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityGrantItemService{ + + @Autowired + private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; + + @Override + public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + List rantItemList = new ArrayList<>(); + final IdWorker idWorker = IdWorker.get(); + Date now = new Date(); + for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { + if(activityItem.getActivityGrantItemList() == null){ + continue; + } + for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { + grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); + grantGrantItem.setId(idWorker.nextId()); + grantGrantItem.updateTenantInfo(wxOfflineActivityGrantAward); + grantGrantItem.setCreateDate(now); + grantGrantItem.setUpdateDate(now); + if(EnumOfflineActivityType.CASHBACK.getCode().equals(grantGrantItem.getActivityItemType())){ + BigDecimal awardPrice = wxOfflineActivityGrantAward.getOrderMoneySum() + .multiply(grantGrantItem.getCashBackRatio().divide(new BigDecimal(100))); + if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){ + grantGrantItem.setAwardPrice(awardPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); + } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) { + grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP)); + }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){ + BigDecimal awardPriceTen = awardPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP); + grantGrantItem.setAwardPrice(awardPriceTen.multiply(new BigDecimal(10))); + } + } + rantItemList.add(grantGrantItem); + } + } + wxOfflineActivityGrantItemMapper.insertList(rantItemList); + + } + +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java new file mode 100644 index 000000000..1f2dacfa9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java @@ -0,0 +1,326 @@ +package com.iformall.service.impl; + +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivitySettlement; +import com.iformall.domain.vo.OfflineActivitySettlementStatistics; +import com.iformall.enums.EnumOfflineActivityStatus; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.mapper.WxOfflineActivityMapper; +import com.iformall.service.ExcelService; +import com.iformall.service.WxMerchantService; +import com.iformall.service.WxOfflineActivityGrantSettlementService; +import com.iformall.mapper.WxOfflineActivityGrantSettlementMapper; +import com.iformall.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.NumberFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service实现 +* @createDate 2024-08-09 00:13:44 +*/ +@Service +public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineActivityGrantSettlementService{ + + @Autowired + private WxOfflineActivityGrantSettlementMapper wxOfflineActivityGrantSettlementMapper; + + @Autowired + WxOfflineActivityMapper wxOfflineActivityMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; + @Autowired + WxMerchantService wxMerchantService; + + @Autowired + ExcelService excelService; + + @Override + public void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + List settlementList = new ArrayList<>(); + final IdWorker idWorker = IdWorker.get(); + Date now = new Date(); + //获取订单占比(占比最少的订单用减法,尽量减少误差) + List recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); + int size = recordDescList.size() - 1; + BigDecimal lastRatio = new BigDecimal(100); + for(int i=0; i itemSettlementList = new ArrayList<>(); + for (WxOfflineActivityRecord record : recordDescList){ + WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); + settlement.setId(idWorker.nextId()); + settlement.updateTenantInfo(wxOfflineActivityGrantItem); + + settlement.setRecordId(record.getId()); + settlement.setOrderNo(record.getOrderNo()); + settlement.setOrderMoney(record.getOrderMoney()); + settlement.setMerchantId(record.getMerchantId()); + + settlement.setActivityId(wxOfflineActivityGrantItem.getActivityId()); + settlement.setActivityItemId(wxOfflineActivityGrantItem.getActivityItemId()); + settlement.setAwardItamId(wxOfflineActivityGrantItem.getAwardItamId()); + settlement.setGrantId(wxOfflineActivityGrantItem.getGrantId()); + settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); + settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); + settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate()); + settlement.setOrderRatio(record.getOrderRatio()); + + settlement.setCreateDate(now); + settlement.setUpdateDate(now); + itemSettlementList.add(settlement); + } + //计算订单分担金额,(占比最少的订单用减法,尽量减少误差) + int itemSize = itemSettlementList.size() - 1; + BigDecimal lastGrantPrice = wxOfflineActivityGrantItem.getAwardPrice(); + for (int i = 0; i < itemSize; i++) { + WxOfflineActivityGrantSettlement settlement = itemSettlementList.get(i); + BigDecimal realGrantPrice = wxOfflineActivityGrantItem.getAwardPrice().multiply(settlement.getOrderRatio().divide(new BigDecimal(100))).setScale(0, RoundingMode.HALF_UP); + settlement.setRealGrantPrice(realGrantPrice); + settlement.setRealMallSharePrice(settlement.getRealGrantPrice() + .multiply(settlement.getMallShareRate().divide(new BigDecimal(100))) + .setScale(0, RoundingMode.HALF_UP)); + settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice())); + + lastGrantPrice = lastGrantPrice.subtract(realGrantPrice); + } + WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize); + lastSettlement.setRealGrantPrice(lastGrantPrice); + lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice() + .multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100))) + .setScale(0, RoundingMode.HALF_UP)); + lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice())); + + settlementList.addAll(itemSettlementList); + + } + } + + wxOfflineActivityGrantSettlementMapper.insertList(settlementList); + } + + @Override + public Map settlementStatistics(TenantEntity tenantInfo) { + //最近30天 + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + String today = DateUtils.getTimeBefore(0, now); + + //最近30天 + WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); + settlement.updateTenantInfo(tenantInfo); + settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); + OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + //一周前的昨天 + settlement.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate)); + settlement.setCreateDateEnd(DateUtils.stringToDate(weekStartdate)); + OfflineActivitySettlementStatistics yesWeekStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + //昨天的昨天 + settlement.setCreateDateBegin(DateUtils.stringToDate(yesyesDate)); + settlement.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate)); + OfflineActivitySettlementStatistics yesYesStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + //昨天 + settlement.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate)); + settlement.setCreateDateEnd(DateUtils.stringToDate(today)); + OfflineActivitySettlementStatistics yesStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + + Map result = new HashMap<>(); + result.put("monthGrantPrice",monthStatistics.getSumGrantPrice()); + result.put("grantPriceDayPercentage",getPercentage(yesStatistics.getSumGrantPrice(),yesYesStatistics.getSumGrantPrice())); + result.put("grantPriceWeekPercentage",getPercentage(yesStatistics.getSumGrantPrice(),yesWeekStatistics.getSumGrantPrice())); + + result.put("monthRecordCount",monthStatistics.getRecordCount()); + result.put("recordCountDayPercentage",getPercentage(yesStatistics.getRecordCount(),yesYesStatistics.getRecordCount())); + result.put("recordCountWeekPercentage",getPercentage(yesStatistics.getRecordCount(),yesWeekStatistics.getRecordCount())); + + result.put("monthMallPrice",monthStatistics.getSumMallPrice()); + result.put("mallPriceDayPercentage",getPercentage(yesStatistics.getSumMallPrice(),yesYesStatistics.getSumMallPrice())); + result.put("mallPriceWeekPercentage",getPercentage(yesStatistics.getSumMallPrice(),yesWeekStatistics.getSumMallPrice())); + + result.put("monthMerchantPrice",monthStatistics.getSumMerchantPrice()); + result.put("merchantPriceDayPercentage",getPercentage(yesStatistics.getSumMerchantPrice(),yesYesStatistics.getSumMerchantPrice())); + result.put("merchantPriceWeekPercentage",getPercentage(yesStatistics.getSumMerchantPrice(),yesWeekStatistics.getSumMerchantPrice())); + + return result; + } + + + private String getPercentage(BigDecimal yes, BigDecimal yesYes){ + + String percentage = "--"; + if(yesYes.compareTo(BigDecimal.ZERO) > 0){ + BigDecimal count = yes.subtract(yesYes); + percentage = count.divide(yesYes,2,BigDecimal.ROUND_HALF_UP).toString(); + } + return percentage; + } + + private String getPercentage(Integer yes, Integer yesYes){ + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + + String percentage = "--"; + if(yesYes > 0){ + Integer count = yes - yesYes; + percentage = nf.format(count.doubleValue() / new Double(yesYes).doubleValue()); + } + return percentage; + } + + @Override + public PageInfo activityListAsPage(WxOfflineActivity activity, Integer pageNum, Integer pageSize) { + handlerQuery(activity); + PageInfo activityPageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxOfflineActivityMapper.findList(activity)); + handlerReturnList(activityPageInfo.getList()); + return activityPageInfo; + } + + private void handlerQuery(WxOfflineActivity record) { + if (null != record.getStatus()) { + //已上架 + if(EnumOfflineActivityStatus.ON_LINE.getCode().equals(record.getStatus())){ + record.setValidStatus(EnumYesOrNo.NO.getCode()); + } + //已过期 + else if(EnumOfflineActivityStatus.EXPIRE.getCode().equals(record.getStatus())){ + record.setStatus(null); + record.setValidStatus(EnumYesOrNo.YES.getCode()); + } + } + } + + private void handlerReturnList(List list) { + if (list == null || list.isEmpty()) { + return; + } + + for (WxOfflineActivity activity : list) { + if(new Date().before(activity.getStartTime())){ + activity.setStatus(EnumOfflineActivityStatus.EXPIRE.getCode()); + } + + //获取结算相关 + WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); + settlement.updateTenantInfo(activity); + settlement.setActivityId(activity.getId()); + OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); + activity.setGrantMershantCount(settlementStatistics.getMerchantCount()); + activity.setGrantPrice(settlementStatistics.getSumGrantPrice()); + activity.setGrantRecordCount(settlementStatistics.getRecordCount()); + activity.setMerchantSettlmentPrice(settlementStatistics.getSumMerchantPrice()); + + } + } + + @Override + public List getActivitySettlement(OfflineActivitySettlement record) { + + if (StringUtils.isNotBlank(record.getMerchantName())) { + WxMerchant merchant = new WxMerchant(); + merchant.updateTenantInfo(record); + merchant.setName(record.getMerchantName()); + List mids = wxMerchantMapper.findIdList(merchant); + if (null == mids || mids.size() <= 0 ) { + record.setId(-1L); + }else { + record.setMerchantIdList(mids); + } + } + + List activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record); + if (activitySettlementList != null && !activitySettlementList.isEmpty()) { + + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(record); + Map idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); + + for (OfflineActivitySettlement activitySettlement : activitySettlementList) { + activitySettlement.setMerchantName(idAndNamesMap.get(activitySettlement.getMerchantId())); + + } + } + return activitySettlementList; + } + + @Override + public Map merchantSettlementStatistics(OfflineActivitySettlement grantSettlement) { + Map result = new HashMap<>(); + WxOfflineActivity activity = wxOfflineActivityMapper.selectById(grantSettlement.getActivityId(),grantSettlement.getTenantId()); + if(activity == null){ + result.put("activityName","查无此活动"); + }else{ + result.put("activityName",activity.getName()); + } + WxMerchant merchant = wxMerchantMapper.selectById(grantSettlement.getMerchantId()); + if(merchant == null){ + result.put("merchantName","查无此门店"); + }else{ + result.put("merchantName",merchant.getName()); + } + List activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement); + if (activitySettlementList == null || activitySettlementList.isEmpty()) { + result.put("recordCount",0); + result.put("sumOrderMoney",0); + result.put("sumGrantPrice",0); + result.put("sumMallPrice",0); + result.put("sumMerchantPrice",0); + return result; + }else{ + OfflineActivitySettlement offlineActivitySettlement = activitySettlementList.get(0); + result.put("recordCount",offlineActivitySettlement.getRecordCount()); + result.put("sumOrderMoney",offlineActivitySettlement.getSumOrderMoney()); + result.put("sumGrantPrice",offlineActivitySettlement.getSumGrantPrice()); + result.put("sumMallPrice",offlineActivitySettlement.getSumMallPrice()); + result.put("sumMerchantPrice",offlineActivitySettlement.getSumMerchantPrice()); + } + + return result; + } + + @Override + public List findList(WxOfflineActivityGrantSettlement grantSettlement) { + return wxOfflineActivityGrantSettlementMapper.findList(grantSettlement); + } + + @Override + public void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement) { + List list = wxOfflineActivityGrantSettlementMapper.findList(grantSettlement); + excelService.exportExcel(list, null, "活动商户结算", WxOfflineActivityGrantSettlement.class, "活动商户结算.xlsx", response, false); + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java new file mode 100644 index 000000000..574f51ed8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java @@ -0,0 +1,88 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxOfflineActivity; +import com.iformall.domain.po.WxOfflineActivityAwardsItem; +import com.iformall.domain.po.WxOfflineActivityItem; +import com.iformall.enums.EnumOfflineActivityAwardsRule; +import com.iformall.enums.EnumOfflineActivityType; +import com.iformall.service.WxOfflineActivityAwardsItemService; +import com.iformall.service.WxOfflineActivityItemService; +import com.iformall.mapper.WxOfflineActivityItemMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_item(线下活动项目)】的数据库操作Service实现 +* @createDate 2024-08-06 13:20:56 +*/ +@Service +public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemService{ + + @Autowired + WxOfflineActivityItemMapper wxOfflineActivityItemMapper; + + @Autowired + WxOfflineActivityAwardsItemService wxOfflineActivityAwardsItemService; + + @Override + public void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List activityItemList) { + WxOfflineActivityItem activityItemDel = new WxOfflineActivityItem(); + activityItemDel.updateTenantInfo(wxOfflineActivity); + activityItemDel.setActivityId(wxOfflineActivity.getId()); + wxOfflineActivityItemMapper.delete(activityItemDel); + + final IdWorker idWorker = IdWorker.get(); + + for (WxOfflineActivityItem activityItem : activityItemList) { + if(activityItem.getId() == null){ + activityItem.setId(idWorker.nextId()); + } + + activityItem.updateTenantInfo(wxOfflineActivity); + activityItem.setActivityId(wxOfflineActivity.getId()); + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + activityItem.setAwardsItemRule(EnumOfflineActivityAwardsRule.DEF.getCode()); + } + else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) { + activityItem.setLimitMoney(BigDecimal.ZERO); + activityItem.setAwardsItemPrice(BigDecimal.ZERO); + activityItem.setAwardsItemRule(EnumOfflineActivityAwardsRule.DEF.getCode()); + } + else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { + activityItem.setAwardsItemPrice(BigDecimal.ZERO); + activityItem.setAwardsItemCount(0); + } + if(activityItem.getCreateDate() == null){ + activityItem.setCreateDate(wxOfflineActivity.getUpdateDate()); + } + activityItem.setUpdateDate(wxOfflineActivity.getUpdateDate()); + wxOfflineActivityItemMapper.insert(activityItem); + + //处理奖项 + wxOfflineActivityAwardsItemService.saveOrUpdateFromActivityItem(activityItem,activityItem.getActivityAwardsItemList()); + } + } + + @Override + public List getActivityItemList(Long activityId, String tenantId) { + WxOfflineActivityItem activityItemQuery = new WxOfflineActivityItem(); + activityItemQuery.setActivityId(activityId); + activityItemQuery.setTenantId(tenantId); + List itemList = wxOfflineActivityItemMapper.findList(activityItemQuery); + for (WxOfflineActivityItem item : itemList) { + List activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); + item.setActivityAwardsItemList(activityAwardsItemList); + } + return itemList; + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityMerchantServiceImpl.java new file mode 100644 index 000000000..6c3bee21d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityMerchantServiceImpl.java @@ -0,0 +1,81 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxMerchant; +import com.iformall.domain.po.WxOfflineActivity; +import com.iformall.domain.po.WxOfflineActivityMerchant; +import com.iformall.enums.EnumOfflineActivityMerchantType; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.service.WxMerchantService; +import com.iformall.service.WxOfflineActivityMerchantService; +import com.iformall.mapper.WxOfflineActivityMerchantMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_merchant(线下活动商户)】的数据库操作Service实现 +* @createDate 2024-08-06 13:20:56 +*/ +@Service +public class WxOfflineActivityMerchantServiceImpl implements WxOfflineActivityMerchantService{ + + @Autowired + private WxOfflineActivityMerchantMapper wxOfflineActivityMerchantMapper; + + @Autowired + WxMerchantService wxMerchantService; + + @Override + public void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List activityMerchantList) { + WxOfflineActivityMerchant activityMerchantDel = new WxOfflineActivityMerchant(); + activityMerchantDel.updateTenantInfo(wxOfflineActivity); + activityMerchantDel.setActivityId(wxOfflineActivity.getId()); + wxOfflineActivityMerchantMapper.delete(activityMerchantDel); + + if(EnumOfflineActivityMerchantType.ALL.getCode().equals(wxOfflineActivity.getAllMerchant())){ + return; + } + for (WxOfflineActivityMerchant wxOfflineActivityMerchant : activityMerchantList) { + if(wxOfflineActivityMerchant.getId() == null){ + final IdWorker idWorker = IdWorker.get(); + wxOfflineActivityMerchant.setId(idWorker.nextId()); + } + + wxOfflineActivityMerchant.updateTenantInfo(wxOfflineActivity); + wxOfflineActivityMerchant.setActivityId(wxOfflineActivity.getId()); + if(EnumOfflineActivityMerchantType.ADD.getCode().equals(wxOfflineActivity.getAllMerchant())){ + wxOfflineActivityMerchant.setWhetherIn(EnumYesOrNo.YES.getCode()); + } + else if (EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(wxOfflineActivity.getAllMerchant())) { + wxOfflineActivityMerchant.setWhetherIn(EnumYesOrNo.NO.getCode()); + } + wxOfflineActivityMerchantMapper.insert(wxOfflineActivityMerchant); + } + } + + @Override + public List getActivityMerchantList(Long activityId, String tenantId) { + WxOfflineActivityMerchant activityMerchantQuery = new WxOfflineActivityMerchant(); + activityMerchantQuery.setActivityId(activityId); + activityMerchantQuery.setTenantId(tenantId); + List activityMerchantList = wxOfflineActivityMerchantMapper.findList(activityMerchantQuery); + + WxMerchant merchantQ = new WxMerchant(); + merchantQ.setTenantId(tenantId); + Map merchantMap = wxMerchantService.findMerchantMap(merchantQ); + + for (WxOfflineActivityMerchant wxOfflineActivityMerchant : activityMerchantList) { + wxOfflineActivityMerchant.setMerchant(merchantMap.get(wxOfflineActivityMerchant.getMerchantId())); + } + return activityMerchantList; + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java new file mode 100644 index 000000000..de2e4df9e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java @@ -0,0 +1,44 @@ +package com.iformall.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.iformall.domain.po.WxOfflineActivityGrantAward; +import com.iformall.domain.po.WxOfflineActivityRecordGrant; +import com.iformall.service.WxOfflineActivityRecordGrantService; +import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Service实现 +* @createDate 2024-08-09 00:13:44 +*/ +@Service +public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivityRecordGrantService{ + + @Autowired + private WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; + + @Override + public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + List recordGrantList = new ArrayList<>(); + wxOfflineActivityGrantAward.getRecordIds().forEach(recordId ->{ + WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant(); + recordGrant.updateTenantInfo(wxOfflineActivityGrantAward); + recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId()); + recordGrant.setRecordId(recordId); + recordGrant.setGrantId(wxOfflineActivityGrantAward.getId()); + + recordGrantList.add(recordGrant); + }); + + wxOfflineActivityRecordGrantMapper.insertList(recordGrantList); + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java new file mode 100644 index 000000000..c6ca2ad68 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java @@ -0,0 +1,260 @@ +package com.iformall.service.impl; + +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.OfflineActivityRecordStatistics; +import com.iformall.enums.EnumOfflineActivityRecordStatus; +import com.iformall.mapper.WxMerchantMapper; +import com.iformall.mapper.WxOfflineActivityGrantAwardMapper; +import com.iformall.service.ExcelService; +import com.iformall.service.MallUserInfoService; +import com.iformall.service.WxMerchantService; +import com.iformall.service.WxOfflineActivityRecordService; +import com.iformall.mapper.WxOfflineActivityRecordMapper; +import com.iformall.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.text.NumberFormat; +import java.util.*; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Service实现 +* @createDate 2024-08-09 00:13:44 +*/ +@Service +public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityRecordService{ + + @Autowired + private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; + + @Autowired + WxOfflineActivityGrantAwardMapper wxOfflineActivityGrantAwardMapper; + + @Autowired + WxMerchantMapper wxMerchantMapper; + @Autowired + WxMerchantService wxMerchantService; + @Autowired + MallUserInfoService mallUserInfoService; + + @Autowired + ExcelService excelService; + + @Override + public PageInfo listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) { + handlerQuery(record); + PageInfo recordPageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxOfflineActivityRecordMapper.findList(record)); + handlerRecordList(record,recordPageInfo.getList()); + return recordPageInfo; + } + + private void handlerQuery(WxOfflineActivityRecord record) { + //商户处理 + if (StringUtils.isNotBlank(record.getMerchantName())) { + WxMerchant merchant = new WxMerchant(); + merchant.updateTenantInfo(record); + merchant.setName(record.getMerchantName()); + List mids = wxMerchantMapper.findIdList(merchant); + if (null == mids || mids.size() <= 0 ) { + record.setId(-1L); + }else { + record.setMerchantIdList(mids); + } + } + //发奖处理(多对多关系) + WxOfflineActivityGrantAward awardQ = null; + if(StringUtils.isNotBlank(record.getSendByName())){ + MallUserInfo userInfo = new MallUserInfo(); + userInfo.updateTenantInfo(record); + userInfo.setUsername(record.getSendByName()); + List mids = mallUserInfoService.getUserIdList(userInfo); + if (null == mids || mids.size() <= 0 ) { + record.setId(-1L); + }else { + awardQ = new WxOfflineActivityGrantAward(); + awardQ.updateTenantInfo(record); + awardQ.setCreateByIds(mids); + } + } + if(record.getSendTimeBegin() != null || record.getSendTimeEnd() != null){ + if(awardQ == null){ + awardQ = new WxOfflineActivityGrantAward(); + awardQ.updateTenantInfo(record); + awardQ.setCreateDateBegin(record.getSendTimeBegin()); + awardQ.setCreateDateEnd(record.getSendTimeEnd()); + } + } + if(awardQ != null){ + List rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ); + if (null == rids || rids.size() <= 0 ) { + record.setId(-1L); + }else{ + record.setIds(rids); + } + } + } + + private void handlerRecordList(TenantEntity tenantEntity,List recordList) { + if (recordList == null || recordList.size() <= 0) { + return; + } + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(tenantEntity); + Map idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); + MallUserInfo userInfoQ = new MallUserInfo(); + userInfoQ.updateTenantInfo(tenantEntity); + Map userMap = mallUserInfoService.getUserMap(userInfoQ); + + for (WxOfflineActivityRecord record : recordList) { + record.setMerchantName(idAndNamesMap.get(record.getMerchantId())); + if(record.getAuditBy() != null){ + record.setAuditByName(userMap.get(record.getAuditBy()).getName()); + } + } + } + + @Override + public void saveOrUpdate(WxOfflineActivityRecord wxOfflineActivityRecord) { + if(wxOfflineActivityRecord.getMerchantId() != null){ + WxMerchant merchant = wxMerchantService.selectById(wxOfflineActivityRecord.getMerchantId()); + wxOfflineActivityRecord.setBusinessId(merchant.getBusinessId()); + } + Date now = new Date(); + if(wxOfflineActivityRecord.getId() == null){ + final IdWorker idWorker = IdWorker.get(); + wxOfflineActivityRecord.setId(idWorker.nextId()); + wxOfflineActivityRecord.setCreateDate(now); + wxOfflineActivityRecord.setUpdateDate(now); + wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); + wxOfflineActivityRecordMapper.insert(wxOfflineActivityRecord); + } + else{ + wxOfflineActivityRecord.setAuditRemark(""); + wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); + wxOfflineActivityRecord.setUpdateDate(now); + wxOfflineActivityRecordMapper.updateById(wxOfflineActivityRecord); + } + } + + @Override + public WxOfflineActivityRecord getById(Long id, String tenantId) { + return wxOfflineActivityRecordMapper.selectById(id,tenantId); + } + + @Override + public WxOfflineActivityRecord getInfoById(Long id, String tenantId) { + WxOfflineActivityRecord record = wxOfflineActivityRecordMapper.selectById(id, tenantId); + if(record != null){ + WxMerchant merchant = wxMerchantService.selectById(record.getMerchantId()); + record.setMerchantName(merchant.getName()); + } + return record; + } + + @Override + public Map getStatistics(WxOfflineActivityRecord wxOfflineActivityRecord) { + List auditStatusStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord); + Map result = new HashMap<>(); + Integer audting = 0, audi_success = 0, audt_fail = 0; + for(OfflineActivityRecordStatistics statistics : auditStatusStatistics){ + if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){ + audting = statistics.getCount(); + } else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) { + audi_success = statistics.getCount(); + } else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) { + audt_fail = statistics.getCount(); + } + } + result.put("audting",audting); + result.put("audi_success",audi_success); + result.put("audt_fail",audt_fail); + result.put("sum_count",audting+audi_success+audt_fail); + return result; + } + + @Override + public void auditRecord(WxOfflineActivityRecord record, Long userId) { + Date now = new Date(); + record.setUpdateDate(now); + record.setAuditTime(now); + record.setAuditBy(userId); + wxOfflineActivityRecordMapper.updateAuditStatus(record); + } + + @Override + public Map orderStatistics(TenantEntity tenantInfo) { + //最近30天 + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + String today = DateUtils.getTimeBefore(0, now); + + //最近30天数据 + WxOfflineActivityRecord recordQ = new WxOfflineActivityRecord(); + recordQ.updateTenantInfo(tenantInfo); + recordQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); + Integer monthCount = wxOfflineActivityRecordMapper.getCount(recordQ); + //一周前的昨天 + recordQ.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate)); + recordQ.setCreateDateEnd(DateUtils.stringToDate(weekStartdate)); + Integer yesWeekCount = wxOfflineActivityRecordMapper.getCount(recordQ); + //昨天的昨天 + recordQ.setCreateDateBegin(DateUtils.stringToDate(yesyesDate)); + recordQ.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate)); + Integer yesYesCount = wxOfflineActivityRecordMapper.getCount(recordQ); + //昨天 + recordQ.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate)); + recordQ.setCreateDateEnd(DateUtils.stringToDate(today)); + Integer yesCount = wxOfflineActivityRecordMapper.getCount(recordQ); + + Map result = new HashMap<>(); + result.put("monthCount",monthCount); + + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + String dayPercentage = "--"; + if (yesYesCount > 0) { + Integer count = yesCount - yesYesCount; + dayPercentage = nf.format(count.doubleValue() / new Double(yesYesCount).doubleValue()); + } + result.put("dayPercentage",dayPercentage); + String weekPercentage = "--"; + if (yesWeekCount > 0) { + Integer count = yesCount - yesWeekCount; + weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue()); + } + result.put("weekPercentage",weekPercentage); + return result; + } + + @Override + public void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord record) { + handlerQuery(record); + List list = wxOfflineActivityRecordMapper.findList(record); + handlerRecordList(record,list); + excelService.exportExcel(list, null, "活动订单列表", WxOfflineActivityRecord.class, "活动订单列表.xlsx", response, false); + } + + @Override + public Integer getWaitAudiCount(TenantEntity tenantInfo) { + WxOfflineActivityRecord record = new WxOfflineActivityRecord(); + record.updateTenantInfo(tenantInfo); + record.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); + return wxOfflineActivityRecordMapper.getCount(record); + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java new file mode 100644 index 000000000..9813fa9b7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java @@ -0,0 +1,164 @@ +package com.iformall.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.iformall.common.IdWorker; +import com.iformall.domain.po.*; +import com.iformall.domain.vo.OfflineActivityRecordStatistics; +import com.iformall.enums.EnumOfflineActivityMerchantType; +import com.iformall.enums.EnumOfflineActivityRecordStatus; +import com.iformall.enums.EnumOfflineActivityStatus; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.mapper.WxOfflineActivityGrantItemMapper; +import com.iformall.mapper.WxOfflineActivityMerchantMapper; +import com.iformall.mapper.WxOfflineActivityRecordMapper; +import com.iformall.service.WxOfflineActivityItemService; +import com.iformall.service.WxOfflineActivityMerchantService; +import com.iformall.service.WxOfflineActivityService; +import com.iformall.mapper.WxOfflineActivityMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity(线下活动)】的数据库操作Service实现 +* @createDate 2024-08-06 13:20:56 +*/ +@Service +public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ + + @Autowired + WxOfflineActivityMapper wxOfflineActivityMapper; + + @Autowired + WxOfflineActivityItemService wxOfflineActivityItemService; + @Autowired + WxOfflineActivityMerchantMapper wxOfflineActivityMerchantMapper; + @Autowired + WxOfflineActivityMerchantService wxOfflineActivityMerchantService; + @Autowired + WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; + @Autowired + WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; + + @Override + public PageInfo listAsPage(WxOfflineActivity record, Integer pageIndex, Integer pageSize) { + handlerQuery(record); + PageInfo activityPageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOfflineActivityMapper.findList(record)); + handlerReturnList(activityPageInfo.getList()); + return activityPageInfo; + } + + private void handlerQuery(WxOfflineActivity record) { + if (null != record.getStatus()) { + //已上架 + if(EnumOfflineActivityStatus.ON_LINE.getCode().equals(record.getStatus())){ + record.setValidStatus(EnumYesOrNo.NO.getCode()); + } + //已过期 + else if(EnumOfflineActivityStatus.EXPIRE.getCode().equals(record.getStatus())){ + record.setStatus(null); + record.setValidStatus(EnumYesOrNo.YES.getCode()); + } + } + } + + private void handlerReturnList(List list) { + if (null != list && !list.isEmpty()) { + Date now = new Date(); + for (WxOfflineActivity activity : list) { + if(now.after(activity.getEndTime())){ + activity.setStatus(EnumOfflineActivityStatus.EXPIRE.getCode()); + } + //参与订单数 + WxOfflineActivityRecord wxOfflineActivityRecord = new WxOfflineActivityRecord(); + wxOfflineActivityRecord.updateTenantInfo(activity); + wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime()); + wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime()); + if(EnumOfflineActivityMerchantType.ADD.getCode().equals(activity.getAllMerchant())){ + List merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); + wxOfflineActivityRecord.setMerchantIdList(merchantIds); + }else if(EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(activity.getAllMerchant())){ + List merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); + wxOfflineActivityRecord.setNotMerchantIdList(merchantIds); + } + List auditStatusStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord); + Integer audting = 0, audi_success = 0, audt_fail = 0; + for(OfflineActivityRecordStatistics statistics : auditStatusStatistics){ + if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){ + audting = statistics.getCount(); + } else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) { + audi_success = statistics.getCount(); + } else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) { + audt_fail = statistics.getCount(); + } + } + activity.setRecordCount(audting+audi_success+audt_fail); + activity.setWaitRecordCount(audting); + activity.setSuccessRecordCount(audi_success); + + //参与商户数 + activity.setMershantCount(wxOfflineActivityRecordMapper.getMerchantCount(wxOfflineActivityRecord)); + + //发放奖项数量 + WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); + grantItemQ.updateTenantInfo(activity); + grantItemQ.setActivityId(activity.getId()); + activity.setGrantItemCount(wxOfflineActivityGrantItemMapper.getSumAwardCount(grantItemQ)); + + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(WxOfflineActivity wxOfflineActivity) { + Date now = new Date(); + if(wxOfflineActivity.getId() == null){ + final IdWorker idWorker = IdWorker.get(); + wxOfflineActivity.setId(idWorker.nextId()); + wxOfflineActivity.setCreateDate(now); + wxOfflineActivity.setCreateDate(now); + wxOfflineActivity.setStatus(EnumOfflineActivityStatus.OFF_LINE.getCode()); + wxOfflineActivityMapper.insert(wxOfflineActivity); + } + else{ + wxOfflineActivity.setUpdateDate(now); + wxOfflineActivityMapper.updateById(wxOfflineActivity); + } + //处理活动项 + wxOfflineActivityItemService.saveOrUpdateFromActivity(wxOfflineActivity,wxOfflineActivity.getActivityItemList()); + //处理活动商户 + wxOfflineActivityMerchantService.saveOrUpdateFromActivity(wxOfflineActivity,wxOfflineActivity.getActivityMerchantList()); + } + + @Override + public void updateStatus(WxOfflineActivity wxOfflineActivity) { + wxOfflineActivityMapper.updateStatus(wxOfflineActivity); + } + + @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())){ + List activityMerchantList = wxOfflineActivityMerchantService.getActivityMerchantList(wxOfflineActivity.getId(),tenantId); + wxOfflineActivity.setActivityMerchantList(activityMerchantList); + } + return wxOfflineActivity; + } +} + + + + 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/WxOfflineActivityAwardsItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml new file mode 100644 index 000000000..89779a391 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + activity_item_id,`name`,grade, + min_amount,max_amount,cash_back_ratio,price, + money_rule,mall_share_rate,merchant_share_rate, + create_date,update_date + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `activity_item_id` = #{activityItemId} + + + + and `name` like concat('%', #{name},'%') + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + delete from wx_offline_activity_awards_item + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml new file mode 100644 index 000000000..406bc5e57 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + activity_id,order_money_sum,order_count, + cus_name,cus_phone,real_name, + real_card,sign_img,create_by, + create_date,update_date,lottery_num, + 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} + + + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml new file mode 100644 index 000000000..e1d55ecc4 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + grant_id,activity_id,activity_name, + activity_item_id,activity_item_name,activity_item_type, + award_itam_id,award_name,award_grade, + award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, + award_price,award_count,money_rule, + mall_share_rate,merchant_share_rate, + create_date,update_date + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `grant_id` = #{grantId} + + + + and `activity_id` = #{activityId} + + + and `activity_item_id` = #{activityItemId} + + + and `award_itam_id` = #{awardItamId} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + insert into wx_offline_activity_grant_item + (id, + grant_id,activity_id,activity_name, + activity_item_id,activity_item_name,activity_item_type, + award_itam_id,award_name,award_grade, + award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, + award_price,award_count,money_rule, + mall_share_rate,merchant_share_rate, + create_date,update_date) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, + #{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER}, + #{item.awardItamId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.awardGrade,jdbcType=INTEGER}, + #{item.awardMinAmount,jdbcType=DECIMAL},#{item.awardMaxAmount,jdbcType=DECIMAL},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL}, + #{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER}, + #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, + #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml new file mode 100644 index 000000000..dca024453 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + record_id,order_no,order_money, + merchant_id,activity_id,activity_item_id, + award_itam_id,grant_id,grant_price, + mall_share_rate,merchant_share_rate,order_ratio, + real_grant_price,real_mall_share_price,real_merchant_share_price, + create_date,update_date + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `record_id` = #{recordId} + + + and `order_no` like concat('%', #{orderNo},'%') + + + + and `merchant_id` = #{merchantId} + + + and `activity_id` = #{activityId} + + + and `activity_item_id` = #{activityItemId} + + + and `award_itam_id` = #{awardItamId} + + + and `grant_id` = #{grantId} + + + and `create_date` >= #{createDateBegin} + + + + and `create_date` <= #{createDateEnd} + + + and merchant_id in + + #{midItem} + + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + insert into wx_offline_activity_grant_settlement + (id, + record_id,order_no,order_money, + merchant_id,activity_id,activity_item_id, + award_itam_id,grant_id,grant_price, + mall_share_rate,merchant_share_rate,order_ratio, + real_grant_price,real_mall_share_price,real_merchant_share_price, + create_date,update_date) + values + + (#{item.id,jdbcType=BIGINT}, + #{item.recordId,jdbcType=BIGINT},#{item.orderNo,jdbcType=VARCHAR},#{item.orderMoney,jdbcType=DECIMAL}, + #{item.merchantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityItemId,jdbcType=BIGINT}, + #{item.awardItamId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantPrice,jdbcType=DECIMAL}, + #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},#{item.orderRatio,jdbcType=DECIMAL}, + #{item.realGrantPrice,jdbcType=DECIMAL},#{item.realMallSharePrice,jdbcType=DECIMAL},#{item.realMerchantSharePrice,jdbcType=DECIMAL}, + #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) + + + + + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml new file mode 100644 index 000000000..24d7fae53 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + activity_id,`type`,`name`, + limit_money,awards_item_price,awards_item_limit,awards_item_count, + awards_item_rule,create_date,update_date + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `activity_id` = #{activityId} + + + + and `name` like concat('%', #{name},'%') + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + delete from wx_offline_activity_item + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityMapper.xml new file mode 100644 index 000000000..235ea3f2d --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + `name`,start_time,end_time, + status,create_date,update_date, + all_merchant + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `start_time` >= #{begin} + + + + and `end_time` <= #{end} + + + + and `all_merchant` = #{allMerchant} + + + + + and end_time >= now() + + + + + and end_time <= now() + + + + and `name` like concat('%', #{name},'%') + + + + and `status` = #{status} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + update wx_offline_activity + set `status` = #{status}, + `update_date` = #{updateDate} + where id=#{id} + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityMerchantMapper.xml new file mode 100644 index 000000000..404943269 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityMerchantMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + activity_id,merchant_id,whether_in,create_date, + update_date + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `activity_id` = #{activityId} + + + + and `merchant_id` = #{merchantId} + + + + and `whether_in` = #{whetherIn} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + delete from wx_offline_activity_merchant + where `activity_id` = #{activityId} + + and `merchant_id` = #{merchantId} + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordGrantMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordGrantMapper.xml new file mode 100644 index 000000000..20a3c9a5c --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordGrantMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + tenant_id,parent_tenant_id,activity_id, + record_id,grant_id + + + + + + insert into wx_offline_activity_record_grant + (`activity_id`,`record_id`,`grant_id`) + values + + (#{item.activityId,jdbcType=BIGINT}, + #{item.recordId,jdbcType=BIGINT}, + #{item.grantId,jdbcType=BIGINT}) + + + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml new file mode 100644 index 000000000..cc83f9efa --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + order_no,order_money,cus_name, + real_cus_name,cus_phone,cus_address, + cus_card,lottery_num,lottery_count, + anniversary_lottery_num,create_by,merchant_id,business_id, + create_date,update_date,audit_remark, + audit_status,audit_by,audit_time + + + + where 1 = 1 + + + and `id` = #{id} + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + and `merchant_id` = #{merchantId} + + + and `business_id` = #{businessId} + + + + and `cus_name` like concat('%', #{cusName},'%') + + + + and `cus_phone` = #{cusPhone} + + + + and `order_no` like concat('%', #{orderNo},'%') + + + + + and `create_date` >= #{createDateBegin} + + + + and `create_date` <= #{createDateEnd} + + + + and `audit_time` >= #{auditTimeBegin} + + + + and `audit_time` <= #{auditTimeEnd} + + + + and `audit_status` = #{auditStatus} + + + + and merchant_id in + + #{midItem} + + + + + and merchant_id not in + + #{midItem} + + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + + + + + update wx_offline_activity_record + set `audit_status` = #{auditStatus}, + + + `lottery_num` = #{lotteryNum}, + + + `lottery_Count` = #{lotteryCount}, + + + `anniversary_lottery_num` = #{anniversaryLotteryNum}, + + + + `audit_remark` = #{auditRemark}, + + + `audit_time` = #{auditTime}, + + + `audit_by` = #{auditBy}, + + `update_date` = #{updateDate} + where id=#{id} + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + + + + + + where 1 = 1 + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + and `merchant_id` = #{merchantId} + + + and `business_id` = #{businessId} + + + and `cus_phone` = #{cusPhone} + + + + and `create_date` >= #{createDateBegin} + + + + and `create_date` <= #{createDateEnd} + + + + and `audit_status` = #{auditStatus} + + + + and merchant_id in + + #{midItem} + + + + + and merchant_id not in + + #{midItem} + + + + + + + +