| @@ -58,7 +58,7 @@ public class WxOfflineActivityGrantController extends BaseController { | |||
| @ApiOperation("参加活动用户订单列表") | |||
| @GetMapping("recordList") | |||
| @ApiImplicitParams({}) | |||
| public ResultData list(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) { | |||
| public ResultData recordList(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) { | |||
| if(wxOfflineActivityRecord.getActivityId() == null){ | |||
| return new ResultData(Result.ERROR,"请选择活动"); | |||
| } | |||
| @@ -4,13 +4,11 @@ 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.WxOfflineActivity; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | |||
| import com.iformall.domain.po.WxOfflineActivityRecord; | |||
| 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; | |||
| @@ -24,6 +22,8 @@ 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; | |||
| @@ -117,4 +117,18 @@ public class WxOfflineActivitySettlementController extends BaseController { | |||
| 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); | |||
| } | |||
| } | |||
| @@ -85,12 +85,40 @@ public class WxOfflineActivity extends TenantEntity { | |||
| @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; | |||
| /** | |||
| * 发放订单数 | |||
| */ | |||
| @@ -85,6 +85,8 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ | |||
| */ | |||
| @TableField(value = "create_by") | |||
| private Long createBy; | |||
| @TableField(exist = false) | |||
| private List<Long> createByIds; | |||
| /** | |||
| * 创建时间 | |||
| @@ -1,5 +1,6 @@ | |||
| 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; | |||
| @@ -39,6 +40,7 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { | |||
| /** | |||
| * 订单编号 | |||
| */ | |||
| @Excel(name = "订单号", width = 20, orderNum = "1") | |||
| @TableField(value = "order_no") | |||
| private String orderNo; | |||
| @@ -47,6 +49,12 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { | |||
| */ | |||
| @TableField(value = "order_money") | |||
| private Integer orderMoney; | |||
| @Excel(name = "订单金额(元)", width = 20, orderNum = "3") | |||
| @TableField(exist = false) | |||
| private String orderMoneyStr; | |||
| public String getOrderMoneyStr() { | |||
| return orderMoney != null ? new BigDecimal(orderMoney).divide(new BigDecimal(100)).toPlainString(): orderMoneyStr; | |||
| } | |||
| /** | |||
| * 商户id | |||
| @@ -111,22 +119,39 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { | |||
| */ | |||
| @TableField(value = "real_grant_price") | |||
| private Integer realGrantPrice; | |||
| @TableField(exist = false) | |||
| @Excel(name = "发放价值(元)", width = 20, orderNum = "4") | |||
| private String realGrantPriceStr; | |||
| public String getRealGrantPriceStr() { | |||
| return realGrantPrice != null ? new BigDecimal(realGrantPrice).divide(new BigDecimal(100)).toPlainString(): realGrantPriceStr; | |||
| } | |||
| /** | |||
| * 实际商管承担总金额 | |||
| */ | |||
| @TableField(value = "real_mall_share_price") | |||
| private Integer realMallSharePrice; | |||
| @Excel(name = "商管承担金额(元)", width = 20, orderNum = "5") | |||
| private String realMallSharePriceStr; | |||
| public String getRealMallSharePriceStr() { | |||
| return realMallSharePrice != null ? new BigDecimal(realMallSharePrice).divide(new BigDecimal(100)).toPlainString(): realMallSharePriceStr; | |||
| } | |||
| /** | |||
| * 实际商户承担总金额 | |||
| */ | |||
| @TableField(value = "real_merchant_share_price") | |||
| private Integer realMerchantSharePrice; | |||
| @Excel(name = "商户承担金额(元)", width = 20, orderNum = "6") | |||
| private String realMerchantSharePriceStr; | |||
| public String getRealMerchantSharePriceStr() { | |||
| return realMerchantSharePrice != null ? new BigDecimal(realMerchantSharePrice).divide(new BigDecimal(100)).toPlainString(): realMerchantSharePriceStr; | |||
| } | |||
| /** | |||
| * 创建时间 | |||
| */ | |||
| @Excel(name = "发放时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "2") | |||
| @TableField(value = "create_date") | |||
| private Date createDate; | |||
| @@ -1,5 +1,6 @@ | |||
| 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; | |||
| @@ -33,6 +34,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| /** | |||
| * 订单号 | |||
| */ | |||
| @Excel(name = "订单号", width = 20, orderNum = "1") | |||
| @TableField(value = "order_no") | |||
| private String orderNo; | |||
| @@ -41,10 +43,17 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| */ | |||
| @TableField(value = "order_money") | |||
| private Integer orderMoney; | |||
| @Excel(name = "订单金额(元)", width = 20, orderNum = "7") | |||
| @TableField(exist = false) | |||
| private String orderMoneyStr; | |||
| public String getOrderMoneyStr() { | |||
| return orderMoney != null ? new BigDecimal(orderMoney).divide(new BigDecimal(100)).toPlainString(): orderMoneyStr; | |||
| } | |||
| /** | |||
| * 客户姓名 | |||
| */ | |||
| @Excel(name = "客户姓名", width = 20, orderNum = "3") | |||
| @TableField(value = "cus_name") | |||
| private String cusName; | |||
| @@ -57,12 +66,14 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| /** | |||
| * 客户电话 | |||
| */ | |||
| @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; | |||
| @@ -102,6 +113,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| @TableField(value = "merchant_id") | |||
| private Long merchantId; | |||
| @Excel(name = "商户名称", width = 20, orderNum = "6") | |||
| @TableField(exist = false) | |||
| private String merchantName; | |||
| @@ -116,6 +128,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| /** | |||
| * 创建时间 | |||
| */ | |||
| @Excel(name = "提交时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "2") | |||
| @TableField(value = "create_date") | |||
| private Date createDate; | |||
| @@ -139,6 +152,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| /** | |||
| * 审批状态 | |||
| */ | |||
| @Excel(name = "审核状态", width = 20, orderNum = "8", replace = {"审核中_0", "已审批_1", "已驳回_2", "已发奖_10"}) | |||
| @TableField(value = "audit_status") | |||
| private Integer auditStatus; | |||
| @@ -163,7 +177,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| private Date auditTimeEnd; | |||
| @TableField(exist = false) | |||
| private Long sendByName; | |||
| private String sendByName; | |||
| @TableField(exist = false) | |||
| private Date sendTimeBegin; | |||
| @TableField(exist = false) | |||
| @@ -3,6 +3,8 @@ package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| * @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Mapper | |||
| @@ -13,6 +15,7 @@ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper<WxOfflin | |||
| Integer getCusCount(WxOfflineActivityGrantAward grantAwardQ); | |||
| List<Long> getRecordIdList(WxOfflineActivityGrantAward grantAwardQ); | |||
| } | |||
| @@ -3,6 +3,7 @@ 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; | |||
| @@ -14,7 +15,9 @@ import java.util.List; | |||
| */ | |||
| public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOfflineActivityGrantItem, Long> { | |||
| void insertList(List<WxOfflineActivityGrantItem> rantItemList); | |||
| void insertList(@Param("grantItemList")List<WxOfflineActivityGrantItem> grantItemList); | |||
| Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ); | |||
| } | |||
| @@ -5,6 +5,7 @@ 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; | |||
| @@ -16,7 +17,7 @@ import java.util.List; | |||
| */ | |||
| public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxOfflineActivityGrantSettlement, Long> { | |||
| void insertList(List<WxOfflineActivityGrantSettlement> settlementList); | |||
| void insertList(@Param("settlementList")List<WxOfflineActivityGrantSettlement> settlementList); | |||
| OfflineActivitySettlementStatistics settlementStatistics(WxOfflineActivityGrantSettlement settlement); | |||
| @@ -17,7 +17,7 @@ public interface WxOfflineActivityRecordGrantMapper extends CommonMapper<WxOffli | |||
| Integer selectGrantCount(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); | |||
| void insertList(List<WxOfflineActivityRecordGrant> recordGrantList); | |||
| void insertList(@Param("recordGrantList")List<WxOfflineActivityRecordGrant> recordGrantList); | |||
| } | |||
| @@ -27,6 +27,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper<WxOfflineAct | |||
| WxOfflineActivityRecord selectLimitOne(WxOfflineActivityRecord wxOfflineActivityRecord); | |||
| Integer getCount(WxOfflineActivityRecord recordQ); | |||
| Integer getMerchantCount(WxOfflineActivityRecord recordQ); | |||
| } | |||
| @@ -8,6 +8,8 @@ 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; | |||
| @@ -27,4 +29,6 @@ public interface WxOfflineActivityGrantSettlementService { | |||
| List<OfflineActivitySettlement> getActivitySettlement(WxOfflineActivityGrantSettlement grantSettlement); | |||
| List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement grantSettlement); | |||
| void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement); | |||
| } | |||
| @@ -52,6 +52,7 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||
| awaItem.setGrade(-1); | |||
| awaItem.setMinAmount(0); | |||
| awaItem.setMaxAmount(-1); | |||
| awaItem.setPrice(0); | |||
| } | |||
| if(awaItem.getCreateDate() == null){ | |||
| awaItem.setCreateDate(activityItem.getUpdateDate()); | |||
| @@ -195,6 +195,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| 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, "请检查订单是否已参与活动"); | |||
| } | |||
| } | |||
| wxOfflineActivityGrantAward.setRecordList(wxOfflineActivityRecords); | |||
| wxOfflineActivityGrantAward.setActivityName(activity.getName()); | |||
| @@ -209,6 +212,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||
| Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(Collectors.toMap(WxOfflineActivityItem::getId, Function.identity())); | |||
| int i = 0; | |||
| for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||
| if(grantActivityItem.getId() == null){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动项参数"); | |||
| @@ -220,11 +224,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| List<WxOfflineActivityGrantItem> activityGrantItemList = grantActivityItem.getActivityGrantItemList(); | |||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||
| continue; | |||
| // throw new MallinkException(Result.ERROR, "请检查活动奖项参数"); | |||
| } | |||
| Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(Collectors.toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { | |||
| i++; | |||
| if(grantGrantItem.getAwardCount() == null){ | |||
| grantGrantItem.setAwardCount(1); | |||
| } | |||
| @@ -296,6 +302,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| } | |||
| } | |||
| if(i == 0){ | |||
| throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); | |||
| } | |||
| } | |||
| private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ | |||
| @@ -13,6 +13,7 @@ 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; | |||
| @@ -20,6 +21,8 @@ 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; | |||
| @@ -45,6 +48,9 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| @Autowired | |||
| WxMerchantService wxMerchantService; | |||
| @Autowired | |||
| ExcelService excelService; | |||
| @Override | |||
| public void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||
| List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>(); | |||
| @@ -209,6 +215,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| if(new Date().before(activity.getStartTime())){ | |||
| activity.setStatus(EnumOfflineActivityStatus.EXPIRE.getCode()); | |||
| } | |||
| //获取结算相关 | |||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | |||
| settlement.updateTenantInfo(activity); | |||
| @@ -256,6 +263,12 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| 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); | |||
| } | |||
| } | |||
| @@ -31,6 +31,8 @@ public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivit | |||
| recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | |||
| recordGrant.setRecordId(recordId); | |||
| recordGrant.setGrantId(wxOfflineActivityGrantAward.getId()); | |||
| recordGrantList.add(recordGrant); | |||
| }); | |||
| wxOfflineActivityRecordGrantMapper.insertList(recordGrantList); | |||
| @@ -4,13 +4,13 @@ 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.WxMerchant; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||
| import com.iformall.domain.po.WxOfflineActivityRecord; | |||
| 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.MallUserInfoService; | |||
| import com.iformall.service.WxMerchantService; | |||
| import com.iformall.service.WxOfflineActivityRecordService; | |||
| import com.iformall.mapper.WxOfflineActivityRecordMapper; | |||
| @@ -32,10 +32,15 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||
| @Autowired | |||
| private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; | |||
| @Autowired | |||
| WxOfflineActivityGrantAwardMapper wxOfflineActivityGrantAwardMapper; | |||
| @Autowired | |||
| WxMerchantMapper wxMerchantMapper; | |||
| @Autowired | |||
| WxMerchantService wxMerchantService; | |||
| @Autowired | |||
| MallUserInfoService mallUserInfoService; | |||
| @Override | |||
| public PageInfo<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) { | |||
| @@ -58,16 +63,48 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||
| 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) { | |||
| WxMerchant merchantQ = new WxMerchant(); | |||
| merchantQ.updateTenantInfo(tenantEntity); | |||
| Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); | |||
| for (WxOfflineActivityRecord record : recordList) { | |||
| record.setMerchantName(idAndNamesMap.get(record.getMerchantId())); | |||
| } | |||
| if (recordList == null || recordList.size() <= 0) { | |||
| return; | |||
| } | |||
| WxMerchant merchantQ = new WxMerchant(); | |||
| merchantQ.updateTenantInfo(tenantEntity); | |||
| Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); | |||
| for (WxOfflineActivityRecord record : recordList) { | |||
| record.setMerchantName(idAndNamesMap.get(record.getMerchantId())); | |||
| } | |||
| } | |||
| @@ -3,13 +3,15 @@ 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.WxOfflineActivity; | |||
| import com.iformall.domain.po.WxOfflineActivityItem; | |||
| import com.iformall.domain.po.WxOfflineActivityMerchant; | |||
| import com.iformall.domain.po.WxRaffleActivity; | |||
| 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; | |||
| @@ -19,7 +21,9 @@ 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 | |||
| @@ -35,7 +39,13 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ | |||
| @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) { | |||
| @@ -66,7 +76,41 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ | |||
| if(now.before(activity.getStartTime())){ | |||
| 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)); | |||
| } | |||
| } | |||
| @@ -52,4 +52,32 @@ | |||
| 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_grant_award ga | |||
| left join wx_offline_activity_record_grant rg | |||
| 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> | |||
| </mapper> | |||
| @@ -5,54 +5,54 @@ | |||
| <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="INTEGER"/> | |||
| <result property="awardMaxAmount" column="award_max_amount" jdbcType="INTEGER"/> | |||
| <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="INTEGER"/> | |||
| <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"/> | |||
| <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="INTEGER"/> | |||
| <result property="awardMaxAmount" column="award_max_amount" jdbcType="INTEGER"/> | |||
| <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="INTEGER"/> | |||
| <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, | |||
| 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> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_offline_activity_grant_item | |||
| (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> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_offline_activity_grant_item | |||
| (`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`) | |||
| create_date,update_date) | |||
| values | |||
| <foreach collection="addList" item="item" index="index" separator=","> | |||
| <foreach collection="grantItemList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT},#{item.tenantId,jdbcType=VARCHAR},#{item.parentTenantId,jdbcType=VARCHAR}, | |||
| #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, | |||
| #{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER}, | |||
| @@ -63,4 +63,19 @@ | |||
| #{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> | |||
| @@ -111,7 +111,7 @@ | |||
| real_grant_price,real_mall_share_price,real_merchant_share_price, | |||
| create_date,update_date) | |||
| values | |||
| <foreach collection="addList" item="item" index="index" separator=","> | |||
| <foreach collection="settlementList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT},#{item.tenantId,jdbcType=VARCHAR},#{item.parentTenantId,jdbcType=VARCHAR}, | |||
| #{item.recordId,jdbcType=BIGINT},#{item.orderNo,jdbcType=VARCHAR},#{item.orderMoney,jdbcType=INTEGER}, | |||
| #{item.merchantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityItemId,jdbcType=BIGINT}, | |||
| @@ -155,7 +155,7 @@ | |||
| <select id="getActivitySettlement" parameterType="com.iformall.domain.po.WxOfflineActivityGrantSettlement" resultType="com.iformall.domain.vo.OfflineActivitySettlement"> | |||
| SELECT merchant_id as 'merchantId', | |||
| activity_id as 'activityId', | |||
| count(DISTINCT record_id) as 'recordCount', | |||
| 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', | |||
| @@ -27,7 +27,7 @@ | |||
| insert into wx_offline_activity_record_grant | |||
| (`tenant_id`,`parent_tenant_id`,`activity_id`,`record_id`,`grant_id`) | |||
| values | |||
| <foreach collection="addList" item="item" index="index" separator=","> | |||
| <foreach collection="recordGrantList" item="item" index="index" separator=","> | |||
| (#{item.tenantId,jdbcType=VARCHAR}, | |||
| #{item.parentTenantId,jdbcType=VARCHAR}, | |||
| #{item.activityId,jdbcType=BIGINT}, | |||
| @@ -136,35 +136,7 @@ | |||
| count(1) as 'count', | |||
| IFNULL(sum(order_money),0) as 'sumMoney' | |||
| FROM wx_offline_activity_record | |||
| 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> | |||
| <include refid="statisticsWhereConditions" /> | |||
| GROUP BY audit_status | |||
| </select> | |||
| @@ -203,6 +175,15 @@ | |||
| <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} | |||
| @@ -210,6 +191,15 @@ | |||
| <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} | |||
| @@ -218,6 +208,25 @@ | |||
| <if test=" null != createDateEnd"> | |||
| and `create_date` <= #{createDateEnd} | |||
| </if> | |||
| </select> | |||
| <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> | |||
| </mapper> | |||