Commit 5dee7da8 authored by jiaorz's avatar jiaorz

Merge remote-tracking branch 'origin/dev' into dev

parents c3a6049d 33ce5b6f
...@@ -16,6 +16,7 @@ import javax.validation.Validator; ...@@ -16,6 +16,7 @@ import javax.validation.Validator;
import javax.validation.executable.ExecutableValidator; import javax.validation.executable.ExecutableValidator;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Parameter; import java.lang.reflect.Parameter;
import java.util.Collection;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
...@@ -62,8 +63,13 @@ public class ValidParamAop { ...@@ -62,8 +63,13 @@ public class ValidParamAop {
for (int i =0;i<argLength;i++){ for (int i =0;i<argLength;i++){
BeanValid beanValidAnnotation = parameters[i].getDeclaredAnnotation(BeanValid.class); BeanValid beanValidAnnotation = parameters[i].getDeclaredAnnotation(BeanValid.class);
if (Objects.nonNull(beanValidAnnotation)){ if (Objects.nonNull(beanValidAnnotation)){
if (args[i].getClass().isArray()){ if ((args[i] instanceof Collection) || (args[i].getClass().isArray())){
Object[] arrayArg =(Object[])args[i]; Object[] arrayArg = null;
if(args[i] instanceof Collection){
arrayArg = ((Collection)args[i]).toArray();
}else {
arrayArg = (Object[])args[i];
}
for (Object item:arrayArg){ for (Object item:arrayArg){
Set<ConstraintViolation<Object>> validateResult = this.validator.validate(item, beanValidAnnotation.value()); Set<ConstraintViolation<Object>> validateResult = this.validator.validate(item, beanValidAnnotation.value());
if (!validateResult.isEmpty()){ if (!validateResult.isEmpty()){
......
package com.github.wxiaoqi.security.common.util.excel;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 18:37
*/
public class ExcelUtils {
private XSSFWorkbook hssfWorkbook;
private XSSFSheet sheet;
public ExcelUtils(String sheetName){
hssfWorkbook = new XSSFWorkbook();
sheet = hssfWorkbook.createSheet(sheetName);
}
public void createCellData(Sheet sheet, int startRowIndex, CellStyle cellStyle, List<String[]> datas) {
for (String[] data : datas) {
Row row = sheet.createRow(startRowIndex++);
createCellCount(row, 0, data, cellStyle);
}
}
private void createCellCount(Row row, int CellStartIndex, String[] data, CellStyle cellStyle) {
for (int i = CellStartIndex, y = 0; y < data.length; i++, y++) {
Cell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(data[y]);
}
}
public void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle) {
for (int i = 0; i < header.length; i++) {
Cell cell = row.createCell(cellStartIndex);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex += 1;
}
}
public CellStyle createGeneralCellStyle() {
CellStyle cellStyleGeneral = createHeaderCellStyle();
cellStyleGeneral.setWrapText(true);
XSSFFont generalFont = createFont();
generalFont.setBold(false);
cellStyleGeneral.setFont(generalFont);
return cellStyleGeneral;
}
public CellStyle createHeaderCellStyle() {
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setLocked(false);
XSSFFont headerFont = createFont();
cellStyleHeader.setFont(headerFont);
return cellStyleHeader;
}
public XSSFFont createFont() {
XSSFFont font = hssfWorkbook.createFont();
font.setFontName("黑体");
font.setBold(true);
return font;
}
public XSSFWorkbook getHssfWorkbook() {
return hssfWorkbook;
}
public void setHssfWorkbook(XSSFWorkbook hssfWorkbook) {
this.hssfWorkbook = hssfWorkbook;
}
public XSSFSheet getSheet() {
return sheet;
}
public void setSheet(XSSFSheet sheet) {
this.sheet = sheet;
}
}
...@@ -10,6 +10,8 @@ import lombok.Data; ...@@ -10,6 +10,8 @@ import lombok.Data;
*/ */
@Data @Data
public class InviteMemberBO { public class InviteMemberBO {
private Integer userId;
private Integer parentId;
private String username; private String username;
private String headUrl; private String headUrl;
private Long joinTime; private Long joinTime;
......
...@@ -12,6 +12,7 @@ import com.github.wxiaoqi.security.admin.vo.AppUserInfoVo; ...@@ -12,6 +12,7 @@ import com.github.wxiaoqi.security.admin.vo.AppUserInfoVo;
import com.github.wxiaoqi.security.admin.vo.AppUserVo; import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.im.utils.BeanUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
...@@ -192,4 +193,13 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -192,4 +193,13 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
List<UserStaffBo> staffBos = mapper.findAllStaffsByCompanyIdAndPostionId(staffStatisticsFindDTO); List<UserStaffBo> staffBos = mapper.findAllStaffsByCompanyIdAndPostionId(staffStatisticsFindDTO);
return CollectionUtils.isEmpty(staffBos)?Collections.EMPTY_LIST:staffBos; return CollectionUtils.isEmpty(staffBos)?Collections.EMPTY_LIST:staffBos;
} }
public AppUserVo findByCode(String code) {
AppUserVo appUserVo = new AppUserVo();
AppUserDetail appUserDetail = new AppUserDetail();
appUserDetail.setCode(code);
appUserDetail = mapper.selectOne(appUserDetail);
org.springframework.beans.BeanUtils.copyProperties(appUserDetail,appUserVo);
return appUserVo;
}
} }
...@@ -23,4 +23,6 @@ public interface AppUserRelationMapper extends Mapper<AppUserRelation> { ...@@ -23,4 +23,6 @@ public interface AppUserRelationMapper extends Mapper<AppUserRelation> {
public int countByParentId(@Param("parentId")Integer parentId,@Param("bindTime")Long bindTime); public int countByParentId(@Param("parentId")Integer parentId,@Param("bindTime")Long bindTime);
List<AppUserRelation> selectByUserIds(@Param("userIds") List<Integer> userIds); List<AppUserRelation> selectByUserIds(@Param("userIds") List<Integer> userIds);
List<AppUserRelation> selectCountByLeaderId(Integer userId);
} }
...@@ -372,4 +372,10 @@ public class AppUserController extends CommonBaseController{ ...@@ -372,4 +372,10 @@ public class AppUserController extends CommonBaseController{
public List<UserStaffBo> findAllStaffs(){ public List<UserStaffBo> findAllStaffs(){
return userDetailBiz.findAllStaffs(); return userDetailBiz.findAllStaffs();
} }
@GetMapping("/app/unauth/code/{code}")
public ObjectRestResponse<AppUserVo> findAppuserInfoByCode(@PathVariable("code") String code){
AppUserVo appUserVo = userDetailBiz.findByCode(code);
return ObjectRestResponse.succ(appUserVo);
}
} }
...@@ -21,4 +21,8 @@ ...@@ -21,4 +21,8 @@
#{userId} #{userId}
</foreach> </foreach>
</select> </select>
<select id="selectCountByLeaderId" resultType="com.github.wxiaoqi.security.admin.entity.AppUserRelation">
select * from `app_user_relation` as `aur` inner join `app_user_login` as `aul` on aul.id=aur.user_id where aur.is_del=0 and aul.isdel=0 and aur.parent_id=#{userId}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
IFNULL(ausww.income,0) AS `income` IFNULL(ausww.income,0) AS `income`
FROM FROM
`app_user_relation` AS `aur` `app_user_relation` AS `aur`
INNER JOIN (select `id` from `app_user_login` where isdel=0)as `aul` ON aul.id=aur.user_id
LEFT JOIN (SELECT DISTINCT LEFT JOIN (SELECT DISTINCT
`source_id` AS userId, `source_id` AS userId,
IFNULL( IFNULL(
...@@ -149,29 +150,29 @@ FROM ...@@ -149,29 +150,29 @@ FROM
<if test="userName!=null and userName!=' '"> <if test="userName!=null and userName!=' '">
WHERE `realname` LIKE CONCAT('%',#{userName},'%') OR `nickname` LIKE CONCAT('%',#{userName},'%') WHERE `realname` LIKE CONCAT('%',#{userName},'%') OR `nickname` LIKE CONCAT('%',#{userName},'%')
</if>) AS audd ON audd.userid = ausw.user_id </if>) AS audd ON audd.userid = ausw.user_id
ORDER BY ausw.crt_time DESC ORDER BY ausw.crt_time DESC
</select> </select>
<select id="statisticsStatffSellerWaterByUserIdsAndTime" <select id="statisticsStatffSellerWaterByUserIdsAndTime"
resultType="com.github.wxiaoqi.security.admin.dto.AppUserSellingWaterDTO"> resultType="com.github.wxiaoqi.security.admin.dto.AppUserSellingWaterDTO">
SELECT SELECT
`auswu`.user_id, ( IFNULL(auswu.upIncome,0) - IFNULL(auswd.dowIncome,0) ) AS `commission` `auswu`.user_id, ( IFNULL(auswu.upIncome,0) - IFNULL(auswd.dowIncome,0) ) AS `commission`
FROM FROM
( SELECT `user_id` as `userId`, IFNULL(SUM( commission ),0) AS upIncome FROM `app_user_selling_water` where STATUS = 0 and waiting=1 ( SELECT `user_id` as `userId`, IFNULL(SUM( commission ),0) AS upIncome FROM `app_user_selling_water` where STATUS = 0 and waiting=1
AND `crt_time` between #{startTime} and #{endTime} AND `crt_time` between #{startTime} and #{endTime}
<if test="userIds!=null and userIds.size!=0"> <if test="userIds!=null and userIds.size!=0">
AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=","> AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId} #{userId}
</foreach> </foreach>
</if> group by user_id) AS `auswu` </if> group by user_id) AS `auswu`
left join left join
( SELECT `user_id`,IFNULL(SUM( commission ),0) AS `dowIncome` FROM `app_user_selling_water` where STATUS = 1 and waiting=1 ( SELECT `user_id`,IFNULL(SUM( commission ),0) AS `dowIncome` FROM `app_user_selling_water` where STATUS = 1 and waiting=1
and `crt_time` between #{startTime} and #{endTime} and `crt_time` between #{startTime} and #{endTime}
<if test="userIds!=null and userIds.size!=0"> <if test="userIds!=null and userIds.size!=0">
AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=","> AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId} #{userId}
</foreach> </foreach>
</if> group by user_id) AS `auswd` </if> group by user_id) AS `auswd`
on auswd.user_id=auswu.user_id on auswd.user_id=auswu.user_id
</select> </select>
</mapper> </mapper>
\ No newline at end of file
package com.xxfc.platform.activity.bo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordTotalVo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:19
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordBo {
private Integer totalPage;
private Long totalCount;
private Integer pageNum;
private Integer pageSize;
private List<ActivityAttendanceRecordVo> activityAttendanceRecordVos;
private ActivityAttendanceRecordTotalVo activityAttendanceRecordTotalVo;
public Integer getTotalPage() {
return totalPage==null?0:totalPage;
}
public Long getTotalCount() {
return totalCount==null?0:totalCount;
}
public Integer getPageNum() {
return pageNum==null?1:pageNum;
}
public Integer getPageSize() {
return pageSize==null?0:pageSize;
}
public List<ActivityAttendanceRecordVo> getActivityAttendanceRecordVos() {
return CollectionUtils.isEmpty(activityAttendanceRecordVos)? Collections.EMPTY_LIST:activityAttendanceRecordVos;
}
public ActivityAttendanceRecordTotalVo getActivityAttendanceRecordTotalVo() {
return activityAttendanceRecordTotalVo==null?new ActivityAttendanceRecordTotalVo():activityAttendanceRecordTotalVo;
}
}
package com.xxfc.platform.activity.bo;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 8:40
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordBo implements Serializable {
private Integer totalPage;
private Long totalCount;
private Integer pageNum;
private Integer pageSize;
private List<ActivityWinningRecordVo> activityWinningRecords;
private ActivityWinningRecordTotalVo activityWinningRecordTotalVo;
public Integer getTotalPage() {
return totalPage==null?0:totalPage;
}
public Long getTotalCount() {
return totalCount==null?0:totalCount;
}
public Integer getPageNum() {
return pageNum==null?0:pageNum;
}
public Integer getPageSize() {
return pageSize==null?0:pageSize;
}
public List<ActivityWinningRecordVo> getActivityWinningRecords() {
return CollectionUtils.isEmpty(activityWinningRecords)? Collections.EMPTY_LIST:activityWinningRecords;
}
public ActivityWinningRecordTotalVo getActivityWinningRecordTotalVo() {
return activityWinningRecordTotalVo==null?new ActivityWinningRecordTotalVo():activityWinningRecordTotalVo;
}
}
package com.xxfc.platform.activity.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 9:45
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordTotalVo {
private Integer onLineNum;
private Integer onLineWineNum;
private Integer localeNum;
private Integer localeWineNum;
public Integer getOnLineNum() {
return onLineNum==null?0:onLineNum;
}
public Integer getOnLineWineNum() {
return onLineWineNum==null?0:onLineWineNum;
}
public Integer getLocaleNum() {
return localeNum==null?0:localeNum;
}
public Integer getLocaleWineNum() {
return localeWineNum==null?0:localeWineNum;
}
}
package com.xxfc.platform.activity.constant;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/6 12:11
*/
public enum PrizeGoodsTypeEnum {
PRIZE(1,"奖品"),
COUPON(2,"优惠券"),
NO_PRIZE(0,"谢谢惠顾");
private int code;
private String desc;
PrizeGoodsTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.xxfc.platform.activity.constant;
/**
* @author libin
* @version 1.0
* @description 奖品类型
* @data 2019/12/4 18:24
*/
public enum PrizeTypeEnum {
ONLINE(1,"线上"),
LOCALE(2,"现场");
private int code;
private String desc;
PrizeTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 16:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer userId;
private String userName;
private String phone;
private String positionName;
private Integer status;
private BigDecimal amount;
private Integer inviteNum;
private String prizes;
private Long attendTime;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:32
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordFindDTO extends PageParam {
private Integer activityId;
private Long startTime;
private Long endTime;
private String phone;
private Integer status;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 18:56
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityLuckDrawFindDTO extends PageParam {
private Date startTime;
private Date endTime;
private String phone;
private Integer activityId;
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:21
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordDTO {
private Integer userId;
private Integer activityId;
private String activityName;
private String prizeName;
private String iconPath;
private Integer prizeType;
private Integer hasWinning;
private String expiryDateCode;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 8:36
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordFindDTO extends PageParam {
private Integer activityId;
private Date startTime;
private Date endTime;
private String phone;
private Integer hasWinning;
private Integer prizeType;
private Integer state;
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:08
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordPageDTO {
private Integer userId;
private String userName;
private String phone;
private String positionName;
private Integer prizeType;
private String prizeName;
private String iconPath;
private Integer hasWinning;
private String expiryDateCode;
private Date crtTime;
private Date lotteryTime;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:34
*/
@Data
@Table(name = "activity_attendance_record")
public class ActivityAttendanceRecord {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "phone")
private String phone;
@Column(name = "activity_id")
private Integer activityId;
@Column(name = "activity_name")
private String activityName;
@Column(name = "position_id")
private Integer positionId;
@Column(name = "position_name")
private String positionName;
@ApiModelProperty("线上抽奖次数")
@Column(name = "online_lottery_num")
private Integer onlineLotteryNum;
@ApiModelProperty("现场抽奖次数")
@Column(name = "locale_lottery_num")
private Integer localeLotteryNum;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.activity.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 报名
* @data 2019/12/3 15:06
*/
@Data
@Table(name = "activity_lucky_draw")
public class ActivityLuckyDraw implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator= "JDBC")
private Long id;
@Column(name = "user_name")
private String userName;
@Column(name = "phone")
private String phone;
private Integer activityId;
@Column(name = "activity_name")
private String activityName;
@Column(name = "ticket_num")
private Integer ticketNum;
@Column(name = "user_id")
private Integer userId;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 奖品、设置
* @data 2019/12/3 15:21
*/
@Data
@Table(name = "activity_prize")
@ApiModel
public class ActivityPrize implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@NotNull(message = "编号不能为null")
@ApiModelProperty("编号")
@Column(name = "serial_number")
private Integer serialNumber;
@NotEmpty(message = "奖品名称不能为空")
@Column(name = "name")
private String name;
@NotEmpty(message = "奖品地址不能为空")
@ApiModelProperty("奖品图片地址")
@Column(name = "icon_path")
private String iconPath;
@ApiModelProperty("每天最多中奖份数")
@Column(name = "day_max_use")
private Integer dayMaxUse;
@NotNull(message = "奖品库存不能为null")
@Column(name = "total_stock")
private Integer totalStock;
@NotNull(message = "权重|概率不能为null")
@Column(name = "probability")
private Double probability;
@NotNull(message = "奖品设置类型不能null")
@ApiModelProperty("1:线上 2:现场")
@Column(name = "type")
private Integer type;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "upd_time")
private Date updTime;
@Column(name = "goods_id")
private Integer goodsId;
@NotNull(message = "奖品类型不能为null")
@Column(name = "prize_goods_type")
private Integer prizeGoodsType;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 中奖记录
* @data 2019/12/3 16:14
*/
@Data
@Table(name = "activity_winning_record")
public class ActivityWinningRecord implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "activity_id")
private Integer activityId;
@ApiModelProperty("1:线上 2:现场")
@Column(name = "prize_type")
private Integer prizeType;
@Column(name = "prize_name")
private String prizeName;
@Column(name = "icon_path")
private String iconPath;
@ApiModelProperty("是否中奖 1:是 0:否")
@Column(name = "has_winning")
private Integer hasWinning;
@ApiModelProperty("兑奖码")
@Column(name = "expiry_date_code")
private String expiryDateCode;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "lottery_time")
private Date lotteryTime;
@Column(name = "goods_id")
private Integer goodsId;
}
package com.xxfc.platform.activity.util;
import com.xxfc.platform.activity.entity.ActivityPrize;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 20:01
*/
public class LotteryUtils {
public static int getrandomIndex(List<ActivityPrize> prizes) {
int random = -1;
try {
//计算总权重
double sumWeight = 0;
for (ActivityPrize p : prizes) {
sumWeight += p.getProbability();
}
//产生随机数
double randomNumber;
randomNumber = Math.random();
//根据随机数在所有奖品分布的区域并确定所抽奖品
double d1 = 0;
double d2 = 0;
for (int i = 0; i < prizes.size(); i++) {
d2 += Double.parseDouble(String.valueOf(prizes.get(i).getProbability())) / sumWeight;
if (i == 0) {
d1 = 0;
} else {
d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getProbability())) / sumWeight;
}
if (randomNumber >= d1 && randomNumber <= d2) {
random = i;
break;
}
}
} catch (Exception e) {
System.out.println("生成抽奖随机数出错,出错原因:" + e.getMessage());
}
return random;
}
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordTotalVo {
private Integer attendNum;
private Integer finishNum;
private BigDecimal amount;
public Integer getAttendNum() {
return attendNum==null?0:attendNum;
}
public Integer getFinishNum() {
return finishNum==null?0:finishNum;
}
public BigDecimal getAmount() {
return amount==null?BigDecimal.ZERO:amount;
}
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordVo implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private String phone;
private String positionName;
private Integer status;
private BigDecimal amount;
private Integer inviteNum;
private String prizes;
private Long attendTime;
}
package com.xxfc.platform.activity.vo;
import com.xxfc.platform.activity.entity.ActivityPrize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 17:27
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityPrizeVo {
private List<ActivityPrize> onlinePrize;
private List<ActivityPrize> localePrize;
public List<ActivityPrize> getOnlinePrize() {
return CollectionUtils.isEmpty(onlinePrize)? Collections.EMPTY_LIST:onlinePrize;
}
public List<ActivityPrize> getLocalePrize() {
return CollectionUtils.isEmpty(localePrize)? Collections.EMPTY_LIST:localePrize;
}
}
package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 9:47
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordVo {
private String userName;
private String phone;
private String positionName;
@ApiModelProperty("1:线上 2:现场")
private Integer prizeType;
private String prizeName;
private String iconPath;
@ApiModelProperty("是否中奖 1:是 0:否")
private Integer hasWinning;
@ApiModelProperty("兑奖码")
private String expiryDateCode;
private Date lotteryTime;
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LotteryVo {
private String prizeName;
private Integer serialNumber;
private String expiryDateCode;
private String message;
}
...@@ -9,6 +9,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; ...@@ -9,6 +9,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import tk.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
...@@ -22,8 +24,11 @@ import tk.mybatis.spring.annotation.MapperScan; ...@@ -22,8 +24,11 @@ import tk.mybatis.spring.annotation.MapperScan;
"com.xxfc.platform", "com.xxfc.platform",
"com.github.wxiaoqi.security.common.handler", "com.github.wxiaoqi.security.common.handler",
"com.github.wxiaoqi.security.common.log", "com.github.wxiaoqi.security.common.log",
"com.github.wxiaoqi.security.admin.support.aop" "com.github.wxiaoqi.security.admin.support.aop",
"com.github.wxiaoqi.security.common.support"
}) })
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableAsync
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableScheduling @EnableScheduling
@EnableAceAuthClient @EnableAceAuthClient
......
package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 活动抽奖报名表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, ActivityLuckyDraw> {
/**
* 报名
*
* @param activityLuckyDraw
*/
public void signUp(ActivityLuckyDraw activityLuckyDraw) {
activityLuckyDraw.setCrtTime(new Date());
mapper.insertSelective(activityLuckyDraw);
}
/**
* 分页查询报名列表
*
* @param activityLuckDrawFindDTO
* @return
*/
public PageDataVO<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> dataVO = PageDataVO.pageInfo(activityLuckDrawFindDTO.getPage(), activityLuckDrawFindDTO.getLimit(), () -> mapper.listLuckDrawWithPage(activityLuckDrawFindDTO));
List<ActivityLuckyDraw> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = new PageDataVO<>();
activityLuckyDrawPageDataVO.setPageNum(activityLuckDrawFindDTO.getPage());
activityLuckyDrawPageDataVO.setPageSize(activityLuckDrawFindDTO.getLimit());
return activityLuckyDrawPageDataVO;
}
return dataVO;
}
public void exportActivityLuckDrawData(ActivityLuckDrawFindDTO activityLuckDrawFindDTO, ServletOutputStream outputStream) throws IOException {
List<ActivityLuckyDraw> activityLuckyDraws = listActivityLuckDraw(activityLuckDrawFindDTO);
ExcelUtils excelUtils = new ExcelUtils("报名列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
Row headerRow = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
String[] headers = {"姓名","电话","人数","报名时间"};
excelUtils.createHeader(headerRow,0,headers,headerCellStyle);
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
List<String[]> activityLuckDrawDataList = getActivityLuckDrawDataList(activityLuckyDraws);
excelUtils.createCellData(sheet,1,generalCellStyle,activityLuckDrawDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getActivityLuckDrawDataList(List<ActivityLuckyDraw> activityLuckyDraws){
List<String[]> activityLuckDrawDataList = new ArrayList<>(activityLuckyDraws.size());
for (ActivityLuckyDraw activityLuckyDraw : activityLuckyDraws) {
String[] activityLuckDrawData = getActivityLuckDrawData(activityLuckyDraw);
activityLuckDrawDataList.add(activityLuckDrawData);
}
return activityLuckDrawDataList;
}
private String[] getActivityLuckDrawData(ActivityLuckyDraw activityLuckyDraw){
Date crtTime = activityLuckyDraw.getCrtTime();
String timeStr = DateUtil.format(crtTime, "yyyy-MM-dd HH:mm:ss");
return new String[]{activityLuckyDraw.getUserName(),activityLuckyDraw.getPhone(),activityLuckyDraw.getTicketNum()+"",timeStr};
}
public List<ActivityLuckyDraw> listActivityLuckDraw(ActivityLuckDrawFindDTO activityLuckDrawFindDTO){
List<ActivityLuckyDraw> activityLuckyDraws = mapper.listLuckDrawWithPage(activityLuckDrawFindDTO);
if (CollectionUtils.isEmpty(activityLuckyDraws)){
return Collections.EMPTY_LIST;
}
return activityLuckyDraws;
}
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Lists;
import com.xxfc.platform.activity.bo.ActivityWinningRecordBo;
import com.xxfc.platform.activity.bo.ActivityWinningRecordTotalVo;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.dto.ActivityWinningRecordDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import com.xxfc.platform.activity.mapper.ActivityWinningRecordMapper;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 中奖记录
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class ActivityWinningRecordBiz extends BaseBiz<ActivityWinningRecordMapper, ActivityWinningRecord> {
/**
* 保存
*
* @param activityWinningRecord
*/
public void saveRecord(ActivityWinningRecord activityWinningRecord) {
activityWinningRecord.setCrtTime(new Date());
mapper.insertSelective(activityWinningRecord);
}
public ActivityWinningRecordBo listActivityWinningRecordWithPage(ActivityWinningRecordFindDTO activityWinningRecordFindDTO) {
ActivityWinningRecordBo activityWinningRecordBo = new ActivityWinningRecordBo();
PageDataVO<ActivityWinningRecordPageDTO> dataVO = PageDataVO.pageInfo(activityWinningRecordFindDTO.getPage(), activityWinningRecordFindDTO.getLimit(),
() -> mapper.selectActivityWinningRecord(activityWinningRecordFindDTO));
ActivityWinningRecordTotalVo activityWinningRecordTotalVo = getActivityWinningRecordTotal(activityWinningRecordFindDTO);
List<ActivityWinningRecordPageDTO> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)){
activityWinningRecordBo.setActivityWinningRecordTotalVo(activityWinningRecordTotalVo);
return activityWinningRecordBo;
}
List<ActivityWinningRecordVo> activityWinningRecordVos = new ArrayList<>();
ActivityWinningRecordVo activityWinningRecordVo = null;
for (ActivityWinningRecordPageDTO activityWinningRecord : data) {
activityWinningRecordVo = new ActivityWinningRecordVo();
BeanUtils.copyProperties(activityWinningRecord,activityWinningRecordVo);
activityWinningRecordVos.add(activityWinningRecordVo);
}
activityWinningRecordBo.setPageNum(dataVO.getPageNum());
activityWinningRecordBo.setPageSize(dataVO.getPageSize());
activityWinningRecordBo.setTotalPage(dataVO.getTotalPage());
activityWinningRecordBo.setTotalCount(dataVO.getTotalCount());
activityWinningRecordBo.setActivityWinningRecordTotalVo(activityWinningRecordTotalVo);
activityWinningRecordBo.setActivityWinningRecords(activityWinningRecordVos);
return activityWinningRecordBo;
}
private ActivityWinningRecordTotalVo getActivityWinningRecordTotal(ActivityWinningRecordFindDTO activityWinningRecordFindDTO){
activityWinningRecordFindDTO.setHasWinning(null);
ActivityWinningRecordTotalVo activityWinningRecordTotalVo = new ActivityWinningRecordTotalVo();
List<ActivityWinningRecordPageDTO> activityWinningRecords = mapper.selectActivityWinningRecord(activityWinningRecordFindDTO);
if (CollectionUtils.isEmpty(activityWinningRecords)){
return activityWinningRecordTotalVo;
}
AtomicInteger onlineCounter = new AtomicInteger(0);
AtomicInteger onlineWinCounter= new AtomicInteger(0);
AtomicInteger localeCounter = new AtomicInteger(0);
AtomicInteger localeWineCounter = new AtomicInteger(0);
for (ActivityWinningRecordPageDTO activityWinningRecord : activityWinningRecords) {
if (activityWinningRecord.getPrizeType()==1){
onlineCounter.incrementAndGet();
if (activityWinningRecord.getHasWinning()==1){
onlineWinCounter.incrementAndGet();
}
}
if (activityWinningRecord.getPrizeType()==2){
localeCounter.incrementAndGet();
if (activityWinningRecord.getHasWinning()==1){
localeWineCounter.incrementAndGet();
}
}
}
activityWinningRecordTotalVo.setOnLineNum(onlineCounter.get());
activityWinningRecordTotalVo.setOnLineWineNum(onlineWinCounter.get());
activityWinningRecordTotalVo.setLocaleNum(localeCounter.get());
activityWinningRecordTotalVo.setLocaleWineNum(localeWineCounter.get());
return activityWinningRecordTotalVo;
}
public void exportActivityWinngingData(ActivityWinningRecordFindDTO activityWinningRecordFindDTO, ServletOutputStream outputStream) throws IOException {
ExcelUtils excelUtils = new ExcelUtils("中奖列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
List<ActivityWinningRecordPageDTO> activityWinningRecordPageDTOS = mapper.selectActivityWinningRecord(activityWinningRecordFindDTO);
ActivityWinningRecordTotalVo activityWinningRecordTotal = getActivityWinningRecordTotal(activityWinningRecordFindDTO);
String[] header1 = {"线上抽奖触发数","线上中奖个数","现场上抽奖触发数","现场中奖个数"};
Row headerRow1 = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
excelUtils.createHeader(headerRow1,0,header1,headerCellStyle);
String[] headerValue = {activityWinningRecordTotal.getOnLineNum()+"",activityWinningRecordTotal.getOnLineWineNum()+"",activityWinningRecordTotal.getLocaleNum()+"",activityWinningRecordTotal.getLocaleWineNum()+""};
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
ArrayList<String[]> headerData = Lists.newArrayList();
headerData.add(headerValue);
excelUtils.createCellData(sheet,1,generalCellStyle,headerData);
CellRangeAddress cellRangeAddress = new CellRangeAddress(2, 2, 0, 6);
sheet.addMergedRegion(cellRangeAddress);
String[] header2 = {"用户名","电话","身份","发放类型","抽奖礼品","兑奖码","中奖时间"};
Row header2Row = sheet.createRow(3);
excelUtils.createHeader(header2Row,0,header2,headerCellStyle);
List<String[]> activityWinngingDataList = getActivityWinngingDataList(activityWinningRecordPageDTOS);
excelUtils.createCellData(sheet,4,generalCellStyle,activityWinngingDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getActivityWinngingDataList(List<ActivityWinningRecordPageDTO> activityWinningRecordDTOS){
List<String[]> activityWinngingDataList = new ArrayList<>();
for (ActivityWinningRecordPageDTO activityWinningRecordDTO : activityWinningRecordDTOS) {
String[] activityWinngingData = getActivityWinngingData(activityWinningRecordDTO);
activityWinngingDataList.add(activityWinngingData);
}
return activityWinngingDataList;
}
private String[] getActivityWinngingData(ActivityWinningRecordPageDTO activityWinningRecordPageDTO){
String prizeType= activityWinningRecordPageDTO.getPrizeType()== PrizeTypeEnum.ONLINE.getCode()?"线上":"现场";
String expiryDateCode = StringUtils.hasText(activityWinningRecordPageDTO.getExpiryDateCode())?activityWinningRecordPageDTO.getExpiryDateCode():"无";
String timeStr = DateUtil.format(activityWinningRecordPageDTO.getLotteryTime(),"yyyy-MM-dd HH:mm:ss");
return new String[]{activityWinningRecordPageDTO.getUserName(),activityWinningRecordPageDTO.getPhone(),
activityWinningRecordPageDTO.getPositionName(),prizeType,activityWinningRecordPageDTO.getPrizeName(),
expiryDateCode,timeStr};
}
}
\ No newline at end of file
package com.xxfc.platform.activity.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.nio.charset.Charset;
/**
* ${DESCRIPTION}
*
* @author wanghaobin
* @create 2017-06-21 8:39
*/
@Configuration
@Primary
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer(Charset.forName("UTF-8"));
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}
package com.xxfc.platform.activity.config;
import org.redisson.api.*;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/20 16:51
*/
@Component
public class RedissonLock {
@Resource
private RedissonClient redissonClient;
/**
* 获取锁
* @param key
* @return
*/
public RLock getRLock(String key){
return redissonClient.getLock(key);
}
/**
* 获取读写锁
* @param key
* @return
*/
public RReadWriteLock getRWLock(String key){
return redissonClient.getReadWriteLock(key);
}
/**
* 获取记数锁
* @param key
* @return
*/
public RCountDownLatch getRCountDownLatch(String key){
return redissonClient.getCountDownLatch(key);
}
/**
* 获取消息的Topic
* @param key
* @return
*/
public RTopic getRTopic(String key){
RTopic rTopic = redissonClient.getTopic(key);
return rTopic;
}
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 参与活动数据
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-04 14:54:06
*/
public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> {
List<ActivityAttendanceRecordDTO> selectActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO);
void updateLotteryNumByActivityIdAndUserIdAndPrizeType(@Param("activityId") Integer activityId,
@Param("userId") Integer userId,
@Param("prizeType") Integer prizeType);
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 活动抽奖报名表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityLuckyDrawMapper extends Mapper<ActivityLuckyDraw> {
List<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO);
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPrize;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
/**
* 奖品设置
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> {
void updatePrizeStock(@Param("prizeType") Integer prizeType,
@Param("serialNumber") Integer serialNumber);
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 中奖记录
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityWinningRecordMapper extends Mapper<ActivityWinningRecord> {
List<ActivityWinningRecordPageDTO> selectActivityWinningRecord(ActivityWinningRecordFindDTO activityWinningRecordFindDTO);
}
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:56
*/
@RestController
@RequestMapping("activityAttendanceRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
/**
* 判断是否还有抽奖机会
*
* @param activityId
* @param prizeType
* @param appUserDTO
* @return
*/
@GetMapping("/number_of_luckydraw/{activityId}/{prizeType}")
public ObjectRestResponse<Boolean> hasNumberOfLuckyDrawByType(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType,
AppUserDTO appUserDTO) {
Boolean state = activityAttendanceRecordBiz.hasNumberOfLuckyDrawByType(activityId,prizeType,appUserDTO.getUserid());
return ObjectRestResponse.succ(state);
}
@PostMapping("/attend/{activityId}")
public ObjectRestResponse<Void> attendActivity(@PathVariable(value = "activityId") Integer activityId,
@RequestParam(value = "activityName",required = false) String activityName, AppUserDTO appUserDTO){
activityAttendanceRecordBiz.attendActivity(activityId,activityName,appUserDTO);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("activityLuckyDraw")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityLuckyDrawController {
private final ActivityLuckyDrawBiz activityLuckyDrawBiz;
/**
* 报名
* @param activityLuckyDraw
* @param appUserDTO
* @return
*/
@PostMapping("/sign_up")
public ObjectRestResponse<Void> signUP(@RequestBody ActivityLuckyDraw activityLuckyDraw, AppUserDTO appUserDTO){
activityLuckyDraw.setUserId(appUserDTO.getUserid());
activityLuckyDraw.setPhone(appUserDTO.getUsername());
activityLuckyDrawBiz.signUp(activityLuckyDraw);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.LotteryVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("activityPrize")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeController {
private final ActivityPrizeBiz activityPrizeBiz;
/**
* 奖品类型获取
*
* @param prizeType
* @return
*/
@GetMapping("/find_prize")
public ObjectRestResponse<List<ActivityPrize>> findActivityPrizeByType(@RequestParam(value = "prizeType") Integer prizeType) {
List<ActivityPrize> activityPrizes = activityPrizeBiz.findActivityPrizeByType(prizeType);
return ObjectRestResponse.succ(activityPrizes);
}
/**
* 抽奖
*
* @param activityId
* @param appUserDTO
* @return
*/
@PostMapping("/lottery/{activityId}/{prizeType}")
public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType,
@RequestParam(value = "lottery") String lottery,
AppUserDTO appUserDTO) {
LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,lottery,appUserDTO);
return ObjectRestResponse.succ(lotteryVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("activityWinningRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import com.xxfc.platform.activity.bo.ActivityAttendanceRecordBo;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:56
*/
@RestController
@RequestMapping("admin/activityAttendanceRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordAdminController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
@PostMapping("/page")
public ObjectRestResponse<ActivityAttendanceRecordBo> listActivityAttendanceRecordWithPage(@RequestBody ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO){
ActivityAttendanceRecordBo activityAttendanceRecordBo = activityAttendanceRecordBiz.listActivityAttendanceRecord(activityAttendanceRecordFindDTO);
return ObjectRestResponse.succ(activityAttendanceRecordBo);
}
@PostMapping("/export")
public void exportActivityAttendanceRecordData(@RequestBody ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-attendance-record.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityAttendanceRecordBiz.exportActivityAttendanceRecordData(activityAttendanceRecordFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("admin/activityLuckyDraw")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityLuckyDrawAdminController {
private final ActivityLuckyDrawBiz activityLuckyDrawBiz;
/**
* 分页查询报名列表
*
* @param activityLuckDrawFindDTO
* @return
*/
@PostMapping("/page")
public ObjectRestResponse<PageDataVO<ActivityLuckyDraw>> listActivtyLuckyDrawWithPage(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = activityLuckyDrawBiz.listLuckDrawWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityLuckyDrawPageDataVO);
}
@PostMapping("/export")
public void exportActivityLuckyDrawData(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-luckdraw.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityLuckyDrawBiz.exportActivityLuckDrawData(activityLuckDrawFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.annotation.BeanValid;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("/admin/activityPrize")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeAdminController {
private final ActivityPrizeBiz activityPrizeBiz;
@PostMapping("/save")
public ObjectRestResponse<Void> savePrize(@BeanValid @RequestBody List<ActivityPrize> activityPrizes) {
activityPrizeBiz.saveActivityPrizes(activityPrizes);
return ObjectRestResponse.succ();
}
@GetMapping("/list")
public ObjectRestResponse<ActivityPrizeVo> listActivityPrize(){
ActivityPrizeVo activityPrizeVo = activityPrizeBiz.selectActivitys();
return ObjectRestResponse.succ(activityPrizeVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityWinningRecordBiz;
import com.xxfc.platform.activity.bo.ActivityWinningRecordBo;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("admin/activityWinningRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordAdminController {
private final ActivityWinningRecordBiz activityWinningRecordBiz;
@PostMapping("/page")
public ObjectRestResponse<ActivityWinningRecordBo> listActivityWinningRecordWithPage(@RequestBody ActivityWinningRecordFindDTO activityLuckDrawFindDTO){
ActivityWinningRecordBo activityWinningRecordBo = activityWinningRecordBiz.listActivityWinningRecordWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityWinningRecordBo);
}
@PostMapping("/export")
public void exportActivityWinningRecordData(@RequestBody ActivityWinningRecordFindDTO activityWinningRecordFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-winnging-record.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityWinningRecordBiz.exportActivityWinngingData(activityWinningRecordFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
<?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.xxfc.platform.activity.mapper.ActivityAttendanceRecordMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityAttendanceRecord" id="activityAttendanceRecordMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="phone" column="phone"/>
<result property="activityId" column="activity_id"/>
<result property="activityName" column="activity_name"/>
<result property="positionId" column="position_id"/>
<result property="positionName" column="position_name"/>
<result property="onlineLotteryNum" column="online_lottery_num"/>
<result property="localeLotteryNum" column="locale_lottery_num"/>
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectActivityAttendanceRecord"
resultType="com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO">
select apu.user_id as `userId`,
apu.`current_progress` as `amount`,
apu.`status`,
apu.crt_time as `attendTime`,
aar.user_name as `userName`,
aar.phone,
aar.position_name as `positionName`,
IFNULL(apr.inviteNum,0),
awr.prizes
from (select `user_id`,`popularize_id`,`current_progress`,`status`,`crt_time` from activity_popularize_user where
`popularize_id`=#{activityId}
<if test="status!=null">
and `status`=#{status}
</if>
<if test="startTime!=null and endTime!=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
`crt_time`>=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
) as `apu`
inner join (select * from `activity_attendance_record` where `activity_id`=#{activityId}
<if test="phone!=null and phone!=''">
and `phone`=#{phone}
</if>
) as `aar`
on aar.user_id = apu.user_id and apu.popularize_id = aar.activity_id
left join (select `major_user_id`, count(minor_user_id) as `inviteNum`
from activity_popularize_relation where `popularize_id`=#{activityId}
group by major_user_id) as `apr` on apr.major_user_id = apu.user_id
left join (select `user_id`, `activity_id`, group_concat(`prize_name`) as `prizes`
from `activity_winning_record` where `activity_id`=#{activityId}
group by user_id, `activity_id`) as `awr`
on awr.user_id = apu.user_id and awr.activity_id = apu.popularize_id
order by apu.current_progress desc
</select>
<update id="updateLotteryNumByActivityIdAndUserIdAndPrizeType">
update `activity_attendance_record`
<if test="prizeType==1">
set `online_lottery_num`=`online_lottery_num`-1
</if>
<if test="prizeType==2">
set `locale_lottery_num`=`locale_lottery_num`-1
</if>
where `activity_id`=#{activityId} and `user_id`=#{userId}
<if test="prizeType==1">
and `online_lottery_num`>0
</if>
<if test="prizeType==2">
and `locale_lottery_num`>0
</if>
</update>
</mapper>
\ No newline at end of file
<?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.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityLuckyDraw" id="activityLuckyDrawMap">
<result property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="phone" column="phone"/>
<result property="activityId" column="activity_id"/>
<result property="activityName" column="activity_name"/>
<result property="ticketNum" column="ticket_num"/>
<result property="crtTime" column="crt_time"/>
<result property="userId" column="user_id"/>
</resultMap>
<select id="listLuckDrawWithPage" resultMap="activityLuckyDrawMap">
select * from `activity_lucky_draw` where 1=1
<if test="activityId!=null">
and `activity_id`=#{activityId}
</if>
<if test="phone!=null and phone!=''">
and `phone`=#{phone}
</if>
<if test="startTime!=null and endTime!=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
`crt_time`>=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
order by `crt_time` desc
</select>
</mapper>
\ No newline at end of file
<?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.xxfc.platform.activity.mapper.ActivityPrizeMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPrize" id="activityPrizeMap">
<result property="id" column="id"/>
<result property="serialNumber" column="serial_number"/>
<result property="name" column="name"/>
<result property="iconPath" column="icon_path"/>
<result property="dayMaxUse" column="day_max_use"/>
<result property="totalStock" column="total_stock"/>
<result property="probability" column="probability"/>
<result property="type" column="type"/>
<result property="crtTime" column="crt_time"/>
<result property="goodsId" column="goods_id"/>
<result property="prizeGoodsType" column="prize_goods_type"/>
</resultMap>
<update id="updatePrizeStock">
update `activity_prize` set `total_stock`=`total_stock`-1 where `type`=#{prizeType} and `serial_number`=#{serialNumber} and `total_stock`>0;
</update>
</mapper>
\ No newline at end of file
<?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.xxfc.platform.activity.mapper.ActivityWinningRecordMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityWinningRecord" id="activityWinningRecordMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="activityId" column="activity_id"/>
<result property="prizeType" column="prize_type"/>
<result property="prizeName" column="prize_name"/>
<result property="iconPath" column="icon_path"/>
<result property="hasWinning" column="has_winning"/>
<result property="expiryDateCode" column="expiry_date_code"/>
<result property="crtTime" column="crt_time"/>
<result property="lotteryTime" column="lottery_time"/>
<result property="goodsId" column="goods_id"/>
</resultMap>
<select id="selectActivityWinningRecord" resultType="com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO">
select aar.user_id as `userId`,aar.user_name as `userName`, aar.phone as `phone`,aar.position_name as `positionName`,awr.* from `activity_winning_record` as `awr`
left join `activity_attendance_record` as `aar` ON aar.user_id=awr.user_id and aar.activity_id=awr.activity_id
where 1=1
<if test="activityId!=null">
and awr.`activity_id`=#{activityId}
</if>
<if test="hasWinning!=null">
and awr.`has_winning`=#{hasWinning}
</if>
<if test="phone!=null and phone!=''">
and aar.`phone`=#{phone}
</if>
<if test="prizeType!=null">
and awr.`prize_type`=#{prizeType}
</if>
<if test="startTime!=null and endTime!=null">
and awr.`lottery_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
awr.`lottery_time` >=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
awr.`lottery_time` <=#{endTime}
]]>
</if>
order by awr.`lottery_time` desc
</select>
</mapper>
\ No newline at end of file
...@@ -357,6 +357,22 @@ public class OrderRentVehicleDetail implements Serializable { ...@@ -357,6 +357,22 @@ public class OrderRentVehicleDetail implements Serializable {
@ApiModelProperty(value = "延期结束时间") @ApiModelProperty(value = "延期结束时间")
private Long delayAddEndTime; private Long delayAddEndTime;
public Long obtainRealEndTime() {
if(null != getDelayAddEndTime()) {
return getDelayAddEndTime();
}else {
return getEndTime();
}
}
// public Integer obtainRealDayNum() {
// if(null != getDelayAddDays()) {
// return (getDelayAddDays() + getDayNum());
// }else {
// return getDayNum();
// }
// }
public Integer obtainRealDayNum() { public Integer obtainRealDayNum() {
return this.dayNum + this.delayAddDays; return this.dayNum + this.delayAddDays;
} }
......
...@@ -341,8 +341,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -341,8 +341,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
DedDetailDTO dedDetailDTO = new DedDetailDTO(); DedDetailDTO dedDetailDTO = new DedDetailDTO();
//提前还车,结束时间大于当前时间 //提前还车,结束时间大于当前时间
Long nowTime = System.currentTimeMillis(); Long nowTime = System.currentTimeMillis();
Long endTime = (null == orderPageVO.getOrderRentVehicleDetail().getDelayAddEndTime()) ? Long endTime = orderPageVO.getOrderRentVehicleDetail().obtainRealEndTime();
orderPageVO.getOrderRentVehicleDetail().getEndTime() : orderPageVO.getOrderRentVehicleDetail().getDelayAddEndTime();
Long startTime = orderPageVO.getOrderRentVehicleDetail().getStartTime(); Long startTime = orderPageVO.getOrderRentVehicleDetail().getStartTime();
//设置使用天数 //设置使用天数
......
...@@ -517,13 +517,13 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> { ...@@ -517,13 +517,13 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
csv.setOverAmountList(inProgressVO.getOverAmountList()); csv.setOverAmountList(inProgressVO.getOverAmountList());
csv.setViolateAmountList(inProgressVO.getViolateAmountList()); csv.setViolateAmountList(inProgressVO.getViolateAmountList());
if(csv.getUsedDayNum() == orderMQDTO.getOrderRentVehicleDetail().getDayNum()) { if(csv.getUsedDayNum() == orderMQDTO.getOrderRentVehicleDetail().obtainRealDayNum()) {
csv.setType(CostDetailExtend.FINLISH_ONTIME); csv.setType(CostDetailExtend.FINLISH_ONTIME);
}else if(csv.getUsedDayNum() > orderMQDTO.getOrderRentVehicleDetail().getDayNum()){ }else if(csv.getUsedDayNum() > orderMQDTO.getOrderRentVehicleDetail().obtainRealDayNum()){
csv.setType(CostDetailExtend.FINLISH_DELAY); csv.setType(CostDetailExtend.FINLISH_DELAY);
}else if(csv.getUsedDayNum() < orderMQDTO.getOrderRentVehicleDetail().getDayNum()){ }else if(csv.getUsedDayNum() < orderMQDTO.getOrderRentVehicleDetail().obtainRealDayNum()){
csv.setType(CostDetailExtend.FINLISH_ADVANCE); csv.setType(CostDetailExtend.FINLISH_ADVANCE);
} }
......
...@@ -237,7 +237,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -237,7 +237,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId()); OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId());
if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) { if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) {
boolean flag = getTodayTime(orderRentVehicleDetail.getStartTime(), orderRentVehicleDetail.getEndTime()); boolean flag = getTodayTime(orderRentVehicleDetail.getStartTime(), orderRentVehicleDetail.obtainRealEndTime());
if (!flag) { if (!flag) {
return ObjectRestResponse.createFailedResult(3502, "已超过预定还车时间,不能进行交车操作!"); return ObjectRestResponse.createFailedResult(3502, "已超过预定还车时间,不能进行交车操作!");
} }
......
...@@ -393,43 +393,81 @@ public class OrderCalculateBiz { ...@@ -393,43 +393,81 @@ public class OrderCalculateBiz {
InProgressVO inProgressVO = new InProgressVO(); InProgressVO inProgressVO = new InProgressVO();
BigDecimal topAmount = BigDecimal.ZERO; BigDecimal topAmount = BigDecimal.ZERO;
//缓冲取消时间(一个小时) if(SYS_TRUE.equals(orderPageVO.getHasPay()) && null != orderPageVO.getPayTime()) {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData(); //缓冲取消时间(一个小时)
Long autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.CANCEL_TIME_BUFFER).getDetail()); Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
autoCancelTime = autoCancelTime * 60L * 1000L; Long autoCancelTime = Long.valueOf(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.CANCEL_TIME_BUFFER).getDetail());
autoCancelTime = autoCancelTime * 60L * 1000L;
//判断是否支付超过缓冲取消时间(一个小时)
Long orderCrtLag = System.currentTimeMillis() - orderPageVO.getPayTime(); //判断是否支付超过缓冲取消时间(一个小时)
Boolean overCancelBuffer = (orderCrtLag > autoCancelTime)? Boolean.TRUE: Boolean.FALSE; Long orderCrtLag = System.currentTimeMillis() - orderPageVO.getPayTime();
Boolean overCancelBuffer = (orderCrtLag > autoCancelTime)? Boolean.TRUE: Boolean.FALSE;
switch (orderTypeEnum) {
case RENT_VEHICLE: switch (orderTypeEnum) {
case RENT_VEHICLE:
Long timeLag = orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis();
Long timeLag = orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis();
VehicleItemDTO vehicleItemDTO = BeanUtil.toBean(orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(orderPageVO.getId());
}}), VehicleItemDTO.class);
//融入日期价格
List<VehicleModelCalendarPriceDTO> vmcpds = JSONUtil.toList(JSONUtil.parseArray(vehicleItemDTO.getDetail()), VehicleModelCalendarPriceDTO.class);
if(timeLag < 0 && overCancelBuffer) {
Integer useDays = getIncludeDays(orderPageVO.getOrderRentVehicleDetail().getStartTime(), DateTime.now().getMillis());
OrderAccountDetail oad = new OrderAccountDetail();
inProgressVO = inProgressCalculate(orderPageVO, vehicleItemDTO, orderPageVO.getOrderRentVehicleDetail(), useDays, oad, Boolean.FALSE);
topAmount = vehicleItemDTO.getTopAmount(useDays);
totalDeductAmount = oad.realTotalDeduct();
totalRefundAmount = oad.getOrderAmount().add(oad.getDepositAmount());
refundDesc = inProgressVO.getViolateDesc();
}else {
String key = RENT_REFUND;
BigDecimal deductionAmount = orderAccountBiz.calculateDeduction(vehicleItemDTO.getBuyAmount()
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ key
, refundDescBuilder);
if(!overCancelBuffer) {
deductionAmount = BigDecimal.ZERO;
refundDescBuilder = new StringBuilder("");
}
VehicleItemDTO vehicleItemDTO = BeanUtil.toBean(orderItemBiz.selectOne(new OrderItem(){{ topAmount = vehicleItemDTO.getTopAmount(0);
setType(ItemTypeEnum.VEHICLE_MODEL.getCode()); totalDeductAmount = (topAmount.compareTo(deductionAmount) < 0) ? topAmount: deductionAmount;
setOrderId(orderPageVO.getId()); totalRefundAmount = orderPageVO.getRealAmount().subtract(totalDeductAmount);
}}), VehicleItemDTO.class); refundDesc = refundDescBuilder.toString();
}
//融入日期价格 break;
List<VehicleModelCalendarPriceDTO> vmcpds = JSONUtil.toList(JSONUtil.parseArray(vehicleItemDTO.getDetail()), VehicleModelCalendarPriceDTO.class); case TOUR:
//判断是省内还是省外
String key = TOUR_IN_REFUND;
if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
key = TOUR_REFUND;
}
if(timeLag < 0 && overCancelBuffer) { OrderItem adultItem = orderItemBiz.selectOne(new OrderItem(){{
Integer useDays = getIncludeDays(orderPageVO.getOrderRentVehicleDetail().getStartTime(), DateTime.now().getMillis()); setType(ItemTypeEnum.TOUR_ADULT.getCode());
OrderAccountDetail oad = new OrderAccountDetail(); setOrderId(orderPageVO.getId());
inProgressVO = inProgressCalculate(orderPageVO, vehicleItemDTO, orderPageVO.getOrderRentVehicleDetail(), useDays, oad, Boolean.FALSE); }});
topAmount = vehicleItemDTO.getTopAmount(useDays); OrderItem childItem = orderItemBiz.selectOne(new OrderItem(){{
totalDeductAmount = oad.realTotalDeduct(); setType(ItemTypeEnum.TOUR_CHILD.getCode());
totalRefundAmount = oad.getOrderAmount().add(oad.getDepositAmount()); setOrderId(orderPageVO.getId());
refundDesc = inProgressVO.getViolateDesc(); }});
}else {
String key = RENT_REFUND; BigDecimal adultItemAmount = (null == adultItem)? BigDecimal.ZERO: adultItem.getRealAmount();
BigDecimal childItemAmount = (null == childItem)? BigDecimal.ZERO: childItem.getRealAmount();
BigDecimal deductionAmount = orderAccountBiz.calculateDeduction(vehicleItemDTO.getBuyAmount() BigDecimal deductionAmount = orderAccountBiz.calculateDeduction(adultItemAmount.add(childItemAmount)
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis() , orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ key , DictionaryKey.APP_ORDER+ "_"+ key
, refundDescBuilder); , refundDescBuilder);
...@@ -438,52 +476,17 @@ public class OrderCalculateBiz { ...@@ -438,52 +476,17 @@ public class OrderCalculateBiz {
refundDescBuilder = new StringBuilder(""); refundDescBuilder = new StringBuilder("");
} }
topAmount = vehicleItemDTO.getTopAmount(0); topAmount = adultItemAmount.add(childItemAmount);
totalDeductAmount = (topAmount.compareTo(deductionAmount) < 0) ? topAmount: deductionAmount; totalDeductAmount = deductionAmount;
totalRefundAmount = orderPageVO.getRealAmount().subtract(totalDeductAmount); totalRefundAmount = orderPageVO.getRealAmount().subtract(deductionAmount);
refundDesc = refundDescBuilder.toString(); refundDesc = refundDescBuilder.toString();
} break;
default:
break; break;
case TOUR: }
//判断是省内还是省外
String key = TOUR_IN_REFUND;
if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
key = TOUR_REFUND;
}
OrderItem adultItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.TOUR_ADULT.getCode());
setOrderId(orderPageVO.getId());
}});
OrderItem childItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.TOUR_CHILD.getCode());
setOrderId(orderPageVO.getId());
}});
BigDecimal adultItemAmount = (null == adultItem)? BigDecimal.ZERO: adultItem.getRealAmount();
BigDecimal childItemAmount = (null == childItem)? BigDecimal.ZERO: childItem.getRealAmount();
BigDecimal deductionAmount = orderAccountBiz.calculateDeduction(adultItemAmount.add(childItemAmount)
, orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ key
, refundDescBuilder);
if(!overCancelBuffer) {
deductionAmount = BigDecimal.ZERO;
refundDescBuilder = new StringBuilder("");
}
topAmount = adultItemAmount.add(childItemAmount);
totalDeductAmount = deductionAmount;
totalRefundAmount = orderPageVO.getRealAmount().subtract(deductionAmount);
refundDesc = refundDescBuilder.toString();
break;
default:
break;
} }
OrderRefundPriceVO orpv = new OrderRefundPriceVO(); OrderRefundPriceVO orpv = new OrderRefundPriceVO();
orpv.setRealAmount(orderPageVO.getRealAmount()); orpv.setRealAmount(orderPageVO.getRealAmount());
orpv.setRefundAmount(totalRefundAmount); orpv.setRefundAmount(totalRefundAmount);
......
...@@ -128,8 +128,14 @@ public class OrderDelayBiz { ...@@ -128,8 +128,14 @@ public class OrderDelayBiz {
List<VMCalendarPriceCostDTO> delayAmountList; List<VMCalendarPriceCostDTO> delayAmountList;
if(delayAddDays > 0) { if(delayAddDays > 0) {
VehicleItemDTO vehicleItemDTO = BeanUtil.toBean(orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(orderPageVO.getId());
}}), VehicleItemDTO.class);
List<VMCalendarPriceCostDTO> vmcpcds = vehicleItemDTO.getVehicleDetail();
//获得延期天数费用 //获得延期天数费用
delayAmountList = orderItemBiz.getOverAmountList(DateUtil.date(orvd.getEndTime()), delayAddDays, orvd.getModelId(), orderPageVO.getUserId()); delayAmountList = orderItemBiz.getOverAmountList(vmcpcds.get(vmcpcds.size() - 1).getDate(), delayAddDays, orvd.getModelId(), orderPageVO.getUserId());
//处理免费天数和免费金额 //处理免费天数和免费金额
delayAmountList.parallelStream().forEach( vmcpcd -> { delayAmountList.parallelStream().forEach( vmcpcd -> {
vmcpcd.setValidFreeDays(vmcpcd.getFreeDays()); vmcpcd.setValidFreeDays(vmcpcd.getFreeDays());
......
...@@ -506,7 +506,7 @@ public class OrderMsgBiz { ...@@ -506,7 +506,7 @@ public class OrderMsgBiz {
private void handelSmsParam(OrderRentVehicleDetail orvd, BaseOrder baseOrder, List<String> smsParams, AppUserDTO appUserDTO, int handelType) { private void handelSmsParam(OrderRentVehicleDetail orvd, BaseOrder baseOrder, List<String> smsParams, AppUserDTO appUserDTO, int handelType) {
if(RENT_DELIVERY == handelType) { if(RENT_DELIVERY == handelType) {
smsParams.add(appUserDTO.obtainRealname()); smsParams.add(appUserDTO.obtainRealname());
smsParams.add(DateUtil.formatDateTime(DateUtil.date(orvd.getEndTime()))); smsParams.add(DateUtil.formatDateTime(DateUtil.date(orvd.obtainRealEndTime())));
smsParams.add(orvd.getEndAddr()); smsParams.add(orvd.getEndAddr());
smsParams.add(baseOrder.getName()); smsParams.add(baseOrder.getName());
smsParams.add(appUserDTO.getUsername()); smsParams.add(appUserDTO.getUsername());
...@@ -516,8 +516,8 @@ public class OrderMsgBiz { ...@@ -516,8 +516,8 @@ public class OrderMsgBiz {
smsParams.add(orvd.getStartAddr()); smsParams.add(orvd.getStartAddr());
smsParams.add(orvd.getEndAddr()); smsParams.add(orvd.getEndAddr());
smsParams.add(DateUtil.formatDateTime(DateUtil.date(orvd.getStartTime()))); smsParams.add(DateUtil.formatDateTime(DateUtil.date(orvd.getStartTime())));
smsParams.add(DateUtil.formatDateTime(DateUtil.date(orvd.getEndTime()))); smsParams.add(DateUtil.formatDateTime(DateUtil.date(orvd.obtainRealEndTime())));
smsParams.add(orvd.getDayNum().toString()); smsParams.add(orvd.obtainRealDayNum().toString());
smsParams.add(appUserDTO.getUsername()); smsParams.add(appUserDTO.getUsername());
} }
} }
......
...@@ -102,7 +102,8 @@ public class RentDepositJobHandler extends IJobHandler { ...@@ -102,7 +102,8 @@ public class RentDepositJobHandler extends IJobHandler {
setType(crosstownTypeEnum); setType(crosstownTypeEnum);
}}); }});
if(crosstown.getCrtTime().compareTo(System.currentTimeMillis() - (rentDepositAutoRefundTime * 60L * 1000L)) < 0) { //提前31分钟 31 * 60L * 1000L 退钱
if(crosstown.getCrtTime().compareTo(System.currentTimeMillis() - (rentDepositAutoRefundTime * 60L * 1000L - (31 * 60L * 1000L))) < 0) {
orderAccountBiz.handleRentDepositMargin(baseOrder, orvd, crosstown); orderAccountBiz.handleRentDepositMargin(baseOrder, orvd, crosstown);
} }
......
...@@ -434,9 +434,9 @@ public class BackStageOrderController extends CommonBaseController implements Us ...@@ -434,9 +434,9 @@ public class BackStageOrderController extends CommonBaseController implements Us
bo.setOrder(orderPageVO); bo.setOrder(orderPageVO);
bo.setBookVehicleVO(new BookVehicleVO() {{ bo.setBookVehicleVO(new BookVehicleVO() {{
setBookStartDate(YMR_SLASH_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.getStartTime()), ZoneOffset.ofHours(8)))); setBookStartDate(YMR_SLASH_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.getStartTime()), ZoneOffset.ofHours(8))));
setBookEndDate(YMR_SLASH_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.getEndTime()), ZoneOffset.ofHours(8)))); setBookEndDate(YMR_SLASH_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.obtainRealEndTime()), ZoneOffset.ofHours(8))));
setBookStartDateTime(DATE_TIME_LINE_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.getStartTime()), ZoneOffset.ofHours(8)))); setBookStartDateTime(DATE_TIME_LINE_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.getStartTime()), ZoneOffset.ofHours(8))));
setBookEndDateTime(DATE_TIME_LINE_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.getEndTime()), ZoneOffset.ofHours(8)))); setBookEndDateTime(DATE_TIME_LINE_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(bo.obtainRealEndTime()), ZoneOffset.ofHours(8))));
}}); }});
List<OrderAccompanyDTO> oads = JSONUtil.toList(JSONUtil.parseArray(orderItemBiz.selectOne(new OrderItem() {{ List<OrderAccompanyDTO> oads = JSONUtil.toList(JSONUtil.parseArray(orderItemBiz.selectOne(new OrderItem() {{
......
...@@ -128,14 +128,14 @@ public class ServiceTest { ...@@ -128,14 +128,14 @@ public class ServiceTest {
public void testOrderReceivedStatisticsJobHandler(){ public void testOrderReceivedStatisticsJobHandler(){
cn.hutool.core.date.DateTime dateTime = DateUtil.parse("2019-11-29", "yyyy-MM-dd"); cn.hutool.core.date.DateTime dateTime = DateUtil.parse("2019-11-29", "yyyy-MM-dd");
// cn.hutool.core.date.DateTime offset = DateUtil.offset(dateTime, DateField.DAY_OF_MONTH, 1); // cn.hutool.core.date.DateTime offset = DateUtil.offset(dateTime, DateField.DAY_OF_MONTH, 1);
orderReceivedStatisticsJobHandler.execute("2019-11-29"); /* orderReceivedStatisticsJobHandler.execute("2019-11-29");*/
/* LocalDate startLocalDate = LocalDate.of(2019, 10, 1); LocalDate startLocalDate = LocalDate.of(2019, 10, 1);
LocalDate endLocalDate = LocalDate.of(2019,11,29); LocalDate endLocalDate = LocalDate.of(2019,11,30);
while (startLocalDate.isBefore(endLocalDate)){ while (startLocalDate.isBefore(endLocalDate)){
String dateStr = startLocalDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String dateStr = startLocalDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
startLocalDate = startLocalDate.plusDays(1); startLocalDate = startLocalDate.plusDays(1);
orderReceivedStatisticsJobHandler.execute(dateStr); orderReceivedStatisticsJobHandler.execute(dateStr);
}*/ }
} }
} }
...@@ -400,7 +400,7 @@ public class VehicleModelCalendarPriceBiz extends BaseBiz<VehicleModelCalendarPr ...@@ -400,7 +400,7 @@ public class VehicleModelCalendarPriceBiz extends BaseBiz<VehicleModelCalendarPr
log.info("参数:【{}==当前时间:{}==价格:{}==折扣:{}】", festivalDayMap, current_date, vehicle_price, discount); log.info("参数:【{}==当前时间:{}==价格:{}==折扣:{}】", festivalDayMap, current_date, vehicle_price, discount);
Map<String, Object> vehicle_price_days_map = new HashMap<>(3); Map<String, Object> vehicle_price_days_map = new HashMap<>(3);
Integer free_days = DEFAULT_FREE_DAYS; Integer free_days = DEFAULT_FREE_DAYS;
vehicle_price_days_map.put(BASE_PRICE_VAL, vehicle_price); //vehicle_price_days_map.put(BASE_PRICE_VAL, vehicle_price);
if (MapUtil.isNotEmpty(festivalDayMap)) { if (MapUtil.isNotEmpty(festivalDayMap)) {
VehicleModelHolidayPriceDTO vehicleModelHolidayPriceDTO = festivalDayMap.get(current_date); VehicleModelHolidayPriceDTO vehicleModelHolidayPriceDTO = festivalDayMap.get(current_date);
if (Objects.nonNull(vehicleModelHolidayPriceDTO)) { if (Objects.nonNull(vehicleModelHolidayPriceDTO)) {
...@@ -408,6 +408,7 @@ public class VehicleModelCalendarPriceBiz extends BaseBiz<VehicleModelCalendarPr ...@@ -408,6 +408,7 @@ public class VehicleModelCalendarPriceBiz extends BaseBiz<VehicleModelCalendarPr
free_days = vehicleModelHolidayPriceDTO.getFreeDays() == null ? free_days : vehicleModelHolidayPriceDTO.getFreeDays(); free_days = vehicleModelHolidayPriceDTO.getFreeDays() == null ? free_days : vehicleModelHolidayPriceDTO.getFreeDays();
} }
} }
vehicle_price_days_map.put(BASE_PRICE_VAL, vehicle_price);
vehicle_price = vehicle_price.multiply(new BigDecimal(Objects.toString(discount / 100.00))); vehicle_price = vehicle_price.multiply(new BigDecimal(Objects.toString(discount / 100.00)));
vehicle_price_days_map.put(PRICE_VAL, vehicle_price); vehicle_price_days_map.put(PRICE_VAL, vehicle_price);
vehicle_price_days_map.put(DAYS_VAL, free_days); vehicle_price_days_map.put(DAYS_VAL, free_days);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment