| @@ -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<WxOfflineActivity> 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); | |||||
| } | |||||
| } | |||||
| @@ -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<String,Object> 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<WxOfflineActivityRecord> 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); | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityRecord> 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); | |||||
| } | |||||
| } | |||||
| @@ -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<String,Object> statisticsMap = wxOfflineActivityGrantAwardService.cusStatistics(getTenantInfo()); | |||||
| return new ResultData(statisticsMap); | |||||
| } | |||||
| @ApiOperation("发奖结算相关统计") | |||||
| @GetMapping("settlementStatistics") | |||||
| public ResultData settlementStatistics() { | |||||
| Map<String,Object> statisticsMap = wxOfflineActivityGrantSettlementService.settlementStatistics(getTenantInfo()); | |||||
| return new ResultData(statisticsMap); | |||||
| } | |||||
| @ApiOperation("订单相关统计") | |||||
| @GetMapping("recordStatistics") | |||||
| public ResultData recordStatistics() { | |||||
| Map<String,Object> 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<WxOfflineActivity> 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<OfflineActivitySettlement> 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<String,Object> 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<WxOfflineActivityGrantSettlement> 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); | |||||
| } | |||||
| } | |||||
| @@ -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`; | |||||
| @@ -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<WxOfflineActivityRecord> 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<String,Integer> statisticsMap = wxOfflineActivityRecordService.getStatistics(wxOfflineActivityRecord); | |||||
| return new ResultData(statisticsMap); | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityItem> activityItemList; | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityMerchant> 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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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<Long> createByName; | |||||
| @TableField(exist = false) | |||||
| private List<Long> 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<String> lotteryNumList; | |||||
| public List<String> getLotteryNumList() { | |||||
| if(StringUtils.isNotBlank(lotteryNum)){ | |||||
| try { | |||||
| List<String> 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<String> anniversaryLotteryNumList; | |||||
| public List<String> getAnniversaryLotteryNumList() { | |||||
| if(StringUtils.isNotBlank(anniversaryLotteryNum)){ | |||||
| try { | |||||
| List<String> 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<Long> recordIds; | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityRecord> recordList; | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityItem> activityItemList; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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<Long> 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; | |||||
| } | |||||
| @@ -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<WxOfflineActivityAwardsItem> activityAwardsItemList; | |||||
| /** | |||||
| * 是否满足活动条件 | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private Boolean isMeet; | |||||
| /** | |||||
| * 实际获得奖项限制(为0时无限制) | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private Integer realAwardsItemLimit; | |||||
| /** | |||||
| * 发放奖项 | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityGrantItem> activityGrantItemList; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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<String> lotteryNumList; | |||||
| public List<String> getLotteryNumList() { | |||||
| if(StringUtils.isNotBlank(lotteryNum)){ | |||||
| try { | |||||
| List<String> 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<Long> merchantIdList; | |||||
| @TableField(exist = false) | |||||
| private List<Long> 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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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<Long> 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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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, Long> { | |||||
| WxOfflineActivityAwardsItem selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | |||||
| List<WxOfflineActivityAwardsItem> findList(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem); | |||||
| Integer itemCount(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem); | |||||
| void delete(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem); | |||||
| } | |||||
| @@ -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<WxOfflineActivityGrantAward, Long> { | |||||
| Integer getCusCount(WxOfflineActivityGrantAward grantAwardQ); | |||||
| List<Long> getRecordIdList(WxOfflineActivityGrantAward grantAwardQ); | |||||
| WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | |||||
| List<WxOfflineActivityGrantAward> findList(WxOfflineActivityGrantAward grantAwardQ); | |||||
| } | |||||
| @@ -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<WxOfflineActivityGrantItem, Long> { | |||||
| void insertList(@Param("grantItemList")List<WxOfflineActivityGrantItem> grantItemList); | |||||
| Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ); | |||||
| List<WxOfflineActivityGrantItem> findList(WxOfflineActivityGrantItem grantItemQ); | |||||
| } | |||||
| @@ -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<WxOfflineActivityGrantSettlement, Long> { | |||||
| void insertList(@Param("settlementList")List<WxOfflineActivityGrantSettlement> settlementList); | |||||
| OfflineActivitySettlementStatistics settlementStatistics(WxOfflineActivityGrantSettlement settlement); | |||||
| List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement settlement); | |||||
| List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement); | |||||
| } | |||||
| @@ -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, Long> { | |||||
| WxOfflineActivityItem selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | |||||
| List<WxOfflineActivityItem> findList(WxOfflineActivityItem wxOfflineActivityItem); | |||||
| List<Long> findIds(WxOfflineActivityItem wxOfflineActivityItem); | |||||
| void delete(WxOfflineActivityItem wxOfflineActivityItem); | |||||
| } | |||||
| @@ -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, Long> { | |||||
| WxOfflineActivity selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | |||||
| List<WxOfflineActivity> findList(WxOfflineActivity wxOfflineActivity); | |||||
| void updateStatus(WxOfflineActivity wxOfflineActivity); | |||||
| List<Long> findIds(WxOfflineActivity wxOfflineActivity); | |||||
| } | |||||
| @@ -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<WxOfflineActivityMerchant, Long> { | |||||
| List<Long> getMerchantIdList(@Param("activityId")Long activityId, @Param("tenantId")String tenantId); | |||||
| List<WxOfflineActivityMerchant> findList(WxOfflineActivityMerchant wxOfflineActivityMerchant); | |||||
| void delete(WxOfflineActivityMerchant wxOfflineActivityMerchant); | |||||
| } | |||||
| @@ -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<WxOfflineActivityRecordGrant, Long> { | |||||
| Integer selectGrantCount(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); | |||||
| void insertList(@Param("recordGrantList")List<WxOfflineActivityRecordGrant> recordGrantList); | |||||
| Long selectGrantId(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); | |||||
| } | |||||
| @@ -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<WxOfflineActivityRecord, Long> { | |||||
| List<WxOfflineActivityRecord> findList(WxOfflineActivityRecord record); | |||||
| WxOfflineActivityRecord selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | |||||
| List<OfflineActivityRecordStatistics> auditStatusStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| void updateAuditStatus(WxOfflineActivityRecord record); | |||||
| WxOfflineActivityRecord selectLimitOne(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| Integer getCount(WxOfflineActivityRecord recordQ); | |||||
| Integer getMerchantCount(WxOfflineActivityRecord recordQ); | |||||
| List<WxOfflineActivityRecord> findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId); | |||||
| } | |||||
| @@ -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<WxOfflineActivityAwardsItem> activityAwardsItemList); | |||||
| List<WxOfflineActivityAwardsItem> getActivityAwardsItemList(Long activityItemId, String tenantId); | |||||
| } | |||||
| @@ -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<String, Object> getRecordStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| List<WxOfflineActivityRecord> getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| Map<String, Object> cusStatistics(TenantEntity tenantInfo); | |||||
| void recordExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| WxOfflineActivityGrantAward grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity); | |||||
| } | |||||
| @@ -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); | |||||
| } | |||||
| @@ -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<String, Object> settlementStatistics(TenantEntity tenantInfo); | |||||
| PageInfo<WxOfflineActivity> activityListAsPage(WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize); | |||||
| List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement grantSettlement); | |||||
| Map<String, Object> merchantSettlementStatistics(OfflineActivitySettlement grantSettlement); | |||||
| List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement grantSettlement); | |||||
| void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement); | |||||
| } | |||||
| @@ -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<WxOfflineActivityItem> activityItemList); | |||||
| List<WxOfflineActivityItem> getActivityItemList(Long activityId, String tenantId); | |||||
| } | |||||
| @@ -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<WxOfflineActivityMerchant> activityMerchantList); | |||||
| List<WxOfflineActivityMerchant> getActivityMerchantList(Long activityId, String tenantId); | |||||
| } | |||||
| @@ -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); | |||||
| } | |||||
| @@ -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<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize); | |||||
| void saveOrUpdate(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| WxOfflineActivityRecord getById(Long id, String tenantId); | |||||
| WxOfflineActivityRecord getInfoById(Long id, String tenantId); | |||||
| Map<String, Integer> getStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId); | |||||
| Map<String, Object> orderStatistics(TenantEntity tenantInfo); | |||||
| void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| Integer getWaitAudiCount(TenantEntity tenantInfo); | |||||
| } | |||||
| @@ -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<WxOfflineActivity> listAsPage(WxOfflineActivity record, Integer pageIndex, Integer pageSize); | |||||
| void saveOrUpdate(WxOfflineActivity wxOfflineActivity); | |||||
| void updateStatus(WxOfflineActivity wxOfflineActivity); | |||||
| WxOfflineActivity getInfoById(Long id, String tenantId); | |||||
| } | |||||
| @@ -451,7 +451,7 @@ public class WxGameServiceImpl implements WxGameService { | |||||
| List<Object> couponIdsList = wxGame.getCouponIdsList(); | List<Object> couponIdsList = wxGame.getCouponIdsList(); | ||||
| int x = (int)(Math.random()*100+1); | int x = (int)(Math.random()*100+1); | ||||
| int y = 0; | int y = 0; | ||||
| if(couponIdsList != null || couponIdsList.size() > 0){ | |||||
| if(couponIdsList != null && !couponIdsList.isEmpty()){ | |||||
| for (Object a:couponIdsList) { | for (Object a:couponIdsList) { | ||||
| int weight = 0; | int weight = 0; | ||||
| if(a instanceof WxCouponChannelVo){ | if(a instanceof WxCouponChannelVo){ | ||||
| @@ -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<WxOfflineActivityAwardsItem> 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<WxOfflineActivityAwardsItem> getActivityAwardsItemList(Long activityItemId, String tenantId) { | |||||
| WxOfflineActivityAwardsItem activityAwardsItemQuery = new WxOfflineActivityAwardsItem(); | |||||
| activityAwardsItemQuery.setActivityItemId(activityItemId); | |||||
| activityAwardsItemQuery.setTenantId(tenantId); | |||||
| List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemMapper.findList(activityAwardsItemQuery); | |||||
| return activityAwardsItemList; | |||||
| } | |||||
| } | |||||
| @@ -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<String, Object> getRecordStatistics(WxOfflineActivityRecord wxOfflineActivityRecord) { | |||||
| handlerRecordQuery(wxOfflineActivityRecord); | |||||
| WxOfflineActivityRecord limitOne = wxOfflineActivityRecordMapper.selectLimitOne(wxOfflineActivityRecord); | |||||
| Map<String, Object> 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<OfflineActivityRecordStatistics> 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<WxOfflineActivityRecord> getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord) { | |||||
| handlerRecordQuery(wxOfflineActivityRecord); | |||||
| List<WxOfflineActivityRecord> 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<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); | |||||
| wxOfflineActivityRecord.setMerchantIdList(merchantIds); | |||||
| }else if(EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(activity.getAllMerchant())){ | |||||
| List<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); | |||||
| wxOfflineActivityRecord.setNotMerchantIdList(merchantIds); | |||||
| } | |||||
| } | |||||
| private void handlerRecordList(WxOfflineActivityRecord wxOfflineActivityRecord, List<WxOfflineActivityRecord> recordList) { | |||||
| if (recordList == null || recordList.isEmpty()) { | |||||
| return; | |||||
| } | |||||
| WxMerchant merchantQ = new WxMerchant(); | |||||
| merchantQ.updateTenantInfo(wxOfflineActivityRecord); | |||||
| Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); | |||||
| MallUserInfo userInfoQ = new MallUserInfo(); | |||||
| userInfoQ.updateTenantInfo(wxOfflineActivityRecord); | |||||
| Map<Long, MallUserInfo> 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<WxOfflineActivityItem> 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<WxOfflineActivityAwardsItem> 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<WxOfflineActivityRecord> 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<String> lotteryNumList = new ArrayList<>(); | |||||
| List<String> 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<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||||
| Map<Long, WxOfflineActivityItem> 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<WxOfflineActivityGrantItem> 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<Long, WxOfflineActivityAwardsItem> 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<String, Object> 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<String, Object> 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<WxOfflineActivityRecord> 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<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId()); | |||||
| grantAward.setActivityItemList(activityItemList); | |||||
| //获取实际获得奖项 | |||||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | |||||
| grantItemQ.updateTenantInfo(grantAward); | |||||
| grantItemQ.setGrantId(grantId); | |||||
| List<WxOfflineActivityGrantItem> grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | |||||
| Map<Long, List<WxOfflineActivityGrantItem>> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); | |||||
| for (WxOfflineActivityItem activityItem : grantAward.getActivityItemList()) { | |||||
| List<WxOfflineActivityGrantItem> 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<ExcelExportEntity> headList = getActivityGrantExportHead(activity); | |||||
| List<Map<String,Object>> activityGrantObjectList = new ArrayList<>(); | |||||
| WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | |||||
| grantAwardQ.updateTenantInfo(wxOfflineActivity); | |||||
| grantAwardQ.setActivityId(wxOfflineActivity.getId()); | |||||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | |||||
| if(grantAwardList != null){ | |||||
| WxMerchant merchantQ = new WxMerchant(); | |||||
| merchantQ.updateTenantInfo(wxOfflineActivity); | |||||
| Map<Long, String> merchantMap = wxMerchantService.getIdAndNamesMap(merchantQ); | |||||
| MallUserInfo userInfoQ = new MallUserInfo(); | |||||
| userInfoQ.updateTenantInfo(wxOfflineActivity); | |||||
| Map<Long, MallUserInfo> userMap = mallUserInfoService.getUserMap(userInfoQ); | |||||
| // | |||||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | |||||
| grantItemQ.updateTenantInfo(wxOfflineActivity); | |||||
| grantItemQ.setActivityId(wxOfflineActivity.getId()); | |||||
| List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | |||||
| Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId)); | |||||
| for (WxOfflineActivityGrantAward grantAward : grantAwardList) { | |||||
| List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findGrantList(grantAward.getId(),grantAward.getTenantId()); | |||||
| List<WxOfflineActivityGrantItem> grantItemList = grantItemMap.get(grantAward.getId()); | |||||
| Map<String,Object> activityGrantObject = new HashMap<>(); | |||||
| activityGrantObject.put("activityName",activity.getName()); | |||||
| List<String> 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<Long, List<WxOfflineActivityGrantItem>> granActivityItemMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); | |||||
| for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) { | |||||
| List<WxOfflineActivityGrantItem> granActivityItemList = granActivityItemMap.get(activityItem.getId()); | |||||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | |||||
| Map<Long, WxOfflineActivityGrantItem> 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<ExcelExportEntity> getActivityGrantExportHead(WxOfflineActivity activity){ | |||||
| List<ExcelExportEntity> 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; | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityGrantItem> 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); | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>(); | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| Date now = new Date(); | |||||
| //获取订单占比(占比最少的订单用减法,尽量减少误差) | |||||
| List<WxOfflineActivityRecord> 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<size; i++){ | |||||
| WxOfflineActivityRecord record = recordDescList.get(i); | |||||
| BigDecimal orderRatio = record.getOrderMoney() | |||||
| .divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP) | |||||
| .multiply(new BigDecimal(100)); | |||||
| record.setOrderRatio(orderRatio); | |||||
| lastRatio = lastRatio.subtract(orderRatio); | |||||
| } | |||||
| recordDescList.get(size).setOrderRatio(lastRatio); | |||||
| for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||||
| if(activityItem.getActivityGrantItemList() == null){ | |||||
| continue; | |||||
| } | |||||
| for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | |||||
| List<WxOfflineActivityGrantSettlement> 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<String, Object> 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<String, Object> 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<WxOfflineActivity> activityListAsPage(WxOfflineActivity activity, Integer pageNum, Integer pageSize) { | |||||
| handlerQuery(activity); | |||||
| PageInfo<WxOfflineActivity> 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<WxOfflineActivity> 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<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement record) { | |||||
| if (StringUtils.isNotBlank(record.getMerchantName())) { | |||||
| WxMerchant merchant = new WxMerchant(); | |||||
| merchant.updateTenantInfo(record); | |||||
| merchant.setName(record.getMerchantName()); | |||||
| List<Long> mids = wxMerchantMapper.findIdList(merchant); | |||||
| if (null == mids || mids.size() <= 0 ) { | |||||
| record.setId(-1L); | |||||
| }else { | |||||
| record.setMerchantIdList(mids); | |||||
| } | |||||
| } | |||||
| List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record); | |||||
| if (activitySettlementList != null && !activitySettlementList.isEmpty()) { | |||||
| WxMerchant merchantQ = new WxMerchant(); | |||||
| merchantQ.updateTenantInfo(record); | |||||
| Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); | |||||
| for (OfflineActivitySettlement activitySettlement : activitySettlementList) { | |||||
| activitySettlement.setMerchantName(idAndNamesMap.get(activitySettlement.getMerchantId())); | |||||
| } | |||||
| } | |||||
| return activitySettlementList; | |||||
| } | |||||
| @Override | |||||
| public Map<String, Object> merchantSettlementStatistics(OfflineActivitySettlement grantSettlement) { | |||||
| Map<String, Object> 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<OfflineActivitySettlement> 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<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement grantSettlement) { | |||||
| return wxOfflineActivityGrantSettlementMapper.findList(grantSettlement); | |||||
| } | |||||
| @Override | |||||
| public void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement) { | |||||
| List<WxOfflineActivityGrantSettlement> list = wxOfflineActivityGrantSettlementMapper.findList(grantSettlement); | |||||
| excelService.exportExcel(list, null, "活动商户结算", WxOfflineActivityGrantSettlement.class, "活动商户结算.xlsx", response, false); | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityItem> 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<WxOfflineActivityItem> getActivityItemList(Long activityId, String tenantId) { | |||||
| WxOfflineActivityItem activityItemQuery = new WxOfflineActivityItem(); | |||||
| activityItemQuery.setActivityId(activityId); | |||||
| activityItemQuery.setTenantId(tenantId); | |||||
| List<WxOfflineActivityItem> itemList = wxOfflineActivityItemMapper.findList(activityItemQuery); | |||||
| for (WxOfflineActivityItem item : itemList) { | |||||
| List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); | |||||
| item.setActivityAwardsItemList(activityAwardsItemList); | |||||
| } | |||||
| return itemList; | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityMerchant> 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<WxOfflineActivityMerchant> getActivityMerchantList(Long activityId, String tenantId) { | |||||
| WxOfflineActivityMerchant activityMerchantQuery = new WxOfflineActivityMerchant(); | |||||
| activityMerchantQuery.setActivityId(activityId); | |||||
| activityMerchantQuery.setTenantId(tenantId); | |||||
| List<WxOfflineActivityMerchant> activityMerchantList = wxOfflineActivityMerchantMapper.findList(activityMerchantQuery); | |||||
| WxMerchant merchantQ = new WxMerchant(); | |||||
| merchantQ.setTenantId(tenantId); | |||||
| Map<Long, WxMerchant> merchantMap = wxMerchantService.findMerchantMap(merchantQ); | |||||
| for (WxOfflineActivityMerchant wxOfflineActivityMerchant : activityMerchantList) { | |||||
| wxOfflineActivityMerchant.setMerchant(merchantMap.get(wxOfflineActivityMerchant.getMerchantId())); | |||||
| } | |||||
| return activityMerchantList; | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityRecordGrant> 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); | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) { | |||||
| handlerQuery(record); | |||||
| PageInfo<WxOfflineActivityRecord> 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<Long> 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<Long> 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<Long> rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ); | |||||
| if (null == rids || rids.size() <= 0 ) { | |||||
| record.setId(-1L); | |||||
| }else{ | |||||
| record.setIds(rids); | |||||
| } | |||||
| } | |||||
| } | |||||
| private void handlerRecordList(TenantEntity tenantEntity,List<WxOfflineActivityRecord> recordList) { | |||||
| if (recordList == null || recordList.size() <= 0) { | |||||
| return; | |||||
| } | |||||
| WxMerchant merchantQ = new WxMerchant(); | |||||
| merchantQ.updateTenantInfo(tenantEntity); | |||||
| Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); | |||||
| MallUserInfo userInfoQ = new MallUserInfo(); | |||||
| userInfoQ.updateTenantInfo(tenantEntity); | |||||
| Map<Long, MallUserInfo> 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<String, Integer> getStatistics(WxOfflineActivityRecord wxOfflineActivityRecord) { | |||||
| List<OfflineActivityRecordStatistics> auditStatusStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord); | |||||
| Map<String, Integer> 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<String, Object> 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<String, Object> 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<WxOfflineActivityRecord> 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); | |||||
| } | |||||
| } | |||||
| @@ -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<WxOfflineActivity> listAsPage(WxOfflineActivity record, Integer pageIndex, Integer pageSize) { | |||||
| handlerQuery(record); | |||||
| PageInfo<WxOfflineActivity> 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<WxOfflineActivity> 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<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); | |||||
| wxOfflineActivityRecord.setMerchantIdList(merchantIds); | |||||
| }else if(EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(activity.getAllMerchant())){ | |||||
| List<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId()); | |||||
| wxOfflineActivityRecord.setNotMerchantIdList(merchantIds); | |||||
| } | |||||
| List<OfflineActivityRecordStatistics> 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<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(wxOfflineActivity.getId(),tenantId); | |||||
| wxOfflineActivity.setActivityItemList(activityItemList); | |||||
| if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(wxOfflineActivity.getAllMerchant())){ | |||||
| List<WxOfflineActivityMerchant> activityMerchantList = wxOfflineActivityMerchantService.getActivityMerchantList(wxOfflineActivity.getId(),tenantId); | |||||
| wxOfflineActivity.setActivityMerchantList(activityMerchantList); | |||||
| } | |||||
| return wxOfflineActivity; | |||||
| } | |||||
| } | |||||
| @@ -82,4 +82,18 @@ public class DownFileUtil { | |||||
| return bos.toByteArray(); | 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); | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,82 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityAwardsItemMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityAwardsItem"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||||
| <result property="name" column="name" jdbcType="VARCHAR"/> | |||||
| <result property="grade" column="grade" jdbcType="INTEGER"/> | |||||
| <result property="minAmount" column="min_amount" jdbcType="DECIMAL"/> | |||||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | |||||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | |||||
| <result property="price" column="price" jdbcType="DECIMAL"/> | |||||
| <result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/> | |||||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | |||||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| 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 | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != activityItemId "> | |||||
| and `activity_item_id` = #{activityItemId} | |||||
| </if> | |||||
| <if test=" null != name "> | |||||
| and `name` like concat('%', #{name},'%') | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_awards_item where id = #{id} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsItem" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_awards_item | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="itemCount" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsItem" resultType="Integer"> | |||||
| select count(1) from wx_offline_activity_awards_item where `activity_item_id` = #{activityItemId} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsItem"> | |||||
| delete from wx_offline_activity_awards_item | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </delete> | |||||
| </mapper> | |||||
| @@ -0,0 +1,127 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityGrantAwardMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantAward"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||||
| <result property="orderMoneySum" column="order_money_sum" jdbcType="DECIMAL"/> | |||||
| <result property="orderCount" column="order_count" jdbcType="INTEGER"/> | |||||
| <result property="cusName" column="cus_name" jdbcType="VARCHAR"/> | |||||
| <result property="cusPhone" column="cus_phone" jdbcType="VARCHAR"/> | |||||
| <result property="realName" column="real_name" jdbcType="VARCHAR"/> | |||||
| <result property="realCard" column="real_card" jdbcType="VARCHAR"/> | |||||
| <result property="signImg" column="sign_img" jdbcType="VARCHAR"/> | |||||
| <result property="createBy" column="create_by" jdbcType="BIGINT"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/> | |||||
| <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | |||||
| <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| 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 | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != activityId"> | |||||
| and `activity_id` = #{activityId} | |||||
| </if> | |||||
| <if test=" null != cusName and cusName != '' "> | |||||
| and `cus_name` like concat('%', #{cusName},'%') | |||||
| </if> | |||||
| <if test=" null != cusPhone and cusPhone != '' "> | |||||
| and `cus_phone` = #{cusPhone} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_grant_award | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="getCusCount" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Integer"> | |||||
| SELECT COUNT(DISTINCT cus_phone) FROM wx_offline_activity_grant_award | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != createDateBegin"> | |||||
| and `create_date` >= #{createDateBegin} | |||||
| </if> | |||||
| <if test=" null != createDateEnd"> | |||||
| and `create_date` <= #{createDateEnd} | |||||
| </if> | |||||
| </select> | |||||
| <select id="getRecordIdList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Long"> | |||||
| SELECT DISTINCT rg.record_id | |||||
| from wx_offline_activity_record_grant rg | |||||
| left join wx_offline_activity_grant_award ga on ga.id = rg.grant_id | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and ga.`tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and ga.`parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != createDateBegin"> | |||||
| and ga.`create_date` >= #{createDateBegin} | |||||
| </if> | |||||
| <if test=" null != createDateEnd"> | |||||
| and ga.`create_date` <= #{createDateEnd} | |||||
| </if> | |||||
| <if test=" null != createByIds "> | |||||
| and ga.create_by in | |||||
| <foreach collection="createByIds" index="index" item="sendItem" open="(" separator="," close=")"> | |||||
| #{sendItem} | |||||
| </foreach> | |||||
| </if> | |||||
| </select> | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_grant_award where id = #{id} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,123 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityGrantItemMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantItem"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||||
| <result property="activityName" column="activity_name" jdbcType="VARCHAR"/> | |||||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||||
| <result property="activityItemName" column="activity_item_name" jdbcType="INTEGER"/> | |||||
| <result property="activityItemType" column="activity_item_type" jdbcType="SMALLINT"/> | |||||
| <result property="awardItamId" column="award_itam_id" jdbcType="BIGINT"/> | |||||
| <result property="awardName" column="award_name" jdbcType="VARCHAR"/> | |||||
| <result property="awardGrade" column="award_grade" jdbcType="INTEGER"/> | |||||
| <result property="awardMinAmount" column="award_min_amount" jdbcType="DECIMAL"/> | |||||
| <result property="awardMaxAmount" column="award_max_amount" jdbcType="DECIMAL"/> | |||||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="INTEGER"/> | |||||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | |||||
| <result property="awardPrice" column="award_price" jdbcType="DECIMAL"/> | |||||
| <result property="awardCount" column="award_count" jdbcType="INTEGER"/> | |||||
| <result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/> | |||||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | |||||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| 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 | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != grantId"> | |||||
| and `grant_id` = #{grantId} | |||||
| </if> | |||||
| <if test=" null != activityId"> | |||||
| and `activity_id` = #{activityId} | |||||
| </if> | |||||
| <if test=" null != activityItemId"> | |||||
| and `activity_item_id` = #{activityItemId} | |||||
| </if> | |||||
| <if test=" null != awardItamId"> | |||||
| and `award_itam_id` = #{awardItamId} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantItem" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_grant_item | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <insert id="insertList" parameterType="java.util.List"> | |||||
| 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 | |||||
| <foreach collection="grantItemList" item="item" index="index" separator=","> | |||||
| (#{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}) | |||||
| </foreach> | |||||
| </insert> | |||||
| <select id="getSumAwardCount" parameterType="com.iformall.domain.po.WxOfflineActivityGrantItem" resultType="Integer"> | |||||
| SELECT COUNT(1) FROM wx_offline_activity_grant_item | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and tenant_id = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and parent_tenant_id = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != activityId "> | |||||
| and activity_id = #{activityId} | |||||
| </if> | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,188 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityGrantSettlementMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantSettlement"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="recordId" column="record_id" jdbcType="BIGINT"/> | |||||
| <result property="orderNo" column="order_no" jdbcType="VARCHAR"/> | |||||
| <result property="orderMoney" column="order_money" jdbcType="DECIMAL"/> | |||||
| <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/> | |||||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||||
| <result property="awardItamId" column="award_itam_id" jdbcType="BIGINT"/> | |||||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||||
| <result property="grantPrice" column="grant_price" jdbcType="DECIMAL"/> | |||||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | |||||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | |||||
| <result property="orderRatio" column="order_ratio" jdbcType="DECIMAL"/> | |||||
| <result property="realGrantPrice" column="real_grant_price" jdbcType="DECIMAL"/> | |||||
| <result property="realMallSharePrice" column="real_mall_share_price" jdbcType="DECIMAL"/> | |||||
| <result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="DECIMAL"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| 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 | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != recordId "> | |||||
| and `record_id` = #{recordId} | |||||
| </if> | |||||
| <if test=" null != orderNo and orderNo != '' "> | |||||
| and `order_no` like concat('%', #{orderNo},'%') | |||||
| </if> | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| <if test=" null != activityId "> | |||||
| and `activity_id` = #{activityId} | |||||
| </if> | |||||
| <if test=" null != activityItemId "> | |||||
| and `activity_item_id` = #{activityItemId} | |||||
| </if> | |||||
| <if test=" null != awardItamId "> | |||||
| and `award_itam_id` = #{awardItamId} | |||||
| </if> | |||||
| <if test=" null != grantId "> | |||||
| and `grant_id` = #{grantId} | |||||
| </if> | |||||
| <if test=" null != createDateBegin"> | |||||
| and `create_date` >= #{createDateBegin} | |||||
| </if> | |||||
| <if test=" null != createDateEnd"> | |||||
| and `create_date` <= #{createDateEnd} | |||||
| </if> | |||||
| <if test=" null != merchantIdList "> | |||||
| and merchant_id in | |||||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||||
| #{midItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantSettlement" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_grant_settlement | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <insert id="insertList" parameterType="java.util.List"> | |||||
| 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 | |||||
| <foreach collection="settlementList" item="item" index="index" separator=","> | |||||
| (#{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}) | |||||
| </foreach> | |||||
| </insert> | |||||
| <select id="settlementStatistics" parameterType="com.iformall.domain.po.WxOfflineActivityGrantSettlement" resultType="com.iformall.domain.vo.OfflineActivitySettlementStatistics"> | |||||
| SELECT IFNULL(sum(real_grant_price),0) as 'sumGrantPrice', | |||||
| count(DISTINCT record_id) as 'recordCount', | |||||
| count(DISTINCT merchant_id) as 'merchantCount', | |||||
| IFNULL(sum(real_mall_share_price),0) as 'sumMallPrice', | |||||
| IFNULL(sum(real_merchant_share_price),0) as 'sumMerchantPrice' | |||||
| FROM wx_offline_activity_grant_settlement | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != activityId"> | |||||
| and `activity_id` = #{activityId} | |||||
| </if> | |||||
| <if test=" null != createDateBegin"> | |||||
| and `create_date` >= #{createDateBegin} | |||||
| </if> | |||||
| <if test=" null != createDateEnd"> | |||||
| and `create_date` <= #{createDateEnd} | |||||
| </if> | |||||
| </select> | |||||
| <select id="getActivitySettlement" parameterType="com.iformall.domain.vo.OfflineActivitySettlement" resultType="com.iformall.domain.vo.OfflineActivitySettlement"> | |||||
| SELECT merchant_id as 'merchantId', | |||||
| activity_id as 'activityId', | |||||
| count(record_id) as 'recordCount', | |||||
| IFNULL(sum(order_money),0) as 'sumOrderMoney', | |||||
| IFNULL(sum(real_grant_price),0) as 'sumGrantPrice', | |||||
| IFNULL(sum(real_mall_share_price),0) as 'sumMallPrice', | |||||
| IFNULL(sum(real_merchant_share_price),0) as 'sumMerchantPrice' | |||||
| FROM wx_offline_activity_grant_settlement | |||||
| where `activity_id` = #{activityId} | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| <if test=" null != merchantIdList "> | |||||
| and merchant_id in | |||||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||||
| #{midItem} | |||||
| </foreach> | |||||
| </if> | |||||
| group by merchant_id | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,80 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityItemMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityItem"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||||
| <result property="type" column="type" jdbcType="SMALLINT"/> | |||||
| <result property="name" column="name" jdbcType="VARCHAR"/> | |||||
| <result property="limitMoney" column="limit_money" jdbcType="DECIMAL"/> | |||||
| <result property="awardsItemPrice" column="awards_item_price" jdbcType="DECIMAL"/> | |||||
| <result property="awardsItemLimit" column="awards_item_limit" jdbcType="INTEGER"/> | |||||
| <result property="awardsItemCount" column="awards_item_count" jdbcType="INTEGER"/> | |||||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| 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 | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != activityId "> | |||||
| and `activity_id` = #{activityId} | |||||
| </if> | |||||
| <if test=" null != name and name != '' "> | |||||
| and `name` like concat('%', #{name},'%') | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_item where id = #{id} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityItem" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_item | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="findIds" parameterType="com.iformall.domain.po.WxOfflineActivityItem" resultType="Long"> | |||||
| select id from wx_offline_activity_item | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityItem"> | |||||
| delete from wx_offline_activity_item | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </delete> | |||||
| </mapper> | |||||
| @@ -0,0 +1,107 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivity"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="name" column="name" jdbcType="VARCHAR"/> | |||||
| <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/> | |||||
| <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/> | |||||
| <result property="status" column="status" jdbcType="SMALLINT"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="allMerchant" column="all_merchant" jdbcType="SMALLINT"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| id,tenant_id,parent_tenant_id, | |||||
| `name`,start_time,end_time, | |||||
| status,create_date,update_date, | |||||
| all_merchant | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != begin"> | |||||
| and `start_time` >= #{begin} | |||||
| </if> | |||||
| <if test=" null != end"> | |||||
| and `end_time` <= #{end} | |||||
| </if> | |||||
| <if test=" null != allMerchant"> | |||||
| and `all_merchant` = #{allMerchant} | |||||
| </if> | |||||
| <!-- 未过期 --> | |||||
| <if test=" 0 == validStatus"> | |||||
| and end_time >= now() | |||||
| </if> | |||||
| <!-- 已过期 --> | |||||
| <if test=" 1 == validStatus"> | |||||
| and end_time <= now() | |||||
| </if> | |||||
| <if test=" null != name and name != '' "> | |||||
| and `name` like concat('%', #{name},'%') | |||||
| </if> | |||||
| <if test=" null != status "> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity where id = #{id} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivity" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="findIds" parameterType="com.iformall.domain.po.WxOfflineActivity" resultType="Long"> | |||||
| select id from wx_offline_activity | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <update id="updateStatus" parameterType="com.iformall.domain.po.WxOfflineActivity"> | |||||
| update wx_offline_activity | |||||
| set `status` = #{status}, | |||||
| `update_date` = #{updateDate} | |||||
| where id=#{id} | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| </update> | |||||
| </mapper> | |||||
| @@ -0,0 +1,76 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityMerchantMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityMerchant"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||||
| <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/> | |||||
| <result property="whetherIn" column="whether_in" jdbcType="SMALLINT"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| id,tenant_id,parent_tenant_id, | |||||
| activity_id,merchant_id,whether_in,create_date, | |||||
| update_date | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != activityId "> | |||||
| and `activity_id` = #{activityId} | |||||
| </if> | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| <if test=" null != whetherIn "> | |||||
| and `whether_in` = #{whetherIn} | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityMerchant" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_merchant | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityMerchant"> | |||||
| delete from wx_offline_activity_merchant | |||||
| where `activity_id` = #{activityId} | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| </delete> | |||||
| <select id="getMerchantIdList" parameterType="java.util.HashMap" resultType="Long"> | |||||
| select merchant_id from wx_offline_activity_merchant where activity_id = #{activityId} and tenant_id = #{tenantId} | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,41 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityRecordGrantMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityRecordGrant"> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||||
| <result property="recordId" column="record_id" jdbcType="BIGINT"/> | |||||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| tenant_id,parent_tenant_id,activity_id, | |||||
| record_id,grant_id | |||||
| </sql> | |||||
| <select id="selectGrantCount" parameterType="java.util.HashMap" resultType="java.lang.Integer"> | |||||
| select COUNT(1) from wx_offline_activity_record_grant | |||||
| where activity_id = #{activityId} and record_id = #{recordId} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <insert id="insertList" parameterType="java.util.List"> | |||||
| insert into wx_offline_activity_record_grant | |||||
| (`activity_id`,`record_id`,`grant_id`) | |||||
| values | |||||
| <foreach collection="recordGrantList" item="item" index="index" separator=","> | |||||
| (#{item.activityId,jdbcType=BIGINT}, | |||||
| #{item.recordId,jdbcType=BIGINT}, | |||||
| #{item.grantId,jdbcType=BIGINT}) | |||||
| </foreach> | |||||
| </insert> | |||||
| <select id="selectGrantId" parameterType="java.util.HashMap" resultType="java.lang.Long"> | |||||
| select grant_id from wx_offline_activity_record_grant | |||||
| where activity_id = #{activityId} and record_id = #{recordId} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| </mapper> | |||||
| @@ -0,0 +1,245 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!DOCTYPE mapper | |||||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityRecordMapper"> | |||||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityRecord"> | |||||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||||
| <result property="orderNo" column="order_no" jdbcType="VARCHAR"/> | |||||
| <result property="orderMoney" column="order_money" jdbcType="DECIMAL"/> | |||||
| <result property="cusName" column="cus_name" jdbcType="VARCHAR"/> | |||||
| <result property="realCusName" column="real_cus_name" jdbcType="VARCHAR"/> | |||||
| <result property="cusPhone" column="cus_phone" jdbcType="VARCHAR"/> | |||||
| <result property="cusAddress" column="cus_address" jdbcType="VARCHAR"/> | |||||
| <result property="cusCard" column="cus_card" jdbcType="VARCHAR"/> | |||||
| <result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/> | |||||
| <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | |||||
| <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/> | |||||
| <result property="createBy" column="create_by" jdbcType="BIGINT"/> | |||||
| <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/> | |||||
| <result property="businessId" column="business_id" jdbcType="INTEGER"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||||
| <result property="auditRemark" column="audit_remark" jdbcType="VARCHAR"/> | |||||
| <result property="auditStatus" column="audit_status" jdbcType="INTEGER"/> | |||||
| <result property="auditBy" column="audit_by" jdbcType="BIGINT"/> | |||||
| <result property="auditTime" column="audit_time" jdbcType="TIMESTAMP"/> | |||||
| </resultMap> | |||||
| <sql id="allColumns"> | |||||
| 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 | |||||
| </sql> | |||||
| <sql id="dynamicWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != id "> | |||||
| and `id` = #{id} | |||||
| </if> | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| <if test=" null != businessId "> | |||||
| and `business_id` = #{businessId} | |||||
| </if> | |||||
| <if test=" null != cusName and cusName != '' "> | |||||
| and `cus_name` like concat('%', #{cusName},'%') | |||||
| </if> | |||||
| <if test=" null != cusPhone and cusPhone != '' "> | |||||
| and `cus_phone` = #{cusPhone} | |||||
| </if> | |||||
| <if test=" null != orderNo and orderNo != '' "> | |||||
| and `order_no` like concat('%', #{orderNo},'%') | |||||
| </if> | |||||
| <if test=" null != createDateBegin"> | |||||
| and `create_date` >= #{createDateBegin} | |||||
| </if> | |||||
| <if test=" null != createDateEnd"> | |||||
| and `create_date` <= #{createDateEnd} | |||||
| </if> | |||||
| <if test=" null != auditTimeBegin"> | |||||
| and `audit_time` >= #{auditTimeBegin} | |||||
| </if> | |||||
| <if test=" null != auditTimeEnd"> | |||||
| and `audit_time` <= #{auditTimeEnd} | |||||
| </if> | |||||
| <if test=" null != auditStatus "> | |||||
| and `audit_status` = #{auditStatus} | |||||
| </if> | |||||
| <if test=" null != merchantIdList "> | |||||
| and merchant_id in | |||||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||||
| #{midItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != notMerchantIdList "> | |||||
| and merchant_id not in | |||||
| <foreach collection="notMerchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||||
| #{midItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != ids "> | |||||
| and id in | |||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||||
| #{idItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||||
| </sql> | |||||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_record | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| </select> | |||||
| <select id="selectLimitOne" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_record | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| limit 1 | |||||
| </select> | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_record where id = #{id} and tenant_id=#{tenantId} | |||||
| </select> | |||||
| <select id="auditStatusStatistics" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="com.iformall.domain.vo.OfflineActivityRecordStatistics"> | |||||
| SELECT audit_status as 'auditStatus', | |||||
| count(1) as 'count', | |||||
| IFNULL(sum(order_money),0) as 'sumMoney' | |||||
| FROM wx_offline_activity_record | |||||
| <include refid="statisticsWhereConditions" /> | |||||
| GROUP BY audit_status | |||||
| </select> | |||||
| <update id="updateAuditStatus" parameterType="com.iformall.domain.po.WxOfflineActivityRecord"> | |||||
| update wx_offline_activity_record | |||||
| set `audit_status` = #{auditStatus}, | |||||
| <if test=" null != lotteryNum and '' != lotteryNum"> | |||||
| `lottery_num` = #{lotteryNum}, | |||||
| </if> | |||||
| <if test=" null != lotteryCount and '' != lotteryCount"> | |||||
| `lottery_Count` = #{lotteryCount}, | |||||
| </if> | |||||
| <if test=" null != anniversaryLotteryNum and '' != anniversaryLotteryNum"> | |||||
| `anniversary_lottery_num` = #{anniversaryLotteryNum}, | |||||
| </if> | |||||
| <if test=" null != auditRemark and '' != auditRemark"> | |||||
| `audit_remark` = #{auditRemark}, | |||||
| </if> | |||||
| <if test=" null != auditTime"> | |||||
| `audit_time` = #{auditTime}, | |||||
| </if> | |||||
| <if test=" null != auditBy"> | |||||
| `audit_by` = #{auditBy}, | |||||
| </if> | |||||
| `update_date` = #{updateDate} | |||||
| where id=#{id} | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| </update> | |||||
| <select id="getCount" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="Integer"> | |||||
| SELECT COUNT(1) FROM wx_offline_activity_record | |||||
| <include refid="statisticsWhereConditions" /> | |||||
| </select> | |||||
| <select id="getMerchantCount" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="Integer"> | |||||
| SELECT COUNT(distinct merchant_id) FROM wx_offline_activity_record | |||||
| <include refid="statisticsWhereConditions" /> | |||||
| </select> | |||||
| <sql id="statisticsWhereConditions"> | |||||
| where 1 = 1 | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| <if test=" null != merchantId "> | |||||
| and `merchant_id` = #{merchantId} | |||||
| </if> | |||||
| <if test=" null != businessId "> | |||||
| and `business_id` = #{businessId} | |||||
| </if> | |||||
| <if test=" null != cusPhone and cusPhone != '' "> | |||||
| and `cus_phone` = #{cusPhone} | |||||
| </if> | |||||
| <if test=" null != createDateBegin"> | |||||
| and `create_date` >= #{createDateBegin} | |||||
| </if> | |||||
| <if test=" null != createDateEnd"> | |||||
| and `create_date` <= #{createDateEnd} | |||||
| </if> | |||||
| <if test=" null != auditStatus "> | |||||
| and `audit_status` = #{auditStatus} | |||||
| </if> | |||||
| <if test=" null != merchantIdList "> | |||||
| and merchant_id in | |||||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||||
| #{midItem} | |||||
| </foreach> | |||||
| </if> | |||||
| <if test=" null != notMerchantIdList "> | |||||
| and merchant_id not in | |||||
| <foreach collection="notMerchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||||
| #{midItem} | |||||
| </foreach> | |||||
| </if> | |||||
| </sql> | |||||
| <select id="findGrantList" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select r.id,r.tenant_id,r.parent_tenant_id, | |||||
| r.order_no,r.order_money,r.cus_name, | |||||
| r.real_cus_name,r.cus_phone,r.cus_address, | |||||
| r.cus_card,r.lottery_num,r.lottery_count, | |||||
| r.anniversary_lottery_num,r.create_by,r.merchant_id,r.business_id, | |||||
| r.create_date,r.update_date,r.audit_remark, | |||||
| r.audit_status,r.audit_by,audit_time | |||||
| from wx_offline_activity_record_grant rg | |||||
| left join wx_offline_activity_record r on rg.record_id = r.id | |||||
| where rg.grant_id = #{grantId} and rg.tenant_id=#{tenantId} | |||||
| </select> | |||||
| </mapper> | |||||