Commit a5370691 authored by hanfeng's avatar hanfeng

Merge remote-tracking branch 'origin/master'

parents 28d8791b ad728eb4
......@@ -20,6 +20,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.github.wxiaoqi.security.admin.mapper.AppUserRelationMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*;
......@@ -60,6 +62,46 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
@Autowired
private AppStaffUserBiz staffUserBiz;
private static final HashMap<Integer, Boolean> map = new HashMap<>();
private static final HashMap<Integer, Boolean> parentMap = new HashMap<>();
private static final Object obj = new Object();
private static final Object parentObj = new Object();
private boolean lock(Integer userId) {
synchronized (obj) {
if (map.get(userId) == null) {
map.put(userId, true);
return true;
}
}
return false;
}
private boolean parentLock(Integer userId) {
log.info("---进锁前---parentId===="+userId);
synchronized (parentObj) {
log.info("---进锁---parentId===="+userId);
if (parentMap.get(userId) == null) {
log.info("---进锁处理---parentId===="+userId);
parentMap.put(userId, true);
return true;
}
}
return false;
}
private void unParentLock(Integer userId) {
log.info("---解锁处理---parentId===="+userId);
synchronized (parentObj) {
parentMap.remove(userId);
}
}
private void unLock(Integer userId) {
synchronized (obj) {
map.remove(userId);
}
}
/**
* 关系绑定
* 规则A->B (B无有效上线+无有效下线)
......@@ -84,48 +126,65 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
log.info("----userId==="+userId+"----parentId===="+parentId+"----该上线用户不存在");
return;
}
AppUserRelation relation=getMyBiz().getRelationByUserId(parentId);
Long time=System.currentTimeMillis();
if(relation==null){
relation=new AppUserRelation();
relation.setUserId(parentId);
relation.setBindType(type);
insertSelective(relation);
}
Long bindTime=time-validTime;
//判断用户是否有有效的下线
if (getCountByParentId(userId,bindTime)==0L){
relation=getMyBiz().getRelationByUserId(userId);
if(relation==null){
relation=new AppUserRelation();
relation.setUserId(userId);
relation.setParentId(parentId);
relation.setBindType(type);
relation.setBindTime(time);
insertSelective(relation);
}else {
//判断用户是否有有效的上线
log.info("----userId==="+userId+"----bindTime===="+bindTime+"----relation.getBindTime()==="+relation.getBindTime());
if(relation.getParentId()==null||relation.getParentId()==0||(relation.getIsForever()!=1&&validTime>0&&relation.getBindTime()<bindTime)){
if (lock(userId)) {
AppUserRelation relation = getMyBiz().getRelationByUserId(parentId);
Long time = System.currentTimeMillis();
if (relation == null) {
insertLock(parentId, type);
}
Long bindTime = time - validTime;
//判断用户是否有有效的下线
if (getCountByParentId(userId, bindTime) == 0L) {
relation = getMyBiz().getRelationByUserId(userId);
if (relation == null) {
relation = new AppUserRelation();
relation.setUserId(userId);
relation.setParentId(parentId);
relation.setBindType(type);
relation.setBindTime(time);
getMyBiz().updRelation(relation);
insertSelective(relation);
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());
if (relation.getParentId() == null || relation.getParentId() == 0 || (relation.getIsForever() != 1 && validTime > 0 && relation.getBindTime() < bindTime)) {
relation.setParentId(parentId);
relation.setBindType(type);
relation.setBindTime(time);
getMyBiz().updRelation(relation);
}
}
}
if (relation != null){
AppStaffUserDTO staffUserDTO=new AppStaffUserDTO();
staffUserDTO.setSuId(relation.getParentId());
staffUserDTO.setUid(relation.getUserId());
staffUserBiz.addAppStaffUser(staffUserDTO);
}
}
}catch (Exception e){
log.info("网络异常===" + e.getMessage());
}finally {
unLock(userId);
}
}
private void insertLock(Integer userId, Integer type) {
try {
if (parentLock(userId)) {
AppUserRelation relation = getMyBiz().getRelationByUserId(userId);
if (relation == null) {
log.info("insertLock----parentId===" +userId);
relation = new AppUserRelation();
relation.setUserId(userId);
relation.setBindType(type);
insertSelective(relation);
}
}
}catch (Exception e){
}finally {
unParentLock(userId);
}
}
//首页关系绑定
public ObjectRestResponse appBindRelation(Integer userId, String code) {
Integer parentId = 0;
......@@ -246,9 +305,15 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRe
*/
@Cache(key = "user:relation{1}")
public AppUserRelation getRelationByUserId(Integer userId) {
AppUserRelation relation = new AppUserRelation();
relation.setUserId(userId);
return selectOne(relation);
/* AppUserRelation relation = new AppUserRelation();
relation.setUserId(userId);*/
Example example=new Example(AppUserRelation.class);
example.createCriteria().andEqualTo("userId",userId);
List<AppUserRelation> list=selectByExample(example);
if (list.size()>0){
return list.get(0);
}
return null;
}
//获取有效的上线
......
......@@ -8,6 +8,7 @@ import com.github.wxiaoqi.security.admin.rpc.service.AppPermissionService;
import com.github.wxiaoqi.security.admin.vo.ImiVo;
import com.github.wxiaoqi.security.api.vo.authority.PermissionInfo;
import com.github.wxiaoqi.security.api.vo.user.AppUserInfo;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
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;
......@@ -276,4 +277,12 @@ public class AppUserRest {
}
/*@GetMapping("/app/unauth/test")
@IgnoreUserToken
public ObjectRestResponse test(){
appPermissionService.test();
return ObjectRestResponse.succ();
}
*/
}
......@@ -44,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.*;
......@@ -204,7 +205,7 @@ public class AppPermissionService {
return JsonResultUtil.createDefaultFail();
}
try {
result.put("mobilecode", mobilecode);
result.put("mobilecode", "");//mobilecode
String redisLockKey = RedisKey.CONSTANT_CODE_PREFIX + phone + mobilecode;
Boolean suc = userRedisTemplate.opsForValue().setIfAbsent(redisLockKey, mobilecode);
if (suc) {
......@@ -323,6 +324,7 @@ public class AppPermissionService {
parentId=appUserDetailBiz.getUserByCode(code);
}
if(parentId!=null&&parentId>0){
rsUserDetail.setSource(1);
relationBiz.bindRelation(userid, parentId, 1);
if(StringUtils.isNotBlank(activityCode)){
rsUserDetail.setInviterAccount(parentId);
......@@ -390,6 +392,53 @@ public class AppPermissionService {
}
}
public void test(){
Example example=new Example(AppUserLogin.class);
example.createCriteria().andEqualTo("imUserid",0);
List<AppUserLogin> list=appUserLoginBiz.selectByExample(example);
for (AppUserLogin userLogin:list) {
Long now = System.currentTimeMillis() / 1000;
Integer userId = userLogin.getId();
String username = userLogin.getUsername();
String ip = getIp();
String nickname = SystemConfig.USER_NIKENAME_DEFAULT + (int) ((Math.random() * 9 + 1) * 100000);
AppUserDetail rsUserDetail = new AppUserDetail();
rsUserDetail.setUserid(userId);
rsUserDetail = appUserDetailBiz.selectOne(rsUserDetail);
if (rsUserDetail == null) {
rsUserDetail=new AppUserDetail();
rsUserDetail.setUserid(userId);
rsUserDetail.setNickname(nickname);
rsUserDetail.setHeadimgurl(SystemConfig.USER_HEADER_URL_DEFAULT); // 默认路径,待写
rsUserDetail.setCreatetime(now);
rsUserDetail.setUpdatetime(now);
rsUserDetail.setIsdel(0);
rsUserDetail.setCrtHost(ip);
//生成邀请码 长度改为8 不然重复率太高
rsUserDetail.setCode(ReferralCodeUtil.encode(userId));
appUserDetailBiz.insertSelective(rsUserDetail);
} else {
nickname=rsUserDetail.getNickname();
}
Map<String, Object> map = registerIm(userLogin.getUsername(), userLogin.getPassword(), nickname);
if (map != null) {
Integer imUserId = Integer.parseInt(map.get("userId").toString());
String imPassword = map.get("password").toString();
if (imUserId != null && imUserId > 0 && StringUtils.isNotBlank(imPassword)) {
AppUserLogin userLogin1 = new AppUserLogin();
userLogin1.setId(userId);
userLogin1.setImPassword(imPassword);
userLogin1.setImUserid(imUserId);
userLogin1.setUsername(username);
appUserLoginBiz.updateSelectiveById(userLogin1);
log.info(username + "----userLogin updateSelectiveById---username=====" + username + "----imPassword====" + imPassword);
}
}
}
}
private void sendQueue(String username, String password, String headimgurl, String nickname, String mobilecode, String openId, String unionid, Integer type, String code, String activityCode, Integer userid,Integer sign) {
try {
RegisterQueueDTO registerQueueDTO = new RegisterQueueDTO();
......
......@@ -24,4 +24,6 @@ public class ActivityLuckDrawFindDTO extends PageParam {
private Date endTime;
private String phone;
private Integer activityId;
private String parentPhone;
}
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;
}
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;
......@@ -50,7 +51,7 @@ public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, Activ
*
* @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();
......@@ -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
......@@ -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.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")
......
......@@ -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
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;
......@@ -18,6 +19,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;
......@@ -167,9 +169,21 @@ public class VehicleDepartureController {
@GetMapping("findReserveType")
public ObjectRestResponse<OrderPageVO> getOrderDetail() {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
String reserveType = dictionaryMap.get(VEHICE_ORDER + "_" + RESERVE).getName();
String reserveType = dictionaryMap.get(VEHICE_ORDER + "_" + RESERVE).getDetail();
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