| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.controller.market; | package com.iformall.controller.market; | ||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.annotation.ApiVersion; | import com.iformall.annotation.ApiVersion; | ||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| @@ -58,12 +59,47 @@ public class WxOfflineActivityController extends BaseController { | |||||
| return new ResultData(page); | return new ResultData(page); | ||||
| } | } | ||||
| @ApiOperation("判断积分按钮状态") | |||||
| @PostMapping("handleCreditStatus") | |||||
| public ResultData handleCreditStatus(@RequestBody WxOfflineActivity wxOfflineActivity) { | |||||
| TenantEntity tenantEntity = getTenantInfo(); | |||||
| wxOfflineActivity.updateTenantInfo(tenantEntity); | |||||
| if(wxOfflineActivity.getStartTime() == null || wxOfflineActivity.getEndTime() == null){ | |||||
| return new ResultData(Result.ERROR,"活动时间为空"); | |||||
| } | |||||
| if(wxOfflineActivityService.getCountWidthCredit(wxOfflineActivity) > 0){ | |||||
| return new ResultData(false); | |||||
| } | |||||
| return new ResultData(true); | |||||
| } | |||||
| @ApiOperation("新增修改接口") | @ApiOperation("新增修改接口") | ||||
| @PostMapping("saveOrUpdate") | @PostMapping("saveOrUpdate") | ||||
| public ResultData saveOrUpdate(@RequestBody WxOfflineActivity wxOfflineActivity) { | public ResultData saveOrUpdate(@RequestBody WxOfflineActivity wxOfflineActivity) { | ||||
| TenantEntity tenantEntity = getTenantInfo(); | TenantEntity tenantEntity = getTenantInfo(); | ||||
| wxOfflineActivity.updateTenantInfo(tenantEntity); | wxOfflineActivity.updateTenantInfo(tenantEntity); | ||||
| if(wxOfflineActivity.getStartTime() == null || wxOfflineActivity.getEndTime() == null){ | |||||
| return new ResultData(Result.ERROR,"活动时间为空"); | |||||
| } | |||||
| if(wxOfflineActivity.getCreditOnOff() == null){ | |||||
| wxOfflineActivity.setCreditOnOff(EnumYesOrNo.NO.getCode()); | |||||
| } | |||||
| if(EnumYesOrNo.YES.getCode().equals(wxOfflineActivity.getCreditOnOff())){ | |||||
| if(wxOfflineActivity.getCreditObject() == null){ | |||||
| return new ResultData(Result.ERROR,"积分配置错误"); | |||||
| } | |||||
| JSONObject creditObject = wxOfflineActivity.getCreditObject(); | |||||
| if(creditObject.getDouble(WxScoreRules.STEP).compareTo((double) 0) <= 0 | |||||
| || creditObject.getInteger(WxScoreRules.SCORE) <= 0){ | |||||
| return new ResultData(Result.ERROR,"积分配置不能为0"); | |||||
| } | |||||
| if(wxOfflineActivityService.getCountWidthCredit(wxOfflineActivity) > 0){ | |||||
| return new ResultData(Result.ERROR,"活动时间内存在积分开启的活动"); | |||||
| } | |||||
| }else{ | |||||
| wxOfflineActivity.setCreditConfig("{}"); | |||||
| } | |||||
| if(wxOfflineActivity.getActivityItemList() == null || wxOfflineActivity.getActivityItemList().isEmpty()){ | if(wxOfflineActivity.getActivityItemList() == null || wxOfflineActivity.getActivityItemList().isEmpty()){ | ||||
| return new ResultData(Result.ERROR,"活动项不能为空"); | return new ResultData(Result.ERROR,"活动项不能为空"); | ||||
| } | } | ||||
| @@ -84,10 +84,25 @@ public class WxOfflineActivityRecordController extends BaseController { | |||||
| wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); | wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC); | ||||
| wxOfflineActivityRecordService.exportData(request,response,wxOfflineActivityRecord); | wxOfflineActivityRecordService.exportData(request,response,wxOfflineActivityRecord); | ||||
| } | } | ||||
| @ApiOperation("获取该用户该商户的订单数量") | |||||
| @PostMapping("getCountRecord") | |||||
| public ResultData getCountRecord(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) { | |||||
| if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord(); | |||||
| if(wxOfflineActivityRecord.getId() == null){ | |||||
| return new ResultData(Result.ERROR,"id 不能为空"); | |||||
| } | |||||
| if(wxOfflineActivityRecord.getActivityId() == null){ | |||||
| return new ResultData(Result.ERROR,"活动id 不能为空"); | |||||
| } | |||||
| return new ResultData(wxOfflineActivityRecordService.getUserRecordCount(wxOfflineActivityRecord.getId(),wxOfflineActivityRecord.getActivityId(),getTenantInfo())); | |||||
| } | |||||
| @ApiOperation("审核通过") | @ApiOperation("审核通过") | ||||
| @PostMapping("audiPass") | @PostMapping("audiPass") | ||||
| public ResultData audiPass(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) { | public ResultData audiPass(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) { | ||||
| if(wxOfflineActivityRecord == null){ | if(wxOfflineActivityRecord == null){ | ||||
| return new ResultData(Result.ERROR,"id 不能为空"); | return new ResultData(Result.ERROR,"id 不能为空"); | ||||
| } | } | ||||
| @@ -0,0 +1,7 @@ | |||||
| ALTER TABLE `mallink`.`wx_offline_activity` | |||||
| ADD COLUMN `credit_on_off` smallint(1) NOT NULL DEFAULT 0 COMMENT '积分开关' AFTER `end_time`, | |||||
| ADD COLUMN `credit_config` json NULL COMMENT '积分配置' AFTER `credit_on_off`; | |||||
| ALTER TABLE `mallink`.`wx_offline_activity_record` | |||||
| ADD COLUMN `increased_points` int(11) NOT NULL DEFAULT 0 COMMENT '积分变动值' AFTER `audit_time`; | |||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.domain.po; | package com.iformall.domain.po; | ||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.baomidou.mybatisplus.annotation.TableField; | import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableId; | import com.baomidou.mybatisplus.annotation.TableId; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||
| @@ -9,10 +10,13 @@ import java.util.Date; | |||||
| import java.util.List; | import java.util.List; | ||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.enums.EnumYesOrNo; | |||||
| import lombok.Data; | import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | import lombok.ToString; | ||||
| import static java.lang.Double.*; | |||||
| /** | /** | ||||
| * 线下活动 | * 线下活动 | ||||
| * @TableName wx_offline_activity | * @TableName wx_offline_activity | ||||
| @@ -46,6 +50,34 @@ public class WxOfflineActivity extends TenantEntity { | |||||
| @TableField(value = "end_time") | @TableField(value = "end_time") | ||||
| private Date endTime; | private Date endTime; | ||||
| /** | |||||
| * 积分状态(0:关 1:开) | |||||
| */ | |||||
| @TableField(value = "credit_on_off") | |||||
| private Integer creditOnOff; | |||||
| /** | |||||
| * 积分配置 | |||||
| * { | |||||
| * "step":, | |||||
| * "score": | |||||
| * } | |||||
| */ | |||||
| @TableField(value = "credit_config") | |||||
| private String creditConfig; | |||||
| public JSONObject getCreditObject(){ | |||||
| if(EnumYesOrNo.YES.getCode().equals(creditOnOff)){ | |||||
| try{ | |||||
| JSONObject jsonObject = JSONObject.parseObject(creditConfig); | |||||
| jsonObject.getDouble(WxScoreRules.STEP); | |||||
| jsonObject.getInteger(WxScoreRules.SCORE); | |||||
| return jsonObject; | |||||
| } catch (Exception e) {} | |||||
| } | |||||
| return null; | |||||
| } | |||||
| /** | /** | ||||
| * 状态(0:未上架 1:已上架) | * 状态(0:未上架 1:已上架) | ||||
| */ | */ | ||||
| @@ -81,6 +113,9 @@ public class WxOfflineActivity extends TenantEntity { | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private Date end; | private Date end; | ||||
| @TableField(exist = false) | |||||
| private Date orderDate; | |||||
| /** | /** | ||||
| * 是否过期 | * 是否过期 | ||||
| */ | */ | ||||
| @@ -136,4 +171,6 @@ public class WxOfflineActivity extends TenantEntity { | |||||
| */ | */ | ||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private BigDecimal merchantSettlmentPrice; | private BigDecimal merchantSettlmentPrice; | ||||
| } | } | ||||
| @@ -208,6 +208,9 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||||
| @TableField(value = "audit_time") | @TableField(value = "audit_time") | ||||
| private Date auditTime; | private Date auditTime; | ||||
| @TableField(value = "increasedPoints") | |||||
| private Integer increasedPoints; | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private Date auditTimeBegin; | private Date auditTimeBegin; | ||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| @@ -21,6 +21,10 @@ public interface WxOfflineActivityMapper extends CommonMapper<WxOfflineActivity, | |||||
| void updateStatus(WxOfflineActivity wxOfflineActivity); | void updateStatus(WxOfflineActivity wxOfflineActivity); | ||||
| List<Long> findIds(WxOfflineActivity wxOfflineActivity); | List<Long> findIds(WxOfflineActivity wxOfflineActivity); | ||||
| int getCountWidthCredit(WxOfflineActivity wxOfflineActivity); | |||||
| WxOfflineActivity selectCreditActivityOne(WxOfflineActivity wxOfflineActivity); | |||||
| } | } | ||||
| @@ -33,6 +33,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper<WxOfflineAct | |||||
| List<WxOfflineActivityRecord> findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId); | List<WxOfflineActivityRecord> findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId); | ||||
| void insertList(@Param("recordList")List<WxOfflineActivityRecord> activityRecordList); | void insertList(@Param("recordList")List<WxOfflineActivityRecord> activityRecordList); | ||||
| void updateIncreasedPoints(WxOfflineActivityRecord record); | |||||
| } | } | ||||
| @@ -31,10 +31,13 @@ public interface WxOfflineActivityRecordService { | |||||
| void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId); | void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId); | ||||
| void saveCreditHistory(WxOfflineActivityRecord record); | |||||
| Map<String, Object> orderStatistics(TenantEntity tenantInfo); | Map<String, Object> orderStatistics(TenantEntity tenantInfo); | ||||
| void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord); | void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord); | ||||
| Integer getWaitAudiCount(TenantEntity tenantInfo); | Integer getWaitAudiCount(TenantEntity tenantInfo); | ||||
| Integer getUserRecordCount(Long id, Long activityId, TenantEntity tenantInfo); | |||||
| } | } | ||||
| @@ -2,6 +2,10 @@ package com.iformall.service; | |||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.domain.po.WxOfflineActivity; | import com.iformall.domain.po.WxOfflineActivity; | ||||
| import com.iformall.domain.po.WxOfflineActivityRecord; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import java.util.Date; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| @@ -25,4 +29,8 @@ public interface WxOfflineActivityService{ | |||||
| void updateStatus(WxOfflineActivity wxOfflineActivity); | void updateStatus(WxOfflineActivity wxOfflineActivity); | ||||
| WxOfflineActivity getInfoById(Long id, String tenantId); | WxOfflineActivity getInfoById(Long id, String tenantId); | ||||
| int getCountWidthCredit(WxOfflineActivity wxOfflineActivity); | |||||
| WxOfflineActivity selectCreditActivityOne(TenantEntity tenantEntity, Date orderDate); | |||||
| } | } | ||||
| @@ -610,7 +610,9 @@ public class WxCreditHistoryServiceImpl implements WxCreditHistoryService { | |||||
| // if (total > Integer.MAX_VALUE) { | // if (total > Integer.MAX_VALUE) { | ||||
| // throw new MallinkException(ErrorCode.OUT_OF_CREDIT); | // throw new MallinkException(ErrorCode.OUT_OF_CREDIT); | ||||
| // } | // } | ||||
| if (total < 0 && creditChangeNumOrigin < 0 && !Objects.equals(record.getCreditType(),EnumScoreType.REFUND_CONSUMPTION.getCode())) { | |||||
| if (total < 0 && creditChangeNumOrigin < 0 | |||||
| && !Objects.equals(record.getCreditType(),EnumScoreType.REFUND_CONSUMPTION.getCode()) | |||||
| && !Objects.equals(record.getCreditType(),EnumScoreType.POINT_CHANGE.getCode())) { | |||||
| throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); | throw new MallinkException(ErrorCode.CREDIT_NOT_ENOUGH); | ||||
| } | } | ||||
| //如果为导入的会员 则直接覆盖总积分和操作积分明细 | //如果为导入的会员 则直接覆盖总积分和操作积分明细 | ||||
| @@ -14,6 +14,7 @@ import com.iformall.service.WxOfflineActivityRecordService; | |||||
| import com.iformall.service.WxOfflineActivityService; | import com.iformall.service.WxOfflineActivityService; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | |||||
| import java.util.*; | import java.util.*; | ||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
| @@ -35,6 +36,9 @@ public class WxLegionActivityOfflineConfigServiceImpl implements WxLegionActivit | |||||
| @Autowired | @Autowired | ||||
| private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; | private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper; | ||||
| @Autowired | |||||
| private WxOfflineActivityRecordService wxOfflineActivityRecordService; | |||||
| @Autowired | @Autowired | ||||
| private WxMerchantService wxMerchantService; | private WxMerchantService wxMerchantService; | ||||
| @@ -73,6 +77,7 @@ public class WxLegionActivityOfflineConfigServiceImpl implements WxLegionActivit | |||||
| } | } | ||||
| @Override | @Override | ||||
| @Transactional(rollbackFor = Exception.class) | |||||
| public void syncOfflineActivityRecord(WxLegionActivityOrder legionActivityOrder) { | public void syncOfflineActivityRecord(WxLegionActivityOrder legionActivityOrder) { | ||||
| IdWorker idWorker = IdWorker.get(); | IdWorker idWorker = IdWorker.get(); | ||||
| @@ -86,9 +91,12 @@ public class WxLegionActivityOfflineConfigServiceImpl implements WxLegionActivit | |||||
| } | } | ||||
| wxOfflineActivityRecordMapper.insert(activityRecord); | wxOfflineActivityRecordMapper.insert(activityRecord); | ||||
| wxOfflineActivityRecordService.saveCreditHistory(activityRecord); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @Transactional(rollbackFor = Exception.class) | |||||
| public void syncOfflineActivityRecord(List<WxLegionActivityOrder> wxLegionActivityOrders) { | public void syncOfflineActivityRecord(List<WxLegionActivityOrder> wxLegionActivityOrders) { | ||||
| if(wxLegionActivityOrders == null || wxLegionActivityOrders.isEmpty()){ | if(wxLegionActivityOrders == null || wxLegionActivityOrders.isEmpty()){ | ||||
| return; | return; | ||||
| @@ -111,6 +119,11 @@ public class WxLegionActivityOfflineConfigServiceImpl implements WxLegionActivit | |||||
| activityRecordList.add(activityRecord); | activityRecordList.add(activityRecord); | ||||
| } | } | ||||
| wxOfflineActivityRecordMapper.insertList(activityRecordList); | wxOfflineActivityRecordMapper.insertList(activityRecordList); | ||||
| for (WxOfflineActivityRecord activityRecord : activityRecordList) { | |||||
| wxOfflineActivityRecordService.saveCreditHistory(activityRecord); | |||||
| } | |||||
| } | } | ||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.service.impl; | package com.iformall.service.impl; | ||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | ||||
| import com.github.pagehelper.PageHelper; | import com.github.pagehelper.PageHelper; | ||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| @@ -9,23 +10,28 @@ import com.iformall.domain.po.*; | |||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.domain.vo.OfflineActivityRecordStatistics; | import com.iformall.domain.vo.OfflineActivityRecordStatistics; | ||||
| import com.iformall.enums.EnumOfflineActivityRecordStatus; | import com.iformall.enums.EnumOfflineActivityRecordStatus; | ||||
| import com.iformall.enums.EnumScoreType; | |||||
| import com.iformall.enums.EnumUserType; | |||||
| import com.iformall.enums.EnumYesOrNo; | import com.iformall.enums.EnumYesOrNo; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.mapper.WxMerchantMapper; | |||||
| import com.iformall.mapper.WxOfflineActivityGrantAwardMapper; | |||||
| import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; | |||||
| import com.iformall.mapper.*; | |||||
| import com.iformall.service.*; | import com.iformall.service.*; | ||||
| import com.iformall.mapper.WxOfflineActivityRecordMapper; | |||||
| import com.iformall.utils.DateUtils; | import com.iformall.utils.DateUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Propagation; | |||||
| import org.springframework.transaction.annotation.Transactional; | |||||
| import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
| import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
| import java.math.BigDecimal; | |||||
| import java.math.RoundingMode; | |||||
| import java.text.NumberFormat; | import java.text.NumberFormat; | ||||
| import java.util.*; | import java.util.*; | ||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
| import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Service实现 | * @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Service实现 | ||||
| @@ -43,6 +49,15 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||||
| @Autowired | @Autowired | ||||
| WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; | WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; | ||||
| @Autowired | |||||
| private WxOfflineActivityMapper wxOfflineActivityMapper; | |||||
| @Autowired | |||||
| WxOfflineActivityService wxOfflineActivityService; | |||||
| @Autowired | |||||
| WxCUserBasicInfoService wxCUserBasicInfoService; | |||||
| @Autowired | @Autowired | ||||
| WxMerchantMapper wxMerchantMapper; | WxMerchantMapper wxMerchantMapper; | ||||
| @Autowired | @Autowired | ||||
| @@ -51,10 +66,13 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||||
| WxShopService wxShopService; | WxShopService wxShopService; | ||||
| @Autowired | @Autowired | ||||
| MallUserInfoService mallUserInfoService; | MallUserInfoService mallUserInfoService; | ||||
| @Autowired | |||||
| WxCreditHistoryService wxCreditHistoryService; | |||||
| @Autowired | @Autowired | ||||
| ExcelService excelService; | ExcelService excelService; | ||||
| @Override | @Override | ||||
| public PageInfo<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) { | public PageInfo<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) { | ||||
| handlerQuery(record); | handlerQuery(record); | ||||
| @@ -220,12 +238,82 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||||
| } | } | ||||
| @Override | @Override | ||||
| @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) | |||||
| public void auditRecord(WxOfflineActivityRecord record, Long userId) { | public void auditRecord(WxOfflineActivityRecord record, Long userId) { | ||||
| Date now = new Date(); | Date now = new Date(); | ||||
| record.setUpdateDate(now); | record.setUpdateDate(now); | ||||
| record.setAuditTime(now); | record.setAuditTime(now); | ||||
| record.setAuditBy(userId); | record.setAuditBy(userId); | ||||
| wxOfflineActivityRecordMapper.updateAuditStatus(record); | wxOfflineActivityRecordMapper.updateAuditStatus(record); | ||||
| WxOfflineActivityRecord activityRecord = wxOfflineActivityRecordMapper.selectById(record.getId(), record.getTenantId()); | |||||
| activityRecord.setAuditBy(record.getAuditBy()); | |||||
| activityRecord.setAuditStatus(record.getAuditStatus()); | |||||
| activityRecord.setAuditBy(record.getAuditBy()); | |||||
| saveCreditHistory(activityRecord); | |||||
| } | |||||
| @Override | |||||
| public void saveCreditHistory(WxOfflineActivityRecord record){ | |||||
| if(!EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(record.getAuditStatus()) | |||||
| && !EnumOfflineActivityRecordStatus.INVALID.getCode().equals(record.getAuditStatus())){ | |||||
| return; | |||||
| } | |||||
| WxOfflineActivity activity = wxOfflineActivityService.selectCreditActivityOne(record,record.getCreateDate()); | |||||
| if(activity == null){ | |||||
| return; | |||||
| } | |||||
| WxCreditHistory creditHistory = new WxCreditHistory(); | |||||
| creditHistory.setTenantId(record.getFinalTenantId()); | |||||
| creditHistory.setOperatorType(EnumUserType.MALLUSER.getCode()); | |||||
| creditHistory.setOperatorId(record.getAuditBy()); | |||||
| creditHistory.setCreateDate(record.getAuditTime()); | |||||
| creditHistory.setCouponId(record.getId()); | |||||
| creditHistory.setBusinessId(record.getBusinessId()); | |||||
| creditHistory.setMerchantId(record.getMerchantId()); | |||||
| WxCUserBasicInfo cuser = wxCUserBasicInfoService.findInfoByPhone(record, record.getCusPhone()); | |||||
| if(cuser == null){ | |||||
| return; | |||||
| } | |||||
| creditHistory.setCUserId(cuser.getId()); | |||||
| creditHistory.setCreditType(EnumScoreType.POINT_CHANGE.getCode()); | |||||
| if(EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(record.getAuditStatus())){ | |||||
| if(record.getIncreasedPoints() > 0){ | |||||
| return; | |||||
| } | |||||
| //计算积分 | |||||
| JSONObject creditObject = activity.getCreditObject(); | |||||
| Double priceCondition = creditObject.getDouble(WxScoreRules.STEP); | |||||
| int baseScore = creditObject.getInteger(WxScoreRules.SCORE); | |||||
| Integer increasedPoints = 0; | |||||
| if (record.getOrderMoney().compareTo(BigDecimal.valueOf(priceCondition)) > 0) { | |||||
| increasedPoints = record.getOrderMoney().divide(BigDecimal.valueOf(priceCondition),0, RoundingMode.DOWN) | |||||
| .multiply(BigDecimal.valueOf(baseScore)).intValue(); | |||||
| } | |||||
| if(increasedPoints == 0){ | |||||
| return; | |||||
| } | |||||
| creditHistory.setCreditNum(increasedPoints); | |||||
| }else if(EnumOfflineActivityRecordStatus.INVALID.getCode().equals(record.getAuditStatus())){ | |||||
| if(record.getIncreasedPoints() == 0){ | |||||
| return; | |||||
| } | |||||
| creditHistory.setCreditNum(record.getIncreasedPoints()); | |||||
| } | |||||
| if(creditHistory.getCreditNum() > 0){ | |||||
| creditHistory.setChangePurpose("活动订单("+record.getOrderNo()+")新增积分"+creditHistory.getCreditNum()); | |||||
| }else if(creditHistory.getCreditNum() < 0){ | |||||
| creditHistory.setChangePurpose("活动订单("+record.getOrderNo()+")退单-积分扣减"+creditHistory.getCreditNum()); | |||||
| } | |||||
| creditHistory = wxCreditHistoryService.saveOrUpdate(creditHistory,record); | |||||
| record.setIncreasedPoints(creditHistory.getCreditNum()); | |||||
| wxOfflineActivityRecordMapper.updateIncreasedPoints(record); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -292,6 +380,19 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||||
| record.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); | record.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); | ||||
| return wxOfflineActivityRecordMapper.getCount(record); | return wxOfflineActivityRecordMapper.getCount(record); | ||||
| } | } | ||||
| @Override | |||||
| public Integer getUserRecordCount(Long id, Long activityId, TenantEntity tenantInfo) { | |||||
| WxOfflineActivityRecord activityRecord = wxOfflineActivityRecordMapper.selectById(id, tenantInfo.getTenantId()); | |||||
| WxOfflineActivity wxOfflineActivity = wxOfflineActivityMapper.selectById(activityId, tenantInfo.getTenantId()); | |||||
| WxOfflineActivityRecord record = new WxOfflineActivityRecord(); | |||||
| record.updateTenantInfo(tenantInfo); | |||||
| record.setCusPhone(activityRecord.getCusPhone()); | |||||
| record.setCreateDateBegin(wxOfflineActivity.getStartTime()); | |||||
| record.setCreateDateEnd(wxOfflineActivity.getEndTime()); | |||||
| record.setAuditStatus(EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode()); | |||||
| return wxOfflineActivityRecordMapper.getCount(record); | |||||
| } | |||||
| } | } | ||||
| @@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper; | |||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.domain.vo.OfflineActivityRecordStatistics; | import com.iformall.domain.vo.OfflineActivityRecordStatistics; | ||||
| import com.iformall.enums.EnumOfflineActivityMerchantType; | import com.iformall.enums.EnumOfflineActivityMerchantType; | ||||
| import com.iformall.enums.EnumOfflineActivityRecordStatus; | import com.iformall.enums.EnumOfflineActivityRecordStatus; | ||||
| @@ -160,6 +161,21 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ | |||||
| } | } | ||||
| return wxOfflineActivity; | return wxOfflineActivity; | ||||
| } | } | ||||
| @Override | |||||
| public int getCountWidthCredit(WxOfflineActivity wxOfflineActivity) { | |||||
| wxOfflineActivity.setCreditOnOff(EnumYesOrNo.YES.getCode()); | |||||
| return wxOfflineActivityMapper.getCountWidthCredit(wxOfflineActivity); | |||||
| } | |||||
| @Override | |||||
| public WxOfflineActivity selectCreditActivityOne(TenantEntity tenantEntity, Date orderDate) { | |||||
| WxOfflineActivity wxOfflineActivity = new WxOfflineActivity(); | |||||
| wxOfflineActivity.updateTenantInfo(tenantEntity); | |||||
| wxOfflineActivity.setOrderDate(orderDate); | |||||
| wxOfflineActivity.setCreditOnOff(EnumYesOrNo.YES.getCode()); | |||||
| return wxOfflineActivityMapper.selectCreditActivityOne(wxOfflineActivity); | |||||
| } | |||||
| } | } | ||||
| @@ -11,6 +11,8 @@ | |||||
| <result property="name" column="name" jdbcType="VARCHAR"/> | <result property="name" column="name" jdbcType="VARCHAR"/> | ||||
| <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/> | <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/> | ||||
| <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/> | <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/> | ||||
| <result property="creditOnOff" column="credit_on_off" jdbcType="SMALLINT"/> | |||||
| <result property="creditConfig" column="credit_config" jdbcType="VARCHAR"/> | |||||
| <result property="status" column="status" jdbcType="SMALLINT"/> | <result property="status" column="status" jdbcType="SMALLINT"/> | ||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | ||||
| @@ -20,6 +22,7 @@ | |||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| id,tenant_id,parent_tenant_id, | id,tenant_id,parent_tenant_id, | ||||
| `name`,start_time,end_time, | `name`,start_time,end_time, | ||||
| credit_on_off,credit_config, | |||||
| status,create_date,update_date, | status,create_date,update_date, | ||||
| all_merchant | all_merchant | ||||
| </sql> | </sql> | ||||
| @@ -104,4 +107,33 @@ | |||||
| </if> | </if> | ||||
| </update> | </update> | ||||
| <select id="getCountWidthCredit" parameterType="com.iformall.domain.po.WxOfflineActivity" resultType="integer"> | |||||
| select count(1) from wx_offline_activity | |||||
| where credit_on_off = #{creditOnOff} | |||||
| <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 != id"> | |||||
| and `id` != #{id} | |||||
| </if> | |||||
| and ((`start_time` <= #{startTime} and `end_time` >= #{startTime}) | |||||
| or (`start_time` <= #{endTime} and `end_time` >= #{endTime})) | |||||
| </select> | |||||
| <select id="selectCreditActivityOne" parameterType="com.iformall.domain.po.WxOfflineActivity" resultType="com.iformall.domain.po.WxOfflineActivity"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity | |||||
| where credit_on_off = #{creditOnOff} | |||||
| <if test=" null != tenantId and '' != tenantId"> | |||||
| and `tenant_id` = #{tenantId} | |||||
| </if> | |||||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||||
| and `parent_tenant_id` = #{parentTenantId} | |||||
| </if> | |||||
| and `start_time` <= #{orderDate} | |||||
| and `end_time` >= #{orderDate} | |||||
| limit 1 | |||||
| </select> | |||||
| </mapper> | </mapper> | ||||
| @@ -28,6 +28,7 @@ | |||||
| <result property="auditStatus" column="audit_status" jdbcType="INTEGER"/> | <result property="auditStatus" column="audit_status" jdbcType="INTEGER"/> | ||||
| <result property="auditBy" column="audit_by" jdbcType="BIGINT"/> | <result property="auditBy" column="audit_by" jdbcType="BIGINT"/> | ||||
| <result property="auditTime" column="audit_time" jdbcType="TIMESTAMP"/> | <result property="auditTime" column="audit_time" jdbcType="TIMESTAMP"/> | ||||
| <result property="increasedPoints" column="increased_points" jdbcType="INTEGER" /> | |||||
| </resultMap> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| @@ -37,7 +38,7 @@ | |||||
| cus_card,lottery_num,lottery_count, | cus_card,lottery_num,lottery_count, | ||||
| anniversary_lottery_num,create_by,merchant_id,business_id, | anniversary_lottery_num,create_by,merchant_id,business_id, | ||||
| create_date,update_date,audit_remark, | create_date,update_date,audit_remark, | ||||
| audit_status,audit_by,audit_time | |||||
| audit_status,audit_by,audit_time,increased_points | |||||
| </sql> | </sql> | ||||
| <sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||
| @@ -268,4 +269,16 @@ | |||||
| </foreach> | </foreach> | ||||
| </insert> | </insert> | ||||
| <update id="updateIncreasedPoints"> | |||||
| update wx_offline_activity_record | |||||
| set increased_points = #{increased_points} | |||||
| 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> | </mapper> | ||||