Commit dd7a9d63 authored by jiaorz's avatar jiaorz

Merge branch 'master-activity-bk' into dev

# Conflicts:
#	ace-modules/ace-admin/src/main/java/com/github/wxiaoqi/security/admin/biz/AppUserRelationBiz.java
#	xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityPopularizeBiz.java
parents d4ece992 3622479a
......@@ -15,6 +15,8 @@ public class RabbitConstant {
public static final String ORDER_TOPIC = ORDER+ TOPIC_EXC;
public static final String INTEGRAL = "integral";
public static final String INTEGRAL_TOPIC = INTEGRAL + TOPIC_EXC;
public static final String ACTIVITY_PRIZE="activity:prize";
public static final String ACTIVITY_PRIZE_TOPIC=ACTIVITY_PRIZE+TOPIC_EXC;
/**************************key*********************************/
//用户
......@@ -35,11 +37,15 @@ public class RabbitConstant {
public static final String KEY_WALLET_WITH_DRAW="wallet.withdraw";
//抽奖
public static final String KEY_ACTIVITY_PRIZE_RECORD="prize:record";
static {
exchangeTopicSet = new HashSet<String>() {{
add(ADMIN_TOPIC);
add(ORDER_TOPIC);
add(INTEGRAL_TOPIC);
add(ACTIVITY_PRIZE_TOPIC);
}};
}
}
package com.github.wxiaoqi.security.admin.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
......@@ -16,15 +18,21 @@ public class AppUserLogRemarkDTO {
private String remark;
/**
* 创建时间
* 日志时间
*/
private Date crtTime;
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date time;
/**
* 用户id
*/
private Integer levelId;
/**
* 照片url多张已","分割
*/
private String photos;
}
package com.github.wxiaoqi.security.admin.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.code.IdentityDialect;
......@@ -22,9 +24,15 @@ public class AppStaffUser {
@Column(name = "su_id")
@ApiModelProperty("员工app账号id")
private Integer suId;
@Column(name = "su_phone")
@ApiModelProperty("员工手机号")
private String suPhone;
@Column(name = "u_name")
@ApiModelProperty("客户姓名")
private String uName;
@Column(name = "u_id")
@ApiModelProperty("客户id")
private Integer uid;
@ApiModelProperty("客户手机")
private String phone;
@ApiModelProperty("客户公司")
......@@ -40,4 +48,5 @@ public class AppStaffUser {
@Column(name = "is_del")
@ApiModelProperty("状态:0-未删除 1-已删除")
private Integer isDel;
private Integer status;
}
package com.github.wxiaoqi.security.admin.entity;
import lombok.Data;
/**
* @Auther: Administrator
* @Date: 2019/12/17 15:35
* @Description:
*/
@Data
public class AppStaffUserDTO {
/**
* 员工id
*/
private Integer suId;
/**
* 员工手机号
*/
private String suPhone;
/**
* 客户id
*/
private Integer uid;
/**
* 下级客户姓名
*/
private String uName;
/**
* 下级客户手机号
*/
private String phone;
/**
* 下级身份
*/
private Integer positionId;
}
package com.github.wxiaoqi.security.admin.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
......@@ -9,6 +11,7 @@ import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
import java.util.List;
/**
* APP员工客户日志备注表
......@@ -32,4 +35,16 @@ public class AppUserLogRemark {
@Column(name = "level_id")
private Integer levelId;
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date time;
/**
* 照片url地址","分割
*/
private String photos;
/**
* 照片url地址
*/
private List<String> photoList;
}
package com.github.wxiaoqi.security.admin.entity;
import lombok.Data;
/**
* 修改后的用户信息
* @author Administrator
* @Auther: Administrator
* @Date: 2019/12/17 18:24
* @Description:
*/
@Data
public class ModifiedUsers {
private Integer userid;
private String phone;
private String name;
private Integer positionId;
}
package com.github.wxiaoqi.security.admin.biz;
import com.alibaba.druid.sql.visitor.functions.If;
import cn.hutool.core.collection.CollectionUtil;
import com.github.wxiaoqi.security.admin.entity.AppStaffUser;
import com.github.wxiaoqi.security.admin.entity.AppStaffUserDTO;
import com.github.wxiaoqi.security.admin.entity.AppStaffUserVo;
import com.github.wxiaoqi.security.admin.entity.ModifiedUsers;
import com.github.wxiaoqi.security.admin.mapper.AppStaffUserMapper;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xxfc.platform.im.utils.StringUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -19,16 +24,15 @@ import java.util.List;
* @author Administrator
*/
@Service
@RequiredArgsConstructor(onConstructor_={@Autowired})
@RequiredArgsConstructor(onConstructor_ = {@Autowired})
@Slf4j
public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> {
private final AppUserLoginBiz appUserLoginBiz;
private final AppUserDetailBiz appUserDetailBiz;
private final Integer POSITION_ID=4;
public List<AppStaffUser> getAll(Integer id) {
Example example = new Example(AppStaffUser.class);
example.createCriteria().andEqualTo("suId",id).andEqualTo("isDel",0);
return selectByExample(example);
public List<AppStaffUser> getAll(Integer id, String username) {
return mapper.selectByBysuIdOrUsername(id,username);
}
@Override
......@@ -38,7 +42,6 @@ public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> {
}
@Override
public int updateSelectiveByIdRe(AppStaffUser appStaffUser) {
appStaffUser.setUpdTime(new Date());
......@@ -46,32 +49,98 @@ public class AppStaffUserBiz extends BaseBiz<AppStaffUserMapper, AppStaffUser> {
}
public AppStaffUser findOne(AppStaffUser appStaffUser) {
Example example= new Example(AppStaffUser.class);
Example example = new Example(AppStaffUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("isDel",0);
if (appStaffUser.getId()!=null) {
criteria.andEqualTo("id",appStaffUser.getId());
return mapper.selectOneByExample(example);
criteria.andEqualTo("isDel", 0);
if (appStaffUser.getId() != null) {
criteria.andEqualTo("id", appStaffUser.getId());
}
if (appStaffUser.getPhone() != null) {
criteria.andEqualTo("phone", appStaffUser.getPhone());
}
if (appStaffUser.getPhone()!=null){
criteria.andEqualTo("phone",appStaffUser.getPhone());
AppStaffUser staffUser = mapper.selectOneByExample(example);
if (staffUser!=null) {
List<AppStaffUser> appStaffUsers = mapper.selectByExample(example);
if (CollectionUtil.isNotEmpty(appStaffUsers)) {
AppStaffUser staffUser = appStaffUsers.get(0);
AppStaffUserVo appStaffUserVo = new AppStaffUserVo();
BeanUtils.copyProperties(staffUser,appStaffUserVo);
BeanUtils.copyProperties(staffUser, appStaffUserVo);
Integer suId = staffUser.getSuId();
AppUserVo userInfoById = appUserDetailBiz.getUserInfoById(suId);
appStaffUserVo.setEmployeeName(userInfoById.getRealname());
appStaffUserVo.setEmployeePhone(userInfoById.getUsername());
//上级员工信息
if (suId != null && suId != 0 && appStaffUser.getPhone() != null){
AppUserVo spuser = appUserDetailBiz.getUserInfoById(suId);
appStaffUserVo.setEmployeeName(spuser.getRealname());
appStaffUserVo.setEmployeePhone(spuser.getUsername());
}
//客户信息
Integer uid = staffUser.getUid();
if (uid != null && uid > 0){
AppUserVo user = appUserDetailBiz.getUserInfoById(uid);
appStaffUserVo.setUName(StringUtil.isEmpty(user.getRealname())?user.getNickname():user.getRealname());
appStaffUserVo.setPhone(user.getUsername());
}
return appStaffUserVo;
}
return null;
}
public boolean select(AppStaffUser appStaffUser) {
Example example = new Example(AppStaffUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("phone", appStaffUser.getPhone())
.andEqualTo("isDel", 0);
List<AppStaffUser> appStaffUsers = mapper.selectByExample(example);
return CollectionUtil.isEmpty(appStaffUsers) ? true : false;
}
public void update(AppStaffUser staffUser, Integer userid) {
Example example = new Example(AppStaffUser.class);
example.createCriteria().andEqualTo("id", staffUser.getId()).andEqualTo("suId", userid);
mapper.updateByExampleSelective(staffUser, example);
}
return null;
public void updateByPhone(AppStaffUser staffUser) {
Example example = new Example(AppStaffUser.class);
example.createCriteria().andEqualTo("phone",staffUser.getPhone());
mapper.updateByExampleSelective(staffUser, example);
}
/**
* 添加用户关系
* @param staffUserDTO
*/
public void addAppStaffUser(AppStaffUserDTO staffUserDTO){
log.info("staffUserDTO={}",staffUserDTO);
AppUserVo superAppUserVo= appUserDetailBiz.getUserInfoById(staffUserDTO.getSuId());
AppUserVo userInfoById = appUserDetailBiz.getUser(staffUserDTO.getUid());
log.info("userInfoById={}",userInfoById);
AppStaffUser appStaffUser = new AppStaffUser();
appStaffUser.setSuId(superAppUserVo.getUserid());
appStaffUser.setSuPhone(superAppUserVo.getUsername());
appStaffUser.setUid(staffUserDTO.getUid());
appStaffUser.setUName(StringUtil.isEmpty(userInfoById.getRealname()) ? userInfoById.getNickname() : userInfoById.getRealname());
appStaffUser.setPhone(userInfoById.getUsername());
appStaffUser.setStatus(1);
if (select(appStaffUser)) {
insertSelective(appStaffUser);
}else {
updateByPhone(appStaffUser);
}
}
/**
* 修改客户关系,根据修改后的用户信息
* @param modifiedUsers
*/
public void updateByModifiedUsers(ModifiedUsers modifiedUsers){
if (POSITION_ID.equals(modifiedUsers.getPositionId())) {
mapper.updateByPositionId(modifiedUsers);
}else {
mapper.update(modifiedUsers);
}
}
}
......@@ -202,4 +202,9 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
org.springframework.beans.BeanUtils.copyProperties(appUserDetail,appUserVo);
return appUserVo;
}
public AppUserVo getUser(Integer userId) {
return mapper.getUser(userId);
}
}
package com.github.wxiaoqi.security.admin.biz;
import cn.hutool.core.collection.CollectionUtil;
import com.github.wxiaoqi.security.admin.dto.AppUserLogRemarkDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserLogRemark;
import com.github.wxiaoqi.security.admin.mapper.AppUserLogRemarkMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
......@@ -14,6 +16,8 @@ import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Transactional
@Service
......@@ -44,8 +48,17 @@ public class AppUserLogRemarkBiz extends BaseBiz<AppUserLogRemarkMapper, AppUser
Example example = new Example(AppUserLogRemark.class);
example.createCriteria().andEqualTo("levelId", levelId);
example.orderBy("time").desc().orderBy("crtTime").desc();
List<AppUserLogRemark> list = selectByExample(example);
if (CollectionUtil.isNotEmpty(list)) {
list.parallelStream().peek(e -> {
if (!Objects.isNull(e)) {
e.setPhotoList(Lists.newArrayList(e.getPhotos().split(",")));
}
}).count();
}
return list;
}
......
......@@ -11,6 +11,7 @@ import com.github.wxiaoqi.security.admin.vo.InviteMemberVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.sun.corba.se.impl.orbutil.concurrent.Sync;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
......@@ -57,6 +58,28 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
@Autowired
private AppUserPositionTempBiz positionTempBiz;
@Autowired
private AppStaffUserBiz staffUserBiz;
private static final HashMap<Integer, Boolean> map = new HashMap<>();
private static final Object obj = new Object();
private boolean lock(Integer userId) {
synchronized (obj) {
if (map.get(userId) == null) {
map.put(userId, true);
return true;
}
}
return false;
}
private void unLock(Integer userId) {
synchronized (obj) {
map.remove(userId);
}
}
/**
* 关系绑定
* 规则A->B (B无有效上线+无有效下线)
......@@ -64,22 +87,24 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
* @param userId
* @param parentId
*/
public void bindRelation(Integer userId, Integer parentId, Integer type) {
if (userId.equals(parentId)) {
log.info("----userId===" + userId + "----parentId====" + parentId + "----自己不能成为自己的上线");
public void bindRelation(Integer userId,Integer parentId,Integer type){
try {
if (userId.equals(parentId)){
log.info("----userId==="+userId+"----parentId===="+parentId+"----自己不能成为自己的上线");
return;
}
/* AppUserVo appUserVo=userDetailBiz.getUserInfoById(userId);
/* AppUserVo appUserVo=userDetailBiz.getUserInfoById(userId);
if (appUserVo==null){
log.info("----userId==="+userId+"----parentId===="+parentId+"----该用户不存在");
return;
}*/
AppUserVo appUserVo = userDetailBiz.getUserInfoById(parentId);
if (appUserVo == null) {
log.info("----userId===" + userId + "----parentId====" + parentId + "----该上线用户不存在");
AppUserVo appUserVo=userDetailBiz.getUserInfoById(parentId);
if (appUserVo==null){
log.info("----userId==="+userId+"----parentId===="+parentId+"----该上线用户不存在");
return;
}
if (lock(userId)) {
AppUserRelation relation = getMyBiz().getRelationByUserId(parentId);
Long time = System.currentTimeMillis();
if (relation == null) {
......@@ -99,6 +124,12 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
relation.setBindType(type);
relation.setBindTime(time);
insertSelective(relation);
if (relation != null) {
AppStaffUserDTO staffUserDTO = new AppStaffUserDTO();
staffUserDTO.setSuId(relation.getParentId());
staffUserDTO.setUid(relation.getUserId());
staffUserBiz.addAppStaffUser(staffUserDTO);
}
} else {
//判断用户是否有有效的上线
log.info("----userId===" + userId + "----bindTime====" + bindTime + "----relation.getBindTime()===" + relation.getBindTime());
......@@ -111,6 +142,13 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
}
}
}
}catch (Exception e){
log.info("网络异常===" + e.getMessage());
}finally {
unLock(userId);
}
}
//首页关系绑定
public ObjectRestResponse appBindRelation(Integer userId, String code) {
......@@ -215,8 +253,8 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
relationTemp.setIsValid(0);
relationTemp.setType(1);
relationTemp.setIsDel(0);
relationTemp = relationTempBiz.selectOne(relationTemp);
if (relationTemp == null) {
relationTemp=relationTempBiz.selectOne(relationTemp);
if(relationTemp==null){
return;
}
Integer parentId = relationTemp.getUserId();
......
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppStaffUser;
import com.github.wxiaoqi.security.admin.entity.ModifiedUsers;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import javax.persistence.Id;
import java.util.List;
/**
* @author Administrator
*/
public interface AppStaffUserMapper extends Mapper<AppStaffUser> {
List<AppStaffUser> selectByBysuIdOrUsername(@Param("id") Integer id,@Param("username") String username);
void updateByPositionId(ModifiedUsers modifiedUsers);
void update(ModifiedUsers modifiedUsers);
}
......@@ -33,4 +33,6 @@ public interface AppUserDetailMapper extends Mapper<AppUserDetail> {
List<AppUserVo> getUserByUserIdList(@Param("userIds") List<Integer> userIds);
List<UserStaffBo> findAllStaffsByCompanyIdAndPostionId(StaffStatisticsFindDTO staffStatisticsFindDTO);
AppUserVo getUser(Integer userId);
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.AppStaffUserBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserDetailBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserLoginBiz;
import com.github.wxiaoqi.security.admin.entity.AppStaffUser;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.auth.client.jwt.UserAuthUtil;
import com.github.wxiaoqi.security.auth.common.util.jwt.IJWTInfo;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
......@@ -27,7 +34,10 @@ public class AppStaffUserController extends BaseController<AppStaffUserBiz, AppS
private final UserAuthConfig authConfig;
private final HttpServletRequest request;
private final PublicController publicController;
private final String POSITION_NAME="员工";
private final Integer POSITION_ID=4;
private final UserAuthUtil userAuthUtil;
private final AppUserLoginBiz appUserLoginBiz;
private final AppUserDetailBiz appUserDetailBiz;
/**
* 获取该用户所用的客户
......@@ -37,8 +47,8 @@ public class AppStaffUserController extends BaseController<AppStaffUserBiz, AppS
@GetMapping("/getAll")
public ObjectRestResponse<List<AppStaffUser>> getAll() throws Exception {
AppUserDTO userDTO = (AppUserDTO) publicController.userDetailByToken(authConfig.getToken(request)).getData();
if (POSITION_NAME.equals(userDTO.getPositionName())) {
return ObjectRestResponse.succ(baseBiz.getAll(userDTO.getUserid())) ;
if (POSITION_ID.equals(userDTO.getPositionId())) {
return ObjectRestResponse.succ(baseBiz.getAll(userDTO.getUserid(),userDTO.getUsername())) ;
}
return ObjectRestResponse.succ();
}
......@@ -47,20 +57,32 @@ public class AppStaffUserController extends BaseController<AppStaffUserBiz, AppS
@ApiOperation("添加")
@PostMapping(value = "")
public ObjectRestResponse<AppStaffUser> add(@RequestBody AppStaffUser appStaffUser) throws Exception {
AppUserDTO userDTO = (AppUserDTO) publicController.userDetailByToken(authConfig.getToken(request)).getData();
if (appStaffUser.getPhone().equals(userDTO.getUsername())) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"不能绑定本人为客户");
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(authConfig.getToken(request));
Integer positionId = null;
try {
positionId = appUserDetailBiz.getUserInfoById(
appUserLoginBiz.getUserByUsername(appStaffUser.getPhone()).getId()
).getPositionId();
} catch (Exception e) {
e.printStackTrace();
}
if (POSITION_ID.equals(positionId)) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"绑定错误");
}
appStaffUser.setSuId(userDTO.getUserid());
appStaffUser.setSuId(Integer.valueOf(infoFromToken.getId()));
if (baseBiz.select(appStaffUser)) {
baseBiz.insertSelective(appStaffUser);
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"客户已存在");
}
@ApiOperation("查询一条")
@GetMapping(value = "one")
public ObjectRestResponse<AppStaffUser> findOne(AppStaffUser appStaffUser) {
AppStaffUser staffUser = baseBiz.findOne(appStaffUser);
if (staffUser!=null) {
return ObjectRestResponse.succ(staffUser);
}
......@@ -69,11 +91,13 @@ public class AppStaffUserController extends BaseController<AppStaffUserBiz, AppS
@ApiOperation("删除")
@DeleteMapping(value = "delete/{id}")
public ObjectRestResponse<AppStaffUser> delete(@PathVariable Integer id) {
public ObjectRestResponse<AppStaffUser> delete(@PathVariable Integer id) throws Exception {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(authConfig.getToken(request));
String userid = infoFromToken.getId();
AppStaffUser staffUser = new AppStaffUser();
staffUser.setId(id);
staffUser.setIsDel(1);
baseBiz.updateSelectiveById(staffUser);
baseBiz.update(staffUser,Integer.valueOf(userid));
return ObjectRestResponse.succ();
}
......@@ -82,10 +106,19 @@ public class AppStaffUserController extends BaseController<AppStaffUserBiz, AppS
@RequestMapping(value = "/{id}",method = RequestMethod.PUT)
@ResponseBody
public ObjectRestResponse update(@RequestBody AppStaffUser appStaffUser) throws Exception {
AppUserDTO userDTO = (AppUserDTO) publicController.userDetailByToken(authConfig.getToken(request)).getData();
if (appStaffUser.getPhone().equals(userDTO.getUsername())) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"不能绑定本人为客户");
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(authConfig.getToken(request));
Integer positionId = null;
try {
positionId = appUserDetailBiz.getUserInfoById(
appUserLoginBiz.getUserByUsername(appStaffUser.getPhone()).getId()
).getPositionId();
} catch (Exception e) {
e.printStackTrace();
}
if (appStaffUser.getPhone().equals(infoFromToken.getUniqueName())||POSITION_ID.equals(positionId)) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"绑定错误");
}
appStaffUser.setSuId(Integer.valueOf(infoFromToken.getId()));
baseBiz.updateSelectiveById(appStaffUser);
return ObjectRestResponse.succ();
}
......
......@@ -44,7 +44,7 @@ public class BaseUserMemberController extends BaseController<BaseUserMemberBiz,
* 房车助手下级用户日志新增
*/
@RequestMapping(value = "admin/addAppUserLogRemark", method = RequestMethod.POST)
public ObjectRestResponse addAppUserLogRemark(AppUserLogRemarkDTO appUserLogRemarkDTO) {
public ObjectRestResponse addAppUserLogRemark(@RequestBody AppUserLogRemarkDTO appUserLogRemarkDTO) {
appUserLogRemarkBiz.addAppUserLogRemark(appUserLogRemarkDTO);
return ObjectRestResponse.succ();
}
......
<?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.github.wxiaoqi.security.admin.mapper.AppStaffUserMapper">
<select id="selectByBysuIdOrUsername" resultType="com.github.wxiaoqi.security.admin.entity.AppStaffUser">
SELECT
s.id,
s.su_id,
s.u_id,
s.company,
s.remarks,
s.crt_time,
s.upd_time,
s.is_del,
s.`status`,
(CASE
WHEN ld.realname IS NOT NULL THEN
ld.realname
WHEN ld.nickname IS NOT NULL THEN
ld.nickname
ELSE
s.u_name
END
) AS u_name,
(
CASE
WHEN ld.username IS NOT NULL THEN
ld.username
ELSE
s.phone
END
) AS phone
FROM
app_staff_user s
LEFT JOIN (
SELECT
l.id,
l.username,
d.nickname,
d.realname
FROM
app_user_login l
LEFT JOIN app_user_detail d ON l.id = d.userid
) ld ON s.u_id = ld.id
WHERE is_del = 0 and (su_id=#{id} or su_phone=#{username})
</select>
<update id="updateByPositionId" parameterType="com.github.wxiaoqi.security.admin.entity.ModifiedUsers">
update app_staff_user set su_phone=#{phone} where su_id=#{userid}
</update>
<update id="update" parameterType="com.github.wxiaoqi.security.admin.entity.ModifiedUsers">
update app_staff_user set u_name=#{name}, phone= #{phone} where u_id=#{userid}
</update>
</mapper>
\ No newline at end of file
......@@ -322,4 +322,10 @@ from `app_user_detail` as `aud` left join `app_user_login` as `aul` on aul.id=
) as `sell` on sell.user_id=saff.userId
order by sell.sellAmount desc
</select>
<select id="getUser" resultMap="AppUserVoMap">
select l.im_userid,l.username,l.wx_openid,l.unionid,l.openid,l.status,l.id_number,l.certification_status,d.* from app_user_login l
left join app_user_detail d
on d.userid = l.id
where l.id = #{userId} limit 1
</select>
</mapper>
\ No newline at end of file
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/13 15:11
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityLotteryDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer userId;
private String phone;
private Integer serialNumber;
private Integer activityId;
private Integer prizeType;
private String prizeName;
private String iconPath;
private Integer hasWinning;
private String expiryDateCode;
private Date lotteryTime;
private Integer goodsId;
private Integer prizeGoodsType;
}
......@@ -24,4 +24,6 @@ public class ActivityLuckDrawFindDTO extends PageParam {
private Date endTime;
private String phone;
private Integer activityId;
private String parentPhone;
}
......@@ -3,10 +3,7 @@ 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 javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
......
package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigInteger;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 精彩活动
*
* @author Administrator
*/
@Data
......@@ -29,14 +30,14 @@ public class HomeActivities implements Serializable {
* 创建时间
*/
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
@ApiModelProperty(value = "创建时间", hidden = true)
private BigInteger crtTime;
/**
* 更新时间
*/
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间", hidden = true )
@ApiModelProperty(value = "更新时间", hidden = true)
private BigInteger updTime;
/**
......@@ -83,15 +84,27 @@ public class HomeActivities implements Serializable {
private String picture;
/**
* 活动页面链接
*/
@Column(name = "url")
@ApiModelProperty(value = "活动页面链接")
@ApiModelProperty(value = "安卓链接")
private String url;
/**
* 活动页面链接
*/
@Column(name = "ios_url")
@ApiModelProperty(value = "苹果链接")
private String iosUrl;
/**
* 活动页面链接
*/
@Column(name = "p_url")
@ApiModelProperty(value = "小程序链接")
private String purl;
/**
* 是否删除:0-否,1-是
......@@ -105,6 +118,4 @@ public class HomeActivities implements Serializable {
*/
@Column(name = "time_type")
private Integer timeType;
}
package com.xxfc.platform.activity.vo;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import lombok.Data;
@Data
public class ActivityLuckyDrawListVo extends ActivityLuckyDraw {
private String positionName;
private String parentPhone;
private String parentName;
}
......@@ -10,7 +10,6 @@ import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
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 tk.mybatis.spring.annotation.MapperScan;
......@@ -28,7 +27,6 @@ import tk.mybatis.spring.annotation.MapperScan;
"com.github.wxiaoqi.security.common.support"
})
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableAsync
@EnableDiscoveryClient
@EnableScheduling
@EnableAceAuthClient
......
......@@ -25,7 +25,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
......@@ -202,8 +201,9 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
timeStr};
}
@Async
public void updateLotteryNumByActivityIdAndUserIdAndPrizeType(Integer activityId,Integer userId,Integer prizeType){
mapper.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityId,userId,prizeType);
}
}
\ 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.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query;
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 com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper;
import com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo;
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;
......@@ -106,4 +107,15 @@ public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, Activ
}
return activityLuckyDraws;
}
public ObjectRestResponse<PageDataVO<ActivityLuckyDrawListVo>> getAll(ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
Integer page = activityLuckDrawFindDTO.getPage() == null ? 1 : activityLuckDrawFindDTO.getPage();
Integer limit = activityLuckDrawFindDTO.getLimit() == null ? 10 : activityLuckDrawFindDTO.getLimit();
activityLuckDrawFindDTO.setPage(page);
activityLuckDrawFindDTO.setLimit(limit);
Query query = new Query(activityLuckDrawFindDTO);
PageDataVO<ActivityLuckyDrawListVo> pageDataVO = PageDataVO.pageInfo(query, () -> mapper.getAllByPage(query.getSuper()));
return ObjectRestResponse.succ(pageDataVO);
//添加个人积分状态
}
}
\ No newline at end of file
......@@ -11,18 +11,22 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant;
import com.xxfc.platform.activity.config.RedissonLock;
import com.xxfc.platform.activity.dto.ApLogDTO;
import com.xxfc.platform.activity.entity.*;
import com.xxfc.platform.activity.mapper.ActivityPopularizeMapper;
import com.xxfc.platform.universal.feign.MQSenderFeign;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
......@@ -36,6 +40,7 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TR
*/
@Service
@Slf4j
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper, ActivityPopularize> {
@Autowired
......@@ -53,6 +58,9 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper, Act
@Autowired
ActivityPopularizeItemBiz activityPopularizeItemBiz;
private final RedissonLock redissonLock;
@Autowired
UserFeign userFeign;
......@@ -78,6 +86,11 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper, Act
}});
log.info("活动邀请注册:activityPopularize = {}", activityPopularize.toString());
if (activityPopularize != null) {
String lockKey = String.format("%s%d:%d:%d", registerQueueDTO.getAppUserId(), registerQueueDTO.getInParamDTO().getUsername(), activityPopularize.getId());
RLock rLock = redissonLock.getRLock(lockKey);
try {
boolean isSuccess = rLock.tryLock(5, 5, TimeUnit.SECONDS);
if (isSuccess) {
List<ActivityPopularizeItem> activityPopularizeItems = activityPopularizeItemBiz.selectByPopularizeId(activityPopularize.getId());
ActivityPopularizeItem activityPopularizeItem = activityPopularizeItems.get(activityPopularizeItems.size() - 1);
Date now = DateUtil.date();
......@@ -142,25 +155,30 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper, Act
setPopularizeId(activityPopularize.getId());
}});
double currentProgress = activityPopularizeUser.getCurrentProgress().doubleValue();
log.info("用户原活动进度:currentProgress = {}", activityPopularizeUser.toString());
log.info("用户原活动进度:currentProgress = {}", currentProgress);
currentProgress += Double.parseDouble(a + "");
BigDecimal bigDecimal = new BigDecimal(currentProgress);
log.info("用户现活动进度:newCurrentProgress = {}", currentProgress);
//修改当前进度
activityPopularizeUser.setCurrentProgress(bigDecimal);
popularizeUserBiz.updateSelectiveById(activityPopularizeUser);
//任务没有完成
//任务没有完成 加锁
if (!SYS_TRUE.equals(activityPopularizeUser.getStatus())) {
// AwardDTO awardDTO = JSONUtil.toBean(activityPopularize.getValue(), AwardDTO.class);
//检查是否满足奖励
if (relationBiz.selectList(new ActivityPopularizeRelation() {{
setMajorUserId(majorUserId);
setPopularizeId(activityPopularize.getId());
}}).size() >= 10) {
}}).size() >= 10 && popularizeUserBiz.selectCount(new ActivityPopularizeUser() {{
setPopularizeId(activityPopularize.getId());
setCurrentProgress(new BigDecimal("50"));
}}) <= activityPopularize.getNumLimit()) {
apLogDTO.setStatus(SYS_TRUE);
popularizeLogBiz.updateSelectiveById(BeanUtil.toBean(apLogDTO, ActivityPopularizeLog.class));
activityPopularizeUser.setStatus(SYS_TRUE);
popularizeUserBiz.updateSelectiveById(activityPopularizeUser);
mqSenderFeign.sendMessage(RabbitConstant.ADMIN_TOPIC, RabbitConstant.KEY_WALLET_ADD, JSONUtil.toJsonStr(new MyWalletDetail() {{
setAmount(new BigDecimal("50"));
setSource(SOURCE_ACTIVITY);
......@@ -172,6 +190,13 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper, Act
}}));
}
}
} else {
// 获取锁失败
log.info("tryLock fail, key = [{}]", lockKey);
}
} catch (InterruptedException e) {
log.error("tryLock fail, key = [{}]", lockKey);
}
}
}
}
......
......@@ -4,15 +4,15 @@ import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.ReferralCodeUtil;
import com.xxfc.platform.activity.config.RedissonLock;
import com.xxfc.platform.activity.constant.PrizeGoodsTypeEnum;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.dto.ActivityLotteryDTO;
import com.xxfc.platform.activity.dto.CouponDTO;
import com.xxfc.platform.activity.dto.UserCouponSendDTO;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import com.xxfc.platform.activity.mapper.ActivityPrizeMapper;
import com.xxfc.platform.activity.util.LotteryUtils;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
......@@ -21,12 +21,12 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RLock;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
......@@ -49,10 +49,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize> {
private final ActivityWinningRecordBiz activityWinningRecordBiz;
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
private final UserCouponBiz userCouponBiz;
private final CouponBiz couponBiz;
private final RabbitTemplate rabbitTemplate;
private final RedisTemplate<String, Object> redisTemplate;
@Resource(name = "redisTemplate")
private ValueOperations<String, Object> valueOperations;
......@@ -157,6 +156,9 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
*/
public LotteryVo activityLottery(Integer activityId, Integer prizeType, String lotteryDate, AppUserDTO appUserDTO) {
LotteryVo lotteryVo = new LotteryVo();
ActivityLotteryDTO activityLotteryDTO = new ActivityLotteryDTO();
activityLotteryDTO.setHasWinning(0);
//查询奖品信息
List<ActivityPrize> activityPrizes = ((ActivityPrizeBiz) AopContext.currentProxy()).findActivityPrizeByType(prizeType);
ActivityPrize notActivityPrize = activityPrizes.stream().filter(x -> x.getPrizeGoodsType() == 0).findFirst().orElseGet(() -> {
ActivityPrize activityPrize = new ActivityPrize();
......@@ -166,6 +168,8 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
activityPrize.setSerialNumber(8);
return activityPrize;
});
//用户对应活动类型抽奖次数
String lotteryNumKey = String.format("%s%d:%d:%d",USER_LOTTERY_PRE_KEY, appUserDTO.getUserid(), activityId, prizeType);
Object lotteryNum = valueOperations.get(lotteryNumKey);
boolean hasLotteryNum = lotteryNum == null ? activityAttendanceRecordBiz.hasNumberOfLuckyDrawByType(activityId, prizeType, appUserDTO.getUserid()) : ((Integer) lotteryNum) > 0;
......@@ -197,16 +201,13 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
}
}
ActivityWinningRecord activityWinningRecord = new ActivityWinningRecord();
activityWinningRecord.setActivityId(activityId);
activityWinningRecord.setPrizeType(prizeType);
activityWinningRecord.setUserId(appUserDTO.getUserid());
activityWinningRecord.setHasWinning(0);
//判断是否有库存
boolean hasStock = activityPrize.getPrizeGoodsType() != PrizeGoodsTypeEnum.NO_PRIZE.getCode()
&& activityPrize.getTotalStock() != null
&& activityPrize.getTotalStock()!=0
&& prizeStock != null
&& (Integer) prizeStock != 0;
if (hasStock) {
String lockKey = String.format("%s%d:%d:%d", LOTTERY_PRE_KEY, activityId, prizeType, activityPrize.getSerialNumber());
RLock rLock = redissonLock.getRLock(lockKey);
......@@ -217,14 +218,12 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
log.info("tryLock success, key = [{}]", lockKey);
try {
if (prizeStock != null && (Integer) prizeStock > 0) {
//更新库存
((ActivityPrizeBiz) AopContext.currentProxy()).updatePrizeStock(prizeType, activityPrize.getSerialNumber());
//更新缓存库存
//更新奖品的缓存库存
valueOperations.decrement(prizeStockKey);
//设置为已中奖
activityWinningRecord.setHasWinning(1);
activityWinningRecord.setIconPath(activityPrize.getIconPath());
activityWinningRecord.setLotteryTime(new Date());
activityLotteryDTO.setHasWinning(1);
activityLotteryDTO.setIconPath(activityPrize.getIconPath());
activityLotteryDTO.setLotteryTime(new Date());
} else {
activityPrize = notActivityPrize;
}
......@@ -240,35 +239,35 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
log.info("tryLock fail, key = [{}]", lockKey);
}
} catch (InterruptedException e) {
e.printStackTrace();
log.error("tryLock fail, key = [{}]", lockKey);
}
if (PrizeTypeEnum.LOCALE.getCode() == prizeType) {
//兑奖码生成
String expireDateCodeKey = String.format("%s:%s%d",lotteryDate.substring(0,4),LOTTERY_PRE_KEY, activityId);
//兑奖次数自增
Long expireDateCodeCounter = valueOperations.increment(expireDateCodeKey);
if (expireDateCodeCounter == 1) {
redisTemplate.expire(expireDateCodeKey, expirDays, TimeUnit.DAYS);
}
String expiryDateCode = ReferralCodeUtil.encode(expireDateCodeCounter.intValue());
activityWinningRecord.setExpiryDateCode(expiryDateCode);
activityLotteryDTO.setExpiryDateCode(expiryDateCode);
lotteryVo.setExpiryDateCode(expiryDateCode);
}
//发放优惠券
if (activityPrize.getPrizeGoodsType() == PrizeGoodsTypeEnum.COUPON.getCode()) {
UserCouponSendDTO userCouponSendDTO = new UserCouponSendDTO();
userCouponSendDTO.setCouponId(activityPrize.getGoodsId());
userCouponSendDTO.setCouponNum(1);
userCouponSendDTO.setPhone(appUserDTO.getUsername());
userCouponBiz.sendCoupon(userCouponSendDTO);
activityWinningRecord.setGoodsId(activityPrize.getGoodsId());
}
}
activityWinningRecord.setPrizeName(activityPrize.getName());
activityWinningRecordBiz.saveRecord(activityWinningRecord);
activityLotteryDTO.setActivityId(activityId);
activityLotteryDTO.setPrizeType(prizeType);
activityLotteryDTO.setUserId(appUserDTO.getUserid());
activityLotteryDTO.setPhone(appUserDTO.getUsername());
activityLotteryDTO.setPrizeName(activityPrize.getName());
Optional.ofNullable(activityPrize.getGoodsId()).ifPresent(goodsId->activityLotteryDTO.setGoodsId(goodsId));
activityLotteryDTO.setSerialNumber(activityPrize.getSerialNumber());
activityLotteryDTO.setPrizeGoodsType(activityPrize.getPrizeGoodsType());
lotteryVo.setSerialNumber(activityPrize.getSerialNumber());
//更改对应抽奖类型的抽奖次数
activityAttendanceRecordBiz.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityId, appUserDTO.getUserid(), prizeType);
//减少用户抽奖次数
valueOperations.decrement(lotteryNumKey);
//发送抽奖结果消息
rabbitTemplate.convertAndSend(RabbitConstant.ACTIVITY_PRIZE_TOPIC,RabbitConstant.KEY_ACTIVITY_PRIZE_RECORD,activityLotteryDTO);
} else {
lotteryVo.setMessage("抽奖次数已用完!!!");
}
......@@ -281,7 +280,6 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
* @param prizeType
* @param serialNumber
*/
@Async
public void updatePrizeStock(Integer prizeType, Integer serialNumber) {
mapper.updatePrizeStock(prizeType, serialNumber);
}
......
......@@ -8,7 +8,6 @@ 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;
......@@ -18,7 +17,6 @@ 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;
......@@ -31,6 +29,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
/**
......@@ -164,4 +163,11 @@ public class ActivityWinningRecordBiz extends BaseBiz<ActivityWinningRecordMappe
activityWinningRecordPageDTO.getPositionName(),prizeType,activityWinningRecordPageDTO.getPrizeName(),
expiryDateCode,timeStr};
}
public ActivityWinningRecordVo findActivityAttendanceRecordById(Long id) {
ActivityWinningRecordVo activityWinningRecordVo = new ActivityWinningRecordVo();
ActivityWinningRecord activityAttendanceRecord = mapper.selectByPrimaryKey(id);
Optional.ofNullable(activityAttendanceRecord).ifPresent(x->BeanUtils.copyProperties(x,activityWinningRecordVo));
return activityWinningRecordVo;
}
}
\ No newline at end of file
......@@ -25,6 +25,7 @@ public class RabbitActivityConfig extends RabbitCommonConfig {
//优惠券
public static final String COUPON_CANCEL_QUEUE = "coupon.cancel.queue";
public static final String PRIZE_RECORD_QUEUE="prize:record:queue";
static {
myQueue = new ArrayList<BindDTO>(){{
......@@ -35,6 +36,7 @@ public class RabbitActivityConfig extends RabbitCommonConfig {
add(new BindDTO(ACTIVITY_NEW_QUEUE, ADMIN_TOPIC, KEY_APPUSER_AUTH));
add(new BindDTO(INTEGRAL_HANDLE_QUEUE, INTEGRAL_TOPIC, INTEGRAL_ROUTING_KEY));
add(new BindDTO(COUPON_CANCEL_QUEUE, ORDER_TOPIC, KEY_ORDER_CANCEL));
add(new BindDTO(PRIZE_RECORD_QUEUE,ACTIVITY_PRIZE_TOPIC,KEY_ACTIVITY_PRIZE_RECORD));
}};
}
......
package com.xxfc.platform.activity.handler;
import com.rabbitmq.client.Channel;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.biz.ActivityWinningRecordBiz;
import com.xxfc.platform.activity.biz.UserCouponBiz;
import com.xxfc.platform.activity.config.RabbitActivityConfig;
import com.xxfc.platform.activity.constant.PrizeGoodsTypeEnum;
import com.xxfc.platform.activity.dto.ActivityLotteryDTO;
import com.xxfc.platform.activity.dto.UserCouponSendDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/13 11:22
*/
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
public class ActivityPrizeMqHandler {
private final ActivityPrizeBiz activityPrizeBiz;
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
private final ActivityWinningRecordBiz activityWinningRecordBiz;
private final UserCouponBiz userCouponBiz;
private final RedisTemplate<String, Object> redisTemplate;
@Resource(name = "redisTemplate")
private ValueOperations valueOperations;
private final String R_CONSUME = "lottery:reconsume";
private final int R_CONSUME_MAX_NUM = 3;
@RabbitListener(queues = RabbitActivityConfig.PRIZE_RECORD_QUEUE)
public void processActivityPrizeMsg(ActivityLotteryDTO activityLotteryDTO, Channel channel) {
log.info("抽奖消息的数据【{}】", activityLotteryDTO);
try {
if (activityLotteryDTO.getHasWinning() == 1) {
//更新库存
log.info("更新库存:参数【prizeType:{}==serialNumber:{}】", activityLotteryDTO.getPrizeType(), activityLotteryDTO.getSerialNumber());
activityPrizeBiz.updatePrizeStock(activityLotteryDTO.getPrizeType(), activityLotteryDTO.getSerialNumber());
//发放优惠券
if (activityLotteryDTO.getPrizeGoodsType() == PrizeGoodsTypeEnum.COUPON.getCode()) {
UserCouponSendDTO userCouponSendDTO = new UserCouponSendDTO();
userCouponSendDTO.setCouponId(activityLotteryDTO.getGoodsId());
userCouponSendDTO.setCouponNum(1);
userCouponSendDTO.setPhone(activityLotteryDTO.getPhone());
log.info("抽中优惠券发送:【参数:{}】", userCouponSendDTO);
userCouponBiz.sendCoupon(userCouponSendDTO);
}
}
ActivityWinningRecord activityWinningRecord = new ActivityWinningRecord();
BeanUtils.copyProperties(activityLotteryDTO, activityWinningRecord);
activityWinningRecord.setCrtTime(new Date());
log.info("抽奖记录【{}】", activityWinningRecord);
activityWinningRecordBiz.saveRecord(activityWinningRecord);
//更改对应抽奖类型的抽奖次数
log.info("更改对应抽奖类型的抽奖次数【activityId:{}==userId:{}==prizeType:{}】", activityLotteryDTO.getActivityId(), activityLotteryDTO.getUserId(), activityLotteryDTO.getPrizeType());
activityAttendanceRecordBiz.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityLotteryDTO.getActivityId(), activityLotteryDTO.getUserId(), activityLotteryDTO.getPrizeType());
} catch (Exception ex) {
log.error("抽奖消息消费失败【{}】", ex);
try {
Long reConsumeCounter = valueOperations.increment(R_CONSUME);
if (reConsumeCounter <= R_CONSUME_MAX_NUM) {
channel.basicRecover(false);
log.info("抽奖消息重回队列成功");
}
if (reConsumeCounter == 1) {
redisTemplate.expire(R_CONSUME, 1, TimeUnit.DAYS);
}
} catch (IOException e) {
log.error("消费抽奖消息重回队列失败【{}】", e);
}
}
}
}
......@@ -2,15 +2,11 @@ package com.xxfc.platform.activity.handler;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.dto.RegisterQueueDTO;
import com.rabbitmq.client.Channel;
import com.xxfc.platform.activity.biz.ActivityPopularizeBiz;
import com.xxfc.platform.activity.biz.ActivityUserJoinBiz;
import com.xxfc.platform.activity.biz.IntegralUserRecordBiz;
import com.xxfc.platform.activity.config.RabbitActivityConfig;
import com.xxfc.platform.activity.entity.ActivityPopularize;
import com.xxfc.platform.activity.vo.IntegralUserRecordDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
......
......@@ -2,9 +2,11 @@ package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
/**
* 活动抽奖报名表
......@@ -16,4 +18,6 @@ import java.util.List;
public interface ActivityLuckyDrawMapper extends Mapper<ActivityLuckyDraw> {
List<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO);
List<ActivityLuckyDrawListVo> getAllByPage(Map<String, Object> param);
}
package com.xxfc.platform.activity.rest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
......@@ -29,6 +30,7 @@ import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -156,7 +158,14 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
setUserId(getAppUser().getUserid());
setPopularizeId(itemAddDTO.getPopularizeId());
}});
Date now = DateUtil.date();
Date start = DateUtil.date(ap.getStartTime());
Date end = DateUtil.date(ap.getEndTime());
//判断是否活动超时
if (now.before(start) || now.after(end)) {
return ObjectRestResponse.createFailedResult(2005,"活动已结束");
}
//添加用户活动关系
if(null == activityPopularizeUser) {
activityPopularizeUser = popularizeUserBiz.insertSelectiveReT(new ActivityPopularizeUser(){{
......
package com.xxfc.platform.activity.rest;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityWinningRecordBiz;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -17,6 +21,13 @@ import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
private final ActivityWinningRecordBiz activityWinningRecordBiz;
@GetMapping("/{id}")
public ObjectRestResponse<ActivityWinningRecordVo> findActivityAttendanceRecordById(@PathVariable(value = "id") Long id){
ActivityWinningRecordVo activityWinningRecordVo = activityWinningRecordBiz.findActivityAttendanceRecordById(id);
return ObjectRestResponse.succ(activityWinningRecordVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.exception.BaseException;
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 com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -38,9 +38,8 @@ public class ActivityLuckyDrawAdminController {
* @return
*/
@PostMapping("/page")
public ObjectRestResponse<PageDataVO<ActivityLuckyDraw>> listActivtyLuckyDrawWithPage(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = activityLuckyDrawBiz.listLuckDrawWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityLuckyDrawPageDataVO);
public ObjectRestResponse<PageDataVO<ActivityLuckyDrawListVo>> listActivtyLuckyDrawWithPage(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
return activityLuckyDrawBiz.getAll(activityLuckDrawFindDTO);
}
@PostMapping("/export")
......
......@@ -27,7 +27,7 @@
aar.user_name as `userName`,
aar.phone,
aar.position_name as `positionName`,
IFNULL(apr.inviteNum,0),
IFNULL(apr.inviteNum,0) as `inviteNum`,
awr.prizes
from (select `user_id`,`popularize_id`,`current_progress`,`status`,`crt_time` from activity_popularize_user where
`popularize_id`=#{activityId}
......
......@@ -39,4 +39,32 @@
order by `crt_time` desc
</select>
<select id="getAllByPage" resultType="com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo" parameterType="Map">
select * from `activity_lucky_draw_list` where 1=1
<if test="activityId != null">
and `activity_id`=#{activityId}
</if>
<if test= "phone != null and phone != ''">
and `phone`=#{phone}
</if>
<if test="parentPhone!=null and parentPhone!=''">
and `parentPhone`=#{parentPhone}
</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
......@@ -84,6 +84,10 @@ public class Banner {
@ApiModelProperty(value = "ios跳转地址")
private String iosUrl;
@Column(name = "applet_url")
@ApiModelProperty("小程序跳转地址")
private String appletUrl;
/**
* 是否删除,0否,1是
*/
......
......@@ -26,6 +26,8 @@ public class BannerVo {
private String iosUrl;
private String appletUrl;
/**
* seo html标签优化
*/
......
......@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.app.entity.Banner;
import com.xxfc.platform.app.entity.vo.BannerVo;
import com.xxfc.platform.app.mapper.BannerMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.time.Instant;
......@@ -26,12 +27,7 @@ public class BannerBiz extends BaseBiz<BannerMapper,Banner> {
List<Banner> banners = mapper.findBannerListByType(type,location,platform);
banners.forEach(banner -> {
BannerVo bannerVo = new BannerVo();
bannerVo.setCover(banner.getCover());
bannerVo.setUrl(banner.getUrl());
bannerVo.setTitle(banner.getTitle());
bannerVo.setId(banner.getId());
bannerVo.setAlt(banner.getAlt());
bannerVo.setIosUrl(banner.getIosUrl());
BeanUtils.copyProperties(banner,bannerVo);
bannerVos.add(bannerVo);
});
return bannerVos;
......
......@@ -44,8 +44,16 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
* @param orderReceivedStatisticsFindDTO
* @return
*/
public List<OrderMemberReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderMemberReceivedStatistics(orderReceivedStatisticsFindDTO);
public List<OrderMemberReceivedStatistics> selectOrderReceivedStatisticsGroupByDate(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderMemberReceivedStatisticsGroupByDate(orderReceivedStatisticsFindDTO);
}
public List<OrderMemberReceivedStatistics> selectOrderReceivedStatisticsGroupByMonth(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderMemberReceivedStatisticsGroupByMonth(orderReceivedStatisticsFindDTO);
}
public List<OrderMemberReceivedStatistics> selectOrderReceivedStatisticsGroupByWeekOfYear(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderMemberReceivedStatisticsGroupByWeekOfYear(orderReceivedStatisticsFindDTO);
}
/**
......
......@@ -41,8 +41,16 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
* @param orderReceivedStatisticsFindDTO
* @return
*/
public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderRentVehicleReceivedStatistics(orderReceivedStatisticsFindDTO);
public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatisticsGroupByDate(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderRentVehicleReceivedStatisticsGroupByDate(orderReceivedStatisticsFindDTO);
}
public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatisticsGroupByMonth(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderRentVehicleReceivedStatisticsGroupByMonth(orderReceivedStatisticsFindDTO);
}
public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatisticsGroupByWeekOfYear(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderRentVehicleReceivedStatisticsGroupByWeekOfYear(orderReceivedStatisticsFindDTO);
}
/**
......
......@@ -31,8 +31,14 @@ public class OrderTourReceivedStatisticsBiz extends BaseBiz<OrderTourReceivedSta
private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz orderAccountBiz;
public List<OrderTourReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderTourReceivedStatistics(orderReceivedStatisticsFindDTO);
public List<OrderTourReceivedStatistics> selectOrderReceivedStatisticsGroupByDate(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderTourReceivedStatisticsGroupByDate(orderReceivedStatisticsFindDTO);
}
public List<OrderTourReceivedStatistics> selectOrderReceivedStatisticsGroupByMonth(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderTourReceivedStatisticsGroupByMonth(orderReceivedStatisticsFindDTO);
}
public List<OrderTourReceivedStatistics> selectOrderReceivedStatisticsGroupByWeekOfYear(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderTourReceivedStatisticsGroupByWeekOfYear(orderReceivedStatisticsFindDTO);
}
/**
......
......@@ -17,7 +17,8 @@ import java.util.List;
*/
public interface OrderMemberReceivedStatisticsMapper extends Mapper<OrderMemberReceivedStatistics>, InsertListMapper<OrderMemberReceivedStatistics> {
List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatisticsGroupByDate(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatisticsGroupByMonth(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatisticsGroupByWeekOfYear(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
void inserMemberReceivedtList(@Param("orderMembers") List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics);
}
......@@ -18,7 +18,9 @@ import java.util.List;
*/
public interface OrderReceivedStatisticsMapper extends Mapper<OrderReceivedStatistics>, InsertListMapper<OrderReceivedStatistics> {
List<OrderReceivedStatistics> selectOrderReceivedStatisticsList(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderReceivedStatistics> selectOrderReceivedStatisticsDateList(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderReceivedStatistics> selectOrderReceivedStatisticsMonthList(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderReceivedStatistics> selectOrderReceivedStatisticsWeekOfYearList(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<CompanyPerformanceBo> selectCompanyPerformanceWithDay(CompanyPerformanceFindDTO companyPerformanceFindDTO);
......
......@@ -16,5 +16,7 @@ import java.util.List;
*/
public interface OrderRentVehicleReceivedStatisticsMapper extends Mapper<OrderRentVehicleReceivedStatistics>, InsertListMapper<OrderRentVehicleReceivedStatistics> {
List<OrderRentVehicleReceivedStatistics> selectOrderRentVehicleReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderRentVehicleReceivedStatistics> selectOrderRentVehicleReceivedStatisticsGroupByDate(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderRentVehicleReceivedStatistics> selectOrderRentVehicleReceivedStatisticsGroupByMonth(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderRentVehicleReceivedStatistics> selectOrderRentVehicleReceivedStatisticsGroupByWeekOfYear(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
}
......@@ -16,5 +16,7 @@ import java.util.List;
*/
public interface OrderTourReceivedStatisticsMapper extends Mapper<OrderTourReceivedStatistics>, InsertListMapper<OrderTourReceivedStatistics> {
List<OrderTourReceivedStatistics> selectOrderTourReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderTourReceivedStatistics> selectOrderTourReceivedStatisticsGroupByDate(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderTourReceivedStatistics> selectOrderTourReceivedStatisticsGroupByMonth(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
List<OrderTourReceivedStatistics> selectOrderTourReceivedStatisticsGroupByWeekOfYear(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
}
......@@ -29,10 +29,12 @@
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectOrderMemberReceivedStatistics" resultMap="orderMemberReceivedStatisticsMap">
select * from `order_member_received_statistics` where 1=1
<select id="selectOrderMemberReceivedStatisticsGroupByDate" resultType="com.xxfc.platform.order.entity.OrderMemberReceivedStatistics">
select `date`,`year`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity`,IFNULL(sum(`toal_common_ammount`),0) as `toalCommonAmmount`,
IFNULL(sum(`total_common_quantity`),0) as `totalCommonQuantity`,IFNULL(sum(`total_gold_amount`),0) as `totalGoldAmount`,IFNULL(sum(`total_gold_quantity`),0),
IFNULL(sum(`total_diamond_ammount`),0) as `totalDiamondAmmount`,IFNULL(sum(`total_diamond_quantity`),0) as `totalDiamondQuantity` from `order_member_received_statistics` where 1=1
<if test="orderState!=null">
and `is_finish`=#{orderState}
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
......@@ -53,9 +55,67 @@
`date` <= #{endDate}
]]>
</if>
group by `year`, `date`
order by null
</select>
<delete id="inserMemberReceivedtList">
<select id="selectOrderMemberReceivedStatisticsGroupByMonth" resultType="com.xxfc.platform.order.entity.OrderMemberReceivedStatistics">
select `year`,`month`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity`,IFNULL(sum(`toal_common_ammount`),0) as `toalCommonAmmount`,
IFNULL(sum(`total_common_quantity`),0) as `totalCommonQuantity`,IFNULL(sum(`total_gold_amount`),0) as `totalGoldAmount`,IFNULL(sum(`total_gold_quantity`),0),
IFNULL(sum(`total_diamond_ammount`),0) as `totalDiamondAmmount`,IFNULL(sum(`total_diamond_quantity`),0) as `totalDiamondQuantity` from `order_member_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `month`
order by null
</select>
</delete>
<select id="selectOrderMemberReceivedStatisticsGroupByWeekOfYear" resultType="com.xxfc.platform.order.entity.OrderMemberReceivedStatistics">
select `year`,`week_of_year`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity`,IFNULL(sum(`toal_common_ammount`),0) as `toalCommonAmmount`
,IFNULL(sum(`total_common_quantity`),0) as `totalCommonQuantity`,IFNULL(sum(`total_gold_amount`),0) as `totalGoldAmount`,IFNULL(sum(`total_gold_quantity`),0),
IFNULL(sum(`total_diamond_ammount`),0) as `totalDiamondAmmount`,IFNULL(sum(`total_diamond_quantity`),0) as `totalDiamondQuantity` from `order_member_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `week_of_year`
order by null
</select>
</mapper>
\ No newline at end of file
......@@ -31,10 +31,10 @@
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectOrderReceivedStatisticsList" resultMap="orderReceivedStatisticsMap">
select * from `order_received_statistics` where 1=1
<select id="selectOrderReceivedStatisticsDateList" resultType="com.xxfc.platform.order.entity.OrderReceivedStatistics">
select `year`,`date`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_received_statistics` where 1=1
<if test="orderState!=null">
and `is_finish`=#{orderState}
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
......@@ -56,6 +56,66 @@
`date` <= #{endDate}
]]>
</if>
group by `year`, `date`
order by null
</select>
<select id="selectOrderReceivedStatisticsMonthList" resultType="com.xxfc.platform.order.entity.OrderReceivedStatistics">
select `year`,`month`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `month`
order by null
</select>
<select id="selectOrderReceivedStatisticsWeekOfYearList" resultType="com.xxfc.platform.order.entity.OrderReceivedStatistics">
select `year`,`week_of_year`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `week_of_year`
order by null
</select>
<!--按日统计-->
......
......@@ -18,10 +18,10 @@
<result property="companyId" column="company_id"/>
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectOrderRentVehicleReceivedStatistics" resultMap="orderRentVehicleReceivedStatisticsMap">
select * from `order_rent_vehicle_received_statistics` where 1=1
<select id="selectOrderRentVehicleReceivedStatisticsGroupByDate" resultType="com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics">
select `year`,`date`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_rent_vehicle_received_statistics` where 1=1
<if test="orderState!=null">
and `is_finish`=#{orderState}
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
......@@ -42,6 +42,63 @@
`date` <= #{endDate}
]]>
</if>
group by `year`, `date`
order by null
</select>
<select id="selectOrderRentVehicleReceivedStatisticsGroupByMonth" resultType="com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics">
select `year`,`month`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_rent_vehicle_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `month`
order by null
</select>
<select id="selectOrderRentVehicleReceivedStatisticsGroupByWeekOfYear" resultType="com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics">
select `year`,`week_of_year`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_rent_vehicle_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `week_of_year`
order by null
</select>
</mapper>
\ No newline at end of file
......@@ -23,10 +23,10 @@
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectOrderTourReceivedStatistics" resultMap="orderTourReceivedStatisticsMap">
select * from `order_tour_received_statistics` where 1=1
<select id="selectOrderTourReceivedStatisticsGroupByDate" resultType="com.xxfc.platform.order.entity.OrderTourReceivedStatistics">
select `year`,`date`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_tour_received_statistics` where 1=1
<if test="orderState!=null">
and `is_finish`=#{orderState}
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
......@@ -47,6 +47,63 @@
`date` <= #{endDate}
]]>
</if>
group by `year`, `date`
order by null
</select>
<select id="selectOrderTourReceivedStatisticsGroupByMonth" resultType="com.xxfc.platform.order.entity.OrderTourReceivedStatistics">
select `year`,`month`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_tour_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `month`
order by null
</select>
<select id="selectOrderTourReceivedStatisticsGroupByWeekOfYear" resultType="com.xxfc.platform.order.entity.OrderTourReceivedStatistics">
select `year`,`week_of_year`,IFNULL(sum(`total_amount`),0) as `totalAmount`,IFNULL(sum(`total_quantity`),0) as `totalQuantity` from `order_tour_received_statistics` where 1=1
<if test="orderState!=null">
and `has_pay`=#{orderState}
</if>
<if test="orderOrigin!=null">
and `order_origin`=#{orderOrigin}
</if>
<if test="payWay!=null">
and `pay_way`=#{payWay}
</if>
<if test="startDate!=null and endDate!=null">
and `date` between #{startDate} and #{endDate}
</if>
<if test="startDate!=null and endDate==null">
and <![CDATA[
`date` >= #{startDate}
]]>
</if>
<if test="startDate==null and endDate!=null">
and <![CDATA[
`date` <= #{endDate}
]]>
</if>
group by `year`, `week_of_year`
order by null
</select>
</mapper>
\ No newline at end of file
......@@ -62,19 +62,8 @@ public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPric
}
//编辑
if (Objects.nonNull(vehicleModelHolidayPriceSaveDTO.getId())) {
Example example = new Example(VehicleModelHolidayPrice.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("festivalId", vehicleModelHolidayPriceSaveDTO.getId());
for (VehicleModelHolidayPrice modelHolidayPrice : vehicleModelHolidayPriceList) {
modelHolidayPrice.setUpdUserId(userId);
modelHolidayPrice.setUpdTime(new Date());
mapper.updateByExampleSelective(modelHolidayPrice, example);
deleteById(vehicleModelHolidayPriceSaveDTO.getId());
}
Festival festival = new Festival();
festival.setName(vehicleModelHolidayPriceSaveDTO.getFestival());
festival.setId(vehicleModelHolidayPriceSaveDTO.getId());
festivalBiz.add(festival);
} else {
Festival festival = new Festival();
festival.setName(vehicleModelHolidayPriceSaveDTO.getFestival());
festivalBiz.add(festival);
......@@ -85,7 +74,6 @@ public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPric
mapper.insertSelective(modelHolidayPrice);
}
}
}
/**
* @param multiple 倍数
......
package com.xxfc.platform.vehicle.rest;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
......@@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map;
......@@ -174,5 +176,17 @@ public class VehicleDepartureController {
return ObjectRestResponse.succ(reserveType);
}
/**
* 车辆用途字典查询
* 除去用户租车
*/
@GetMapping("findReservePartType")
public ObjectRestResponse<OrderPageVO> getOrderPartDetail() {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
String reserveType = dictionaryMap.get(VEHICE_ORDER + "_" + RESERVE).getDetail();
HashMap<String, List<Map<String, String>>> map = JSONUtil.toBean(reserveType, HashMap.class);
List<Map<String, String>> type = map.get("type");
type.remove(0);
return ObjectRestResponse.succ(type);
}
}
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