Commit 20f0e52c authored by hezhen's avatar hezhen

Merge branch 'dev' of http://113.105.137.151:22280/youjj/cloud-platform into dev

parents 26814df7 bc22928a
......@@ -125,4 +125,5 @@ public abstract class BaseBiz<M extends Mapper<T>, T> {
return new TableResultResponse<T>(result.getTotal(), list);
}
}
package com.github.wxiaoqi.security.common.util;
import javax.servlet.http.HttpServletRequest;
public class UserAgentUtil {
/**
* 关键字: 微信浏览器
*/
public static final String KEY_WEIXIN_BROWSER = "micromessenger";
/**
* 判断是否微信浏览器
*
* @param user_agent
* @return
*/
public static boolean isWexinBrowser(HttpServletRequest request) {
// 可能会出现npe
String user_agent = "";
user_agent = request.getHeader("user-agent");
// 修改如下
return user_agent != null && user_agent.toLowerCase().indexOf(KEY_WEIXIN_BROWSER) > 0;
}
}
......@@ -16,4 +16,6 @@ public class UserIncomeBo {
private Integer userId;
private BigDecimal income;
private Long leagueTime;
}
......@@ -25,7 +25,10 @@ public class UserTeamMemberBo {
* 用户名
*/
private String userName;
/**
* 真实名称
*/
private String realName;
/**
* 昵称
*/
......
package com.github.wxiaoqi.security.admin.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/9/23 16:51
*/
@Builder(toBuilder = true)
@Data
public class AppUserPositionTempDTO {
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "手机号码")
private String phone;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "职位id")
private Integer positionId;
}
package com.github.wxiaoqi.security.admin.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.Data;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/9/23 18:36
*/
@Data
public class AppUserPositionTempFindDTO extends PageParam {
private String phone;
private String name;
private Integer status;
}
package com.github.wxiaoqi.security.admin.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* 用户身份职位临时表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
@Data
@Table(name = "app_user_position_temp")
public class AppUserPositionTemp implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
@Column(name = "phone")
@ApiModelProperty(value = "手机号码")
private String phone;
@Column(name = "position_id")
@ApiModelProperty(value = "职位id")
private Integer positionId;
@Column(name = "name")
@ApiModelProperty(value = "姓名")
private String name;
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
@Column(name = "is_del")
@ApiModelProperty(value = "是否删除:0-正常;1-删除")
private Integer isDel;
}
package com.github.wxiaoqi.security.admin.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/9/23 18:38
*/
@Builder(toBuilder = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AppUserPositionTempVo {
private Integer id;
@ApiModelProperty(value = "手机号码")
private String phone;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "职位名")
private String positionName;
@ApiModelProperty(value = "数据状态 1:已核销 2:未核销")
private Integer status;
@ApiModelProperty(value = "创建时间", hidden = true )
private Long crtTime;
}
......@@ -3,6 +3,7 @@ package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.dto.UserPostionDTO;
import com.github.wxiaoqi.security.admin.vo.WalletPostionVo;
import org.apache.commons.collections.CollectionUtils;
import org.jsoup.select.Collector;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
......@@ -11,9 +12,10 @@ import com.github.wxiaoqi.security.admin.mapper.AppUserPositionMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 用户身份职位表
......@@ -23,7 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger;
* @date 2019-07-09 10:00:42
*/
@Transactional
@Service
@Service("appUserPositionBiz")
public class AppUserPositionBiz extends BaseBiz<AppUserPositionMapper,AppUserPosition> {
......@@ -58,4 +60,19 @@ public class AppUserPositionBiz extends BaseBiz<AppUserPositionMapper,AppUserPos
}
return counter.get();
}
public Map<Integer, AppUserPosition> findPostionIdAndPostionMapByIds(List<Integer> postionIds) {
Map<Integer,AppUserPosition> postionMap = new HashMap<>();
List<AppUserPosition> data= mapper.selectByIdList(postionIds);
if(CollectionUtils.isEmpty(data)){
return postionMap;
}
postionMap = data.stream().collect(Collectors.toMap(AppUserPosition::getId, Function.identity()));
return postionMap;
}
public Map<Integer, String> findPostionIdAndNameMap() {
List<AppUserPosition> postions = selectListAll();
return postions.stream().collect(Collectors.toMap(AppUserPosition::getId,AppUserPosition::getName));
}
}
\ No newline at end of file
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.dto.AppUserPositionTempDTO;
import com.github.wxiaoqi.security.admin.dto.AppUserPositionTempFindDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserPosition;
import com.github.wxiaoqi.security.admin.entity.AppUserPositionTemp;
import com.github.wxiaoqi.security.admin.mapper.AppUserPositionTempMapper;
import com.github.wxiaoqi.security.admin.vo.AppUserPositionTempVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
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.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
/**
* 用户身份职位表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
@Transactional
@DependsOn("appUserPositionBiz")
@Service
public class AppUserPositionTempBiz extends BaseBiz<AppUserPositionTempMapper, AppUserPositionTemp> implements InitializingBean {
@Autowired
private AppUserDetailBiz detailBiz;
@Autowired
private AppUserLoginBiz loginBiz;
@Autowired
private AppUserPositionBiz appUserPositionBiz;
private Map<Integer, String> postionIdAndNameMap;
public ObjectRestResponse add(AppUserPositionTempDTO appUserPositionTempDTO) {
if (appUserPositionTempDTO == null || StringUtils.isBlank(appUserPositionTempDTO.getPhone()) || StringUtils.isBlank(appUserPositionTempDTO.getName())
|| appUserPositionTempDTO.getPositionId() == null || appUserPositionTempDTO.getPositionId() == 0) {
return ObjectRestResponse.createFailedResult(ResultCode.NOTEXIST_CODE, "参数不能为空");
}
String phone = appUserPositionTempDTO.getPhone();
Integer id = appUserPositionTempDTO.getId() == null ? 0 : appUserPositionTempDTO.getId();
Example example = new Example(AppUserPositionTemp.class);
example.createCriteria().andEqualTo("phone", phone).andNotEqualTo("id", id).andEqualTo("isDel", 0);
List<AppUserPositionTemp> list = selectByExample(example);
if (list.size() > 0) {
return ObjectRestResponse.createFailedResult(ResultCode.EXIST_CODE, "手机号码已存在");
}
Integer userId = 0;
AppUserLogin userLogin = loginBiz.checkeUserLogin(phone);
if (userLogin != null) {
userId = userLogin.getId();
}
AppUserPositionTemp userPositionTemp = new AppUserPositionTemp();
BeanUtils.copyProperties(appUserPositionTempDTO, userPositionTemp);
userPositionTemp.setUserId(userId);
//编辑
if (id == null || id == 0) {
insertSelective(userPositionTemp);
} else {
updateSelectiveById(userPositionTemp);
}
if (userId!=0){
detailBiz.updateUserPositionByUserId(userId,appUserPositionTempDTO.getPositionId());
}
return ObjectRestResponse.succ();
}
public void updateAppuserPostionStatusById(Integer id, int status) {
AppUserPositionTemp appUserPositionTemp = new AppUserPositionTemp();
appUserPositionTemp.setId(id);
appUserPositionTemp.setIsDel(status);
mapper.updateByPrimaryKeySelective(appUserPositionTemp);
}
public PageDataVO<AppUserPositionTempVo> findWithPage(AppUserPositionTempFindDTO appUserPositionTempFindDTO) {
PageDataVO<AppUserPositionTempVo> dataVO = new PageDataVO<>();
Example example = new Example(AppUserPositionTemp.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("isDel", 0);
if (StringUtils.isNotEmpty(appUserPositionTempFindDTO.getName())) {
criteria.andLike("name", String.format("%%%s%%", appUserPositionTempFindDTO.getName().trim()));
}
if (StringUtils.isNotEmpty(appUserPositionTempFindDTO.getPhone())) {
criteria.andEqualTo("phone", appUserPositionTempFindDTO.getPhone());
}
if(Objects.nonNull(appUserPositionTempFindDTO.getStatus())) {
if (DataStatus.USERED.code == appUserPositionTempFindDTO.getStatus()) {
criteria.andIsNotNull("userId");
}
if (DataStatus.NO_USERED.code == appUserPositionTempFindDTO.getStatus()) {
criteria.andIsNull("userId");
}
}
PageDataVO<AppUserPositionTemp> pageDataVO = PageDataVO.pageInfo(appUserPositionTempFindDTO.getPage(), appUserPositionTempFindDTO.getLimit(), () -> mapper.selectByExample(example));
List<AppUserPositionTemp> data = pageDataVO.getData();
if (CollectionUtils.isEmpty(data)) {
dataVO.setData(Collections.EMPTY_LIST);
dataVO.setPageNum(appUserPositionTempFindDTO.getPage());
dataVO.setPageSize(appUserPositionTempFindDTO.getLimit());
return dataVO;
}
List<Integer> postionIds = data.stream().map(AppUserPositionTemp::getPositionId).collect(Collectors.toList());
Map<Integer, AppUserPosition> postionMap = appUserPositionBiz.findPostionIdAndPostionMapByIds(postionIds);
List<AppUserPositionTempVo> appUserPositionTempVos = new ArrayList<>();
AppUserPositionTempVo appUserPositionTempVo;
for (AppUserPositionTemp appUserPositionTemp : data) {
appUserPositionTempVo = new AppUserPositionTempVo();
BeanUtils.copyProperties(appUserPositionTemp, appUserPositionTempVo);
String postionName = postionMap == null ? "" : postionMap.get(appUserPositionTemp.getPositionId()).getName();
appUserPositionTempVo.setPositionName(postionName);
appUserPositionTempVo.setStatus(appUserPositionTemp.getUserId() == null ? DataStatus.NO_USERED.code : DataStatus.USERED.code);
}
dataVO.setData(appUserPositionTempVos);
dataVO.setPageSize(pageDataVO.getPageSize());
dataVO.setPageNum(pageDataVO.getPageNum());
dataVO.setTotalCount(pageDataVO.getTotalCount());
dataVO.setTotalPage(pageDataVO.getTotalPage());
return dataVO;
}
public Map<String,Object> importUserPostion(List<String[]> userPostionData) {
Map<String,Object> result = new HashMap<>(2);
List<Map<String, Object>> errorResult = Lists.newArrayList();
Map<String, Object> errorResultMap;
Set<Map.Entry<Integer, String>> entrySet = postionIdAndNameMap.entrySet();
AppUserPositionTemp appUserPositionTemp;
for (int i = 0; i < userPostionData.size(); i++) {
String[] data = userPostionData.get(i);
Integer postionId = null;
String name="";
String phone="";
String postionName="";
try {
name = data[0];
phone = data[1];
if (StringUtils.isEmpty(phone)){
throw new BaseException("手机号为空");
}
postionName = data[2];
if (StringUtils.isEmpty(postionName)){
throw new BaseException("身份为空");
}
//根据手机号查询userId
AppUserLogin userLogin = loginBiz.checkeUserLogin(phone);
for (Map.Entry<Integer, String> integerStringEntry : entrySet) {
if (integerStringEntry.getValue().contains(postionName)) {
postionId = integerStringEntry.getKey();
break;
}
}
appUserPositionTemp = new AppUserPositionTemp();
appUserPositionTemp.setCrtTime(Instant.now().toEpochMilli());
appUserPositionTemp.setName(name);
appUserPositionTemp.setPositionId(postionId);
appUserPositionTemp.setPhone(phone);
appUserPositionTemp.setUserId(0);
if (Objects.nonNull(userLogin)) {
//更新用户身份信息
detailBiz.updateUserPositionByUserId(userLogin.getId(), postionId);
appUserPositionTemp.setUserId(userLogin.getId());
}
mapper.insertWithIgnoreRepeat(appUserPositionTemp);
} catch (BaseException ex) {
errorResultMap = new HashMap<>(1);
errorResultMap.put("num", i);
errorResultMap.put("msg",ex.getMessage());
errorResult.add(errorResultMap);
}catch (ArrayIndexOutOfBoundsException ex){
errorResultMap = new HashMap<>(1);
errorResultMap.put("num", i);
String msg= "";
if(StringUtils.isEmpty(phone)){
msg+="手机号码缺失";
}
if (StringUtils.isEmpty(postionName)){
msg+=",身份信息缺失";
}
errorResultMap.put("msg",msg);
errorResult.add(errorResultMap);
} catch (Exception ex){
errorResultMap = new HashMap<>(1);
errorResultMap.put("num", i);
errorResultMap.put("msg","数据"+Arrays.toString(data)+"保存失败");
errorResult.add(errorResultMap);
}
}
result.put("success",userPostionData.size()-errorResult.size());
result.put("error",errorResult.size());
result.put("data",errorResult);
return result;
}
private enum DataStatus {
USERED(1), NO_USERED(0);
private int code;
DataStatus(int code) {
this.code = code;
}
}
@Override
public void afterPropertiesSet() throws Exception {
postionIdAndNameMap = appUserPositionBiz.findPostionIdAndNameMap() == null ? Collections.EMPTY_MAP : appUserPositionBiz.findPostionIdAndNameMap();
}
}
......@@ -242,8 +242,8 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
return AopContext.currentProxy() != null ? (AppUserRelationBiz) AopContext.currentProxy() : this;
}
public PageDataVO<AppUserRelation> findMemberPageByLeaderId(Integer leaderId, Integer pageNo, Integer pageSize) {
return PageDataVO.pageInfo(pageNo, pageSize, () -> mapper.selectByLeaderId(leaderId));
public List<AppUserRelation> findMemberPageByLeaderId(Integer leaderId) {
return mapper.selectByLeaderId(leaderId);
}
public InviteMemberVo findInviteMemberByActivitState(Integer leaderId, Integer state, Integer page, Integer limit) {
......
......@@ -271,13 +271,8 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
}
public Map<Integer, BigDecimal> findMemberIdAndIncomeMapByMemberIds(List<Integer> memberIds) {
Map<Integer, BigDecimal> memberIdAndIncomeMap = new HashMap<>();
List<UserIncomeBo> userIncomeBos = mapper.accquireIncomeByMemberIds(memberIds);
if (CollectionUtils.isNotEmpty(userIncomeBos)) {
memberIdAndIncomeMap = userIncomeBos.stream().collect(Collectors.toMap(UserIncomeBo::getUserId, userIncomeBo -> userIncomeBo.getIncome() == null ? new BigDecimal(0) : userIncomeBo.getIncome()));
}
return memberIdAndIncomeMap;
public PageDataVO<UserIncomeBo> findMemberIdAndIncomeMapByMemberIds(Integer parentId,Integer pageNo,Integer pageSize) {
return PageDataVO.pageInfo(pageNo,pageSize,()->mapper.accquireIncomeByMemberIds(parentId));
}
public SellingWalletPagVo findSellingWaterPageByWaiting(Integer waiting, Integer userId, Integer pageNo, Integer pageSize) {
......
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.bo.PromoteBO;
import com.github.wxiaoqi.security.admin.bo.UserIncomeBo;
import com.github.wxiaoqi.security.admin.bo.UserTeamMemberBo;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
......@@ -14,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -40,12 +42,11 @@ public class UserBusinessBiz {
public UserTeamMemberVo findTeamMemberPageByUserId(Integer userId, Integer pageNo, Integer pageSize) {
UserTeamMemberVo userTeamMemberVo = new UserTeamMemberVo();
//根据用户id去关系表里查询下级
PageDataVO<AppUserRelation> memberPage = appUserRelationBiz.findMemberPageByLeaderId(userId, pageNo, pageSize);
UserTeamMemberVo userTeamMemberVo = new UserTeamMemberVo();
List<AppUserRelation> teamMemberBos = memberPage.getData();
if (CollectionUtils.isEmpty(teamMemberBos)) {
PageDataVO<UserIncomeBo> dataVO = appUserSellingWaterBiz.findMemberIdAndIncomeMapByMemberIds(userId, pageNo, pageSize);
List<UserIncomeBo> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)) {
userTeamMemberVo.setPageNum(pageNo);
userTeamMemberVo.setPageSize(pageSize);
userTeamMemberVo.setTotalIncome(new BigDecimal(0));
......@@ -53,63 +54,61 @@ public class UserBusinessBiz {
return userTeamMemberVo;
}
List<Integer> memberIds = teamMemberBos.stream().map(team -> team.getUserId()).collect(Collectors.toList());
Map<Integer, BigDecimal> memberIdAndIncomeMap = appUserSellingWaterBiz.findMemberIdAndIncomeMapByMemberIds(memberIds);
if (memberIdAndIncomeMap == null) {
return userTeamMemberVo;
}
Map<Integer,AppUserLogin> userIdAndAppUserLoginMap = appUserLoginBiz.findUserIdAndUserLoginMapByMemberIds(memberIds);
Map<Integer, AppUserDetail> userIdAndAppUserDetailMap = appUserDetailBiz.findUserIdAndUserDetailMapByMemberIds(memberIds);
Map<Integer, UserIncomeBo> userIdAndIncomMap = data.stream().collect(Collectors.toMap(UserIncomeBo::getUserId, Function.identity()));
List<Integer> memberIds = data.stream().map(UserIncomeBo::getUserId).collect(Collectors.toList());
Map<Integer, AppUserLogin> userIdAndAppUserLoginMap = appUserLoginBiz.findUserIdAndUserLoginMapByMemberIds(memberIds);
Map<Integer, AppUserDetail> userIdAndAppUserDetailMap = appUserDetailBiz.findUserIdAndUserDetailMapByMemberIds(memberIds);
List<UserTeamMemberBo> userTeamMemberBos = new ArrayList<>();
UserTeamMemberBo userTeamMemberBo;
BigDecimal totalIncome = new BigDecimal(0);
for (AppUserRelation appUserRelation : teamMemberBos) {
for (Integer memberId : memberIds) {
userTeamMemberBo = new UserTeamMemberBo();
userTeamMemberBo.setLeagueTime(appUserRelation.getBindTime());
userTeamMemberBo.setUserId(appUserRelation.getUserId());
userTeamMemberBo.setLeagueTime(userIdAndIncomMap.get(memberId).getLeagueTime());
userTeamMemberBo.setUserId(memberId);
if (userIdAndAppUserLoginMap!=null){
AppUserLogin appUserLogin = userIdAndAppUserLoginMap.get(appUserRelation.getUserId());
if (appUserLogin==null){
if (userIdAndAppUserLoginMap != null) {
AppUserLogin appUserLogin = userIdAndAppUserLoginMap.get(memberId);
if (appUserLogin == null) {
continue;
}
userTeamMemberBo.setUserName(appUserLogin.getUsername());
}
if (userIdAndAppUserDetailMap!=null){
AppUserDetail appUserDetail = userIdAndAppUserDetailMap.get(appUserRelation.getUserId());
userTeamMemberBo.setHeadUrl(appUserDetail==null?"":appUserDetail.getHeadimgurl());
userTeamMemberBo.setNickName(appUserDetail==null?"":appUserDetail.getNickname());
if (userIdAndAppUserDetailMap != null) {
AppUserDetail appUserDetail = userIdAndAppUserDetailMap.get(memberId);
userTeamMemberBo.setHeadUrl(appUserDetail == null ? "" : appUserDetail.getHeadimgurl());
userTeamMemberBo.setNickName(appUserDetail == null ? "" : appUserDetail.getNickname());
userTeamMemberBo.setRealName(appUserDetail == null ? "" : appUserDetail.getRealname());
}
BigDecimal income=memberIdAndIncomeMap.get(appUserRelation.getUserId())==null?new BigDecimal(0):memberIdAndIncomeMap.get(appUserRelation.getUserId());
BigDecimal income = userIdAndIncomMap.get(memberId).getIncome() == null ? new BigDecimal(0) : userIdAndIncomMap.get(memberId).getIncome();
userTeamMemberBo.setIncome(income);
totalIncome = totalIncome.add(income);
userTeamMemberBos.add(userTeamMemberBo);
}
userTeamMemberVo.setPageNum(memberPage.getPageNum());
userTeamMemberVo.setPageSize(memberPage.getPageSize());
userTeamMemberVo.setTotalCount(memberPage.getTotalCount().intValue());
userTeamMemberVo.setTotalPage(memberPage.getTotalPage());
userTeamMemberBos.sort(Comparator.comparing(UserTeamMemberBo::getIncome).reversed());
userTeamMemberVo.setPageNum(dataVO.getPageNum());
userTeamMemberVo.setPageSize(dataVO.getPageSize());
userTeamMemberVo.setTotalCount(dataVO.getTotalCount().intValue());
userTeamMemberVo.setTotalPage(dataVO.getTotalPage());
userTeamMemberVo.setUserTeamMemberBos(userTeamMemberBos);
userTeamMemberVo.setTotalIncome(totalIncome);
return userTeamMemberVo;
}
public PromoteBO getPromoteBoByUserId(Integer userId) {
public PromoteBO getPromoteBoByUserId(Integer userId) {
PromoteBO promoteBO = new PromoteBO();
Integer leaderId = appUserRelationBiz.findLeaderIdByMemberId(userId);
Map<Integer,Integer> memberStateAndCountMap = appUserRelationBiz.findMemberSateAndCountMapByLeaderId(userId);
Integer leaderId = appUserRelationBiz.findLeaderIdByMemberId(userId);
Map<Integer, Integer> memberStateAndCountMap = appUserRelationBiz.findMemberSateAndCountMapByLeaderId(userId);
if (leaderId != 0) {
Map<Integer, AppUserLogin> userIdAndUserLoginMap = appUserLoginBiz.findUserIdAndUserLoginMapByMemberIds(Arrays.asList(leaderId));
Map<Integer, AppUserDetail> userIdAndUserDetailMap = appUserDetailBiz.findUserIdAndUserDetailMapByMemberIds(Arrays.asList(leaderId));
if (!userIdAndUserLoginMap.isEmpty()){
if (!userIdAndUserLoginMap.isEmpty()) {
promoteBO.setLeaderUsername(userIdAndUserLoginMap.get(leaderId).getUsername());
}
if (!userIdAndUserDetailMap.isEmpty()){
if (!userIdAndUserDetailMap.isEmpty()) {
promoteBO.setLeaderHeadUrl(userIdAndUserDetailMap.get(leaderId).getHeadimgurl());
}
}
......@@ -117,7 +116,7 @@ public class UserBusinessBiz {
promoteBO.setActivatedNumber(memberStateAndCountMap.get(1));
BigDecimal totalIncome = appUserSellingWaterBiz.selectTotalIncomeByUserId(userId);
promoteBO.setTotalIncome(totalIncome==null?new BigDecimal(0):totalIncome);
promoteBO.setTotalIncome(totalIncome == null ? new BigDecimal(0) : totalIncome);
return promoteBO;
}
}
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.dto.UserPostionDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserPosition;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 用户身份职位表
*
......@@ -14,7 +12,7 @@ import java.util.List;
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
public interface AppUserPositionMapper extends Mapper<AppUserPosition> {
public interface AppUserPositionMapper extends Mapper<AppUserPosition>, IdListMapper<AppUserPosition,Integer> {
AppUserPosition getExtractByUserId(@Param("userId")Integer userId);
......
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.AppUserPositionTemp;
import org.apache.ibatis.annotations.Insert;
import tk.mybatis.mapper.common.Mapper;
/**
* 用户身份职位表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-07-09 10:00:42
*/
public interface AppUserPositionTempMapper extends Mapper<AppUserPositionTemp> {
@Insert("INSERT IGNORE INTO `app_user_position_temp`(`user_id`,`phone`,`name`,`position_id`,`crt_time`)VALUES(#{userId},#{phone},#{name},#{positionId},#{crtTime})")
void insertWithIgnoreRepeat(AppUserPositionTemp appUserPositionTemp);
}
......@@ -17,7 +17,7 @@ import java.util.List;
*/
public interface AppUserSellingWaterMapper extends Mapper<AppUserSellingWater> {
List<UserIncomeBo> accquireIncomeByMemberIds(@Param("memberIds") List<Integer> memberIds);
List<UserIncomeBo> accquireIncomeByMemberIds(@Param("parentId") Integer parentId);
BigDecimal selectTotalIncomeByUserId(@Param("userId") Integer userId);
}
package com.github.wxiaoqi.security.admin.rest;
import com.github.wxiaoqi.security.admin.biz.*;
import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserGroups;
import com.github.wxiaoqi.security.admin.vo.AppUserInfoVo;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.UserMemberVo;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
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;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.msg.TableResultResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.feign.OrderFeign;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
/**
* @author keliii
*/
@Controller
@RequestMapping("demo")
@Slf4j
public class DemoController extends CommonBaseController{
@GetMapping("/app/unauth/test")
@IgnoreUserToken
@IgnoreClientToken
public String test() {
return String.format("redirect:https://xxtest.upyuns.com/h5/appHtml/view/travelDetails.html?id=96&shareType=app");
}
}
package com.github.wxiaoqi.security.admin.rest.admin;
import com.github.wxiaoqi.security.admin.biz.AppUserPositionBiz;
import com.github.wxiaoqi.security.admin.biz.AppUserPositionTempBiz;
import com.github.wxiaoqi.security.admin.dto.AppUserPositionTempDTO;
import com.github.wxiaoqi.security.admin.dto.AppUserPositionTempFindDTO;
import com.github.wxiaoqi.security.admin.dto.UserPostionDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserPositionTempVo;
import com.github.wxiaoqi.security.admin.vo.WalletPostionVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.excel.ExcelImport;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* @author libin
......@@ -19,18 +27,66 @@ import java.util.List;
@RequestMapping("/postion/admin")
public class AppUserPositionController {
@Autowired
@Autowired
private AppUserPositionBiz appUserPositionBiz;
@GetMapping("/postions")
public ObjectRestResponse<List<WalletPostionVo>> findAllPostions(){
List<WalletPostionVo> walletPostionVos = appUserPositionBiz.findAllPostions();
return ObjectRestResponse.succ(walletPostionVos);
}
@PutMapping
public ObjectRestResponse updateUserPostionPercentage(@RequestBody List<UserPostionDTO> userPostionDTOS){
appUserPositionBiz.updateUserPostionPercentage(userPostionDTOS);
return ObjectRestResponse.succ();
}
@Autowired
private AppUserPositionTempBiz appUserPositionTempBiz;
@GetMapping("/postions")
public ObjectRestResponse<List<WalletPostionVo>> findAllPostions() {
List<WalletPostionVo> walletPostionVos = appUserPositionBiz.findAllPostions();
return ObjectRestResponse.succ(walletPostionVos);
}
@PutMapping
public ObjectRestResponse updateUserPostionPercentage(@RequestBody List<UserPostionDTO> userPostionDTOS) {
appUserPositionBiz.updateUserPostionPercentage(userPostionDTOS);
return ObjectRestResponse.succ();
}
/**
* 新增或编辑身份信息
* @return
*/
@PostMapping("/add")
public ObjectRestResponse<Void> addUserPostion(@RequestBody AppUserPositionTempDTO appUserPositionTempDTO){
appUserPositionTempBiz.add(appUserPositionTempDTO);
return ObjectRestResponse.succ();
}
/**
* 批量导入
* @param userPostionExcel
* @return
*/
@PostMapping("/excel/import")
public ObjectRestResponse<Map<String,Object>> importUserPostion(@RequestPart("file") MultipartFile userPostionExcel) {
List<String[]> userPostionData = ExcelImport.getExcelData(userPostionExcel);
if (userPostionData.size() < 2) {
return ObjectRestResponse.createFailedResult(1001, "导入不能没数据!!!");
}
userPostionData.remove(0);
Map<String,Object> result = appUserPositionTempBiz.importUserPostion(userPostionData);
return ObjectRestResponse.succ(result);
}
/**
* 删除
* @param id
* @return
*/
@DeleteMapping("/{id}")
public ObjectRestResponse<Void> deleteUserPostion(@PathVariable(value = "id") Integer id){
appUserPositionTempBiz.updateAppuserPostionStatusById(id,1);
return ObjectRestResponse.succ();
}
@PostMapping("/page")
public ObjectRestResponse<PageDataVO<AppUserPositionTempVo>> findWithPage(@RequestBody AppUserPositionTempFindDTO appUserPositionTempFindDTO){
PageDataVO<AppUserPositionTempVo> dataVO = appUserPositionTempBiz.findWithPage(appUserPositionTempFindDTO);
return ObjectRestResponse.succ(dataVO);
}
}
......@@ -4,19 +4,24 @@
<select id="accquireIncomeByMemberIds" resultType="com.github.wxiaoqi.security.admin.bo.UserIncomeBo">
SELECT DISTINCT
`source_id`as userId,
IFNULL((( SELECT SUM(commission) FROM `app_user_selling_water` WHERE source_id=ausw.source_id AND `status` = 0 AND
`waiting` = 1 )
- ( SELECT SUM(commission) FROM `app_user_selling_water` WHERE source_id=ausw.source_id AND `status` = 1 AND
`waiting` = 1 )),0) as `income`
FROM
`app_user_selling_water` as ausw
WHERE
source_id in
<foreach collection="memberIds" item="memberId" open="(" close=")" separator=",">
#{memberId}
</foreach>
SELECT
aur.user_id,
aur.bind_time as `leagueTime`,
ausww.income
FROM
`app_user_relation` AS `aur`
LEFT JOIN (SELECT DISTINCT
`source_id` AS userId,
IFNULL(
(
( SELECT SUM( commission ) FROM `app_user_selling_water` WHERE source_id = ausw.source_id AND `status` = 0 AND `waiting` = 1 ) - ( SELECT SUM( commission ) FROM `app_user_selling_water` WHERE source_id = ausw.source_id AND `status` = 1 AND `waiting` = 1 )
),
0
) AS `income`
FROM
`app_user_selling_water` AS ausw) AS ausww ON ausww.userId=aur.user_id
WHERE aur.parent_id=#{parentId}
ORDER BY ausww.`income` DESC
</select>
<select id="selectTotalIncomeByUserId" resultType="java.math.BigDecimal">
......
......@@ -47,6 +47,7 @@
<module>xx-activity</module>
<module>xx-user-behavior-collect</module>
<module>xx-uccn</module>
<module>xx-summit</module>
</modules>
<packaging>pom</packaging>
<developers>
......
......@@ -7,7 +7,7 @@ public enum AccountTypeEnum {
//账款类型 1*--入账;2*--出账
//账款类型 记帐类型 101--订单支付;201--取消订单退款;202--全部押金退款;203--部分押金退款;204--剩余押金退款
IN_ORDER_PAY(101, "订单支付"),
OUT_ORDER_FUND(201, "订单款"),
OUT_ORDER_FUND(201, "取消订单退款"),
OUT_DEPOSIT(202, "所有押金"),
OUT_PART_DEPOSIT(203, "部分押金(扣除该扣除的 + 保留违章预备金)"),
OUT_RESIDUE_DEPOSIT(204, "剩余押金(扣除该扣除的)"),
......
......@@ -7,7 +7,6 @@ import java.util.Map;
public enum OrderViolateEnum {
BEFORE(1, "提前"),
AFTER(2, "延期"),
EXCESS(3, "消费超额金")
;
/**
* 编码
......
......@@ -252,31 +252,31 @@ public class BaseOrder implements Serializable {
@Column(name = "member_level")
private Integer memberLevel;
// /**
// * 违约金
// */
// @ApiModelProperty(value = "违约金")
// @Column(name = "violate_amount")
// BigDecimal ViolateAmount;
//
// /**
// * 赔偿金
// */
// @ApiModelProperty(value = "赔偿金")
// @Column(name = "damages_amount")
// BigDecimal damagesAmount;
//
// /**
// * 额外费用
// */
// @ApiModelProperty(value = "额外费用")
// @Column(name = "extra_amount")
// BigDecimal extraAmount;
//
// /**
// * 返还的优惠券
// */
// @ApiModelProperty(value = "返回的优惠券")
// @Column(name = "back_coupon")
// String backCoupon;
/**
* 违约金
*/
@ApiModelProperty(value = "违约金")
@Column(name = "violate_amount")
BigDecimal ViolateAmount;
/**
* 赔偿金
*/
@ApiModelProperty(value = "赔偿金")
@Column(name = "damages_amount")
BigDecimal damagesAmount;
/**
* 额外费用
*/
@ApiModelProperty(value = "额外费用")
@Column(name = "extra_amount")
BigDecimal extraAmount;
/**
* 返还的优惠券
*/
@ApiModelProperty(value = "返回的优惠券")
@Column(name = "back_coupon")
String backCoupon;
}
......@@ -29,4 +29,8 @@ public class OrderAccountDetail {
* 扣款列表
*/
List<OrderAccountDeduction> deductions = Lists.newArrayList();
public BigDecimal realTotalDeduct() {
return originDepositAmount.add(originOrderAmount).subtract(orderAmount).subtract(depositAmount);
}
}
......@@ -11,7 +11,7 @@ public class InProgressVO {
/**
* 违约金
*/
BigDecimal ViolateAmount = BigDecimal.ZERO;
BigDecimal violateAmount = BigDecimal.ZERO;
/**
* 赔偿金
......@@ -67,4 +67,6 @@ public class InProgressVO {
String advanceDelayCostDetail = "";
String violateDesc = "";
}
......@@ -88,9 +88,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
OrderItemBiz orderItemBiz;
......
......@@ -84,42 +84,57 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
/**
* 租车退款流程
* @param baseOrder
* @param mainItemRealAmount 主要商品(租车费用、旅游费用等)
* @param orderDeductSource 主要商品(租车费用、旅游费用等)
* @param timeLag 与开始时间的时间差
* @param dicParentKey
*/
public BigDecimal rentRefundProcessCancel(BaseOrder baseOrder, BigDecimal mainItemRealAmount, Long timeLag, String dicParentKey, BigDecimal depositAmount, BigDecimal originalDeductAmount, OrderAccountDetail oad, BigDecimal topAmount) {
//计算退款金额
//商品价格 - 优惠券减免的价格
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(mainItemRealAmount);
public BigDecimal rentRefundProcessCancel(BaseOrder baseOrder, BigDecimal orderDeductSource, Long timeLag, String dicParentKey, BigDecimal depositAmount, BigDecimal depositDeductSource, OrderAccountDetail oad, BigDecimal topAmount) {
//原来退款 和 最终退款
BigDecimal originalRefundAmount = BigDecimal.ZERO;
BigDecimal refundAmount = BigDecimal.ZERO;
StringBuilder orderRefundDescBuilder = new StringBuilder("");
StringBuilder depositRefundDescBuilder = new StringBuilder("");
BigDecimal totalDeductAmount = BigDecimal.ZERO;
if(null == oad) {
oad = new OrderAccountDetail();
}
BigDecimal orderDeductAmount = calculateDeduction(originalRefundAmount, timeLag, dicParentKey, orderRefundDescBuilder);
orderDeductAmount = orderDeductAmount.setScale(2, RoundingMode.HALF_UP);
if(topAmount.compareTo(orderDeductAmount) > 0) {
totalDeductAmount = totalDeductAmount.add(orderDeductAmount);
topAmount = topAmount.subtract(orderDeductAmount);
}else {
totalDeductAmount = totalDeductAmount.add(topAmount);
orderDeductAmount = topAmount;
topAmount = BigDecimal.ZERO;
// 订单款 原订单退款、最终订单退款
BigDecimal originalOrderRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
BigDecimal orderRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
if(null != orderDeductSource && BigDecimal.ZERO.compareTo(orderDeductSource) < 0) {
BigDecimal orderDeductAmount = calculateDeduction(orderDeductSource, timeLag, dicParentKey, orderRefundDescBuilder);
orderDeductAmount = orderDeductAmount.setScale(2, RoundingMode.HALF_UP);
if(topAmount.compareTo(orderDeductAmount) > 0) {
totalDeductAmount = totalDeductAmount.add(orderDeductAmount);
topAmount = topAmount.subtract(orderDeductAmount);
}else {
totalDeductAmount = totalDeductAmount.add(topAmount);
orderDeductAmount = topAmount;
topAmount = BigDecimal.ZERO;
}
//订单退款
orderRefundAmount = orderRefundAmount.subtract(orderDeductAmount);
if(orderRefundAmount.compareTo(BigDecimal.ZERO) < 0) {
orderRefundAmount = BigDecimal.ZERO;
}
}
BigDecimal refundMainGoodsAmount = originalRefundAmount.subtract(orderDeductAmount);
//退款金额 = 主要商品退款 + (其他商品退款) 即--> 主要商品退款 + (总商品款 - 主要商品款)
oad.setOrderAmount(refundMainGoodsAmount.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()).subtract(mainItemRealAmount)));
BigDecimal refundAmount = oad.getOrderAmount();
//设置金额
oad.setOriginOrderAmount(originalOrderRefundAmount);
oad.setOrderAmount(orderRefundAmount);
originalRefundAmount = originalRefundAmount.add(oad.getOriginOrderAmount());
refundAmount = refundAmount.add(oad.getOrderAmount());
// 押金
BigDecimal originalRefundAmountDeposit = BigDecimal.ZERO.add(depositAmount);
BigDecimal refundAmountDeposit = BigDecimal.ZERO.add(depositAmount);
if(null != originalDeductAmount && BigDecimal.ZERO.compareTo(originalDeductAmount) < 0) {
// 押金 原押金退款、最终押金退款
BigDecimal originalDepositRefundAmount = BigDecimal.ZERO.add(depositAmount);
BigDecimal depositRefundAmount = BigDecimal.ZERO.add(depositAmount);
if(null != depositDeductSource && BigDecimal.ZERO.compareTo(depositDeductSource) < 0) {
//通过原扣除款 计算剩余款
BigDecimal depositDeductAmount = calculateDeduction(originalDeductAmount, timeLag, dicParentKey, depositRefundDescBuilder);
BigDecimal depositDeductAmount = calculateDeduction(depositDeductSource, timeLag, dicParentKey, depositRefundDescBuilder);
depositDeductAmount = depositDeductAmount.setScale(2, RoundingMode.HALF_UP);
if(topAmount.compareTo(depositDeductAmount) > 0) {
totalDeductAmount = totalDeductAmount.add(depositDeductAmount);
......@@ -131,24 +146,28 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
}
//返回押金
refundAmountDeposit = originalRefundAmountDeposit.subtract(depositDeductAmount);
depositRefundAmount = originalDepositRefundAmount.subtract(depositDeductAmount);
}
//设置违章款账单
StringBuilder stringBuilder = new StringBuilder("");
if(totalDeductAmount.compareTo(BigDecimal.ZERO) > 0) {
int originType = 0;
if(orderRefundDescBuilder.length() > 0) {
stringBuilder = orderRefundDescBuilder;
originType = OrderAccountDeduction.ORIGIN_ORDER;
}else {
stringBuilder = depositRefundDescBuilder;
originType = OrderAccountDeduction.ORIGIN_DEPOSIT;
}
oad.getDeductions().add(initDeduction(totalDeductAmount, stringBuilder.toString(), DeductionTypeEnum.VIOLATE_CANCEL, OrderAccountDeduction.ORIGIN_DEPOSIT));
oad.getDeductions().add(initDeduction(totalDeductAmount, stringBuilder.toString(), DeductionTypeEnum.VIOLATE_CANCEL, originType));
}
//设置订单押金金额
originalRefundAmount = originalRefundAmount.add(originalRefundAmountDeposit);
oad.setDepositAmount(refundAmountDeposit);
refundAmount = refundAmount.add(refundAmountDeposit);
oad.setOriginDepositAmount(originalDepositRefundAmount);
oad.setDepositAmount(depositRefundAmount);
originalRefundAmount = originalRefundAmount.add(originalDepositRefundAmount);
refundAmount = refundAmount.add(depositRefundAmount);
//退款子流程: 订单基础,退款描述, 款金额
refundSubProcess(baseOrder, stringBuilder.toString(), originalRefundAmount, refundAmount, AccountTypeEnum.OUT_ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode(), oad);
......@@ -342,10 +361,11 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
);
//设置定损金额
csv.setDamagesAmount(crosstown.getDeductionCost());
if(crosstown.getDeductionCost().compareTo(BigDecimal.ZERO) > 0) {
String handleDedRefundDesc = "";
handleDedRefundDesc = handleDed(crosstown, handleDedRefundDesc, csv);
if(csv.getDamagesAmount().compareTo(BigDecimal.ZERO) > 0) {
oad.getDeductions().add(
initDeduction(crosstown.getDeductionCost(), "定损赔偿金", DeductionTypeEnum.DAMAGES, OrderAccountDeduction.ORIGIN_DEPOSIT)
initDeduction(crosstown.getDeductionCost(), handleDedRefundDesc, DeductionTypeEnum.DAMAGES, OrderAccountDeduction.ORIGIN_DEPOSIT)
);
}
......@@ -361,7 +381,7 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
//crosstown.getRestDeposit().add(crosstown.getDeductionCost()).subtract(illegalReserve);
String refundDesc = "退还押金:"+ refundAmont.toString()+ "(已扣除 违章预备金:"+ illegalReserve.toString();
refundDesc = handleDed(crosstown, refundDesc);
refundDesc += handleDedRefundDesc;
refundDesc += ")";
refundTrigger(orderMQDTO, orderMQDTO.getOrderRentVehicleDetail(), illegalReserve, originalRefundAmount, refundAmont, refundDesc, RefundStatusEnum.RESIDUE_ILLEGAL.getCode(), AccountTypeEnum.OUT_PART_DEPOSIT, oad);
......@@ -397,12 +417,13 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
}
}
private String handleDed(OrderVehicleCrosstown crosstown, String refundDesc) {
private String handleDed(OrderVehicleCrosstown crosstown, String refundDesc, CancelStartedVO csv) {
try{
if(null != crosstown.getDedDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getDedDetail()), DedDetailDTO.class);
for(DedDetailDTO ddd : dddList) {
refundDesc += ", "+ ddd.getDeductions()+ ":"+ ddd.getCost();
csv.setDamagesAmount(csv.getDamagesAmount().add(ddd.getCost()));
}
}
}catch (Exception e) {
......@@ -414,19 +435,12 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
private void handleCrosstownDetail(OrderVehicleCrosstown crosstown, OrderAccountDetail oad) {
try{
if(null != crosstown.getViolateDetail()) {
List<DedDetailDTO> dddList = JSONUtil.toList(JSONUtil.parseArray(crosstown.getViolateDetail()), DedDetailDTO.class);
for(DedDetailDTO vio : dddList) {
if(OrderViolateEnum.BEFORE.getCode().equals(vio.getType())) {
for(OrderAccountDeduction deduction : oad.getDeductions()) {
if(DeductionTypeEnum.VIOLATE_ADVANCE.getCode().equals(deduction.getType())) {
deduction.setName(vio.getDeductions());
BigDecimal diff = vio.getCost().subtract(deduction.getAmount());
//修改归还押金金额
oad.setDepositAmount(oad.getDepositAmount().subtract(diff));
deduction.setAmount(vio.getCost());
}
}
}
DedDetailDTO vio = JSONUtil.toBean(crosstown.getViolateDetail(), DedDetailDTO.class);
if(OrderViolateEnum.BEFORE.getCode().equals(vio.getType())) {
handleViolateDetail(DeductionTypeEnum.VIOLATE_ADVANCE, oad, vio);
}else if(OrderViolateEnum.AFTER.getCode().equals(vio.getType())) {
handleViolateDetail(DeductionTypeEnum.VIOLATE_DELAY, oad, vio);
}
}
}catch (Exception e) {
......@@ -434,6 +448,18 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
}
}
private void handleViolateDetail(DeductionTypeEnum dte, OrderAccountDetail oad, DedDetailDTO vio) {
for(OrderAccountDeduction deduction : oad.getDeductions()) {
if(dte.getCode().equals(deduction.getType())) {
deduction.setName(vio.getDeductions());
BigDecimal diff = vio.getCost().subtract(deduction.getAmount());
//修改归还押金金额
oad.setDepositAmount(oad.getDepositAmount().subtract(diff));
deduction.setAmount(vio.getCost());
}
}
}
/**
* 获取每日订单账目,用于统计
......
......@@ -251,6 +251,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getDedDetail())) {
JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail());
if(jsonArray != null && jsonArray.size() > 0) {
orderVehicleCrosstownDto.setDeduction(true);
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
if (jsonObject != null) {
......@@ -261,18 +262,13 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
//延期扣除费用
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getViolateDetail())) {
JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail());
if(jsonArray != null && jsonArray.size() > 0) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
if (jsonObject != null) {
if (jsonObject.getString("cost") != null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
if (jsonObject.getString("excessCost") != null) {
cost += Double.parseDouble(jsonObject.getString("excessCost"));
}
}
JSONObject jsonObject = JSONObject.parseObject(orderVehicleCrosstownDto.getViolateDetail());
if (jsonObject != null) {
if (jsonObject.getString("cost") != null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
if (jsonObject.getString("excessCost") != null) {
cost += Double.parseDouble(jsonObject.getString("excessCost"));
}
}
}
......
......@@ -7,9 +7,12 @@ import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.app.feign.ConfigFeign;
import com.xxfc.platform.order.biz.OrderAccountBiz;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.contant.enumerate.DeductionTypeEnum;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.account.OrderAccountDeduction;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO;
......@@ -49,9 +52,6 @@ public class OrderCalculateBiz {
@Autowired
ActivityFeign activityFeign;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
OrderItemBiz orderItemBiz;
......@@ -152,13 +152,14 @@ public class OrderCalculateBiz {
violateDesc += StrUtil.format("(封顶{}元)", orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
}
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal((residueDays + ""))));
inProgressVO.setViolateDesc(" 提前还车违约金:"+ violateDesc);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_ADVANCE, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}else if(residueDays < 0 && !isCancel){
//如果订单 出发中 或者 已完成 或者定损中
if(OrderStatusEnum.ORDER_WAIT.equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FINISH.equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FIXED_LOSS.equals(baseOrder.getStatus())) {
if(OrderStatusEnum.ORDER_WAIT.getCode().equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FINISH.getCode().equals(baseOrder.getStatus()) ||
OrderStatusEnum.ORDER_FIXED_LOSS.getCode().equals(baseOrder.getStatus())) {
Integer overDays = 0 - residueDays;
String violateDesc = StrUtil.format("({}元/天 x200%) x{}天", orderItem.getUnitPrice().toString(), overDays);
// if(overDays > 2) {
......@@ -167,6 +168,7 @@ public class OrderCalculateBiz {
// }
//超过的天数 * 200% * 单价
inProgressVO.setViolateAmount(orderItem.getUnitPrice().multiply(new BigDecimal(2+ "")).multiply(new BigDecimal((overDays + ""))));
inProgressVO.setViolateDesc(" 延期还车违约金:"+ violateDesc);
OrderAccountDeduction violateDeduction = orderAccountBiz.initDeduction(inProgressVO.getViolateAmount(), violateDesc, DeductionTypeEnum.VIOLATE_DELAY, OrderAccountDeduction.ORIGIN_DEPOSIT);
oad.getDeductions().add(violateDeduction);
}
......
package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
......@@ -27,12 +30,13 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.universal.constant.DictionaryKey.*;
......@@ -63,9 +67,6 @@ public class OrderCancelBiz {
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
OrderMsgBiz orderMsgBiz;
......@@ -149,7 +150,7 @@ public class OrderCancelBiz {
//原退还押金
Integer freeDays = (null == orderItem.getCutNum())?0 :orderItem.getCutNum();
BigDecimal freeDayAmount = BigDecimal.ZERO;
// BigDecimal freeDayAmount = BigDecimal.ZERO;
//如果超过出发时间,不能取消订单
......@@ -180,6 +181,9 @@ public class OrderCancelBiz {
csv.setUsedfreeDayNum(inProgressVO.getUsedfreeDays());
csv.setUsedFreeAmount(inProgressVO.getUsedFreeDaysAmount());
csv.setHadConpon((StrUtil.isNotBlank(baseOrder.getCouponTickerNos())? Boolean.TRUE: Boolean.FALSE));
csv.setViolateAmount(BigDecimal.ZERO);
csv.setViolateDesc("");
//如果有扣款项,则生成额外的费用明细
if(oad.getDeductions().size() > 0) {
for(OrderAccountDeduction deduction : oad.getDeductions()) {
......@@ -190,22 +194,31 @@ public class OrderCancelBiz {
}
}
//设置订单数据
baseOrder.setViolateAmount(csv.getViolateAmount());
baseOrder.setExtraAmount(inProgressVO.getExtraAmount());
csv.initParamJson();
//orderTemplateBiz.handleCostDetailExtend(csv);
orvd.handelCostDetailExtend(csv);
orderRentVehicleBiz.updateSelectiveByIdRe(orvd);
}else {
//没到出车时间
//判断是否使用免费天数,并且进行扣款
if(freeDays > 0) {
freeDayAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
}
// //没到出车时间
// //判断是否使用免费天数,并且进行扣款
// if(freeDays > 0) {
// freeDayAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
// }
//违约金封顶 租车身份价 * 2天
BigDecimal topAmount = orderItem.getUnitPrice().multiply(new BigDecimal(2+ ""));
//退款流程
orderAccountBiz.rentRefundProcessCancel(baseOrder, orderItem.getRealAmount(), timeLag, APP_ORDER+ "_"+ RENT_REFUND, orvd.getDeposit(), freeDayAmount, oad, topAmount);
orderAccountBiz.rentRefundProcessCancel(baseOrder, BigDecimal.ZERO, timeLag, APP_ORDER+ "_"+ RENT_REFUND, orvd.getDeposit(), orderItem.getBuyAmount(), oad, topAmount);
//设置订单数据
//baseOrder.setDamagesAmount(csv.getDamagesAmount());
//baseOrder.setExtraAmount(inProgressVO.getExtraAmount());
baseOrder.setBackCoupon(baseOrder.getCouponTickerNos());
//如果有扣款项,则生成额外的费用明细
if(oad.getDeductions().size() > 0) {
......@@ -216,10 +229,14 @@ public class OrderCancelBiz {
setViolateDesc(deduction.getName());
}};
//设置订单数据
baseOrder.setViolateAmount(cnsv.getViolateAmount());
cnsv.initParamJson();
//orderTemplateBiz.handleCostDetailExtend(cnsv);
orvd.handelCostDetailExtend(cnsv);
orderRentVehicleBiz.updateSelectiveByIdRe(orvd);
break;
}
}
}
......@@ -251,8 +268,8 @@ public class OrderCancelBiz {
setOrderId(baseOrder.getId());
}});
BigDecimal adultItemAmount = (null == adultItem)? BigDecimal.ZERO: adultItem.getRealAmount();
BigDecimal childItemAmount = (null == childItem)? BigDecimal.ZERO: childItem.getRealAmount();
BigDecimal adultItemAmount = (null == adultItem)? BigDecimal.ZERO: adultItem.getBuyAmount();
BigDecimal childItemAmount = (null == childItem)? BigDecimal.ZERO: childItem.getBuyAmount();
//判断是省内还是省外
String key = TOUR_IN_REFUND;
......@@ -272,7 +289,9 @@ public class OrderCancelBiz {
setViolateDesc(deduction.getName());
}};
cnsv.initParamJson();
//设置订单数据
baseOrder.setViolateAmount(cnsv.getViolateAmount());
//orderTemplateBiz.handleCostDetailExtend(cnsv);
otd.handelCostDetailExtend(cnsv);
orderTourDetailBiz.updateSelectiveByIdRe(otd);
......@@ -310,13 +329,6 @@ public class OrderCancelBiz {
}
}
//返还优惠券
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
List<String> backCoupons = (null == inProgressVO)? inProgressVO.getBackCoupons(): Convert.convert(List.class, baseOrder.getCouponTickerNos().split(","));
for(String backCoupon : backCoupons) {
activityFeign.cancelUse(backCoupon);
}
}
}else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId());
......@@ -326,6 +338,20 @@ public class OrderCancelBiz {
tourFeign.stock(otd.getSpePriceId(), otd.getTotalNumber(), TourFeign.STOCK_PLUS);
}
//返还优惠券
if(StrUtil.isNotBlank(baseOrder.getCouponTickerNos())) {
List<String> backCoupons = (null == inProgressVO)? Convert.convert(List.class, baseOrder.getCouponTickerNos().split(",")): inProgressVO.getBackCoupons();
//设置订单参数
baseOrder.setBackCoupon(CollUtil.join(backCoupons, ","));
for(String backCoupon : backCoupons) {
activityFeign.cancelUse(backCoupon);
}
}
//更新baseOrder
BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(baseOrder), baseOrder);
//发送队列消息
baseOrderBiz.sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_CANCEL);
}else {
......
......@@ -68,9 +68,6 @@ public class OrderMsgBiz {
@Autowired
ConfigFeign configFeign;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
......@@ -283,10 +280,10 @@ public class OrderMsgBiz {
CompanyDetail endCompanyDetail = vehicleFeign.getCompanyDetail(orvd.getEndCompanyId()).getData();
if(null != orvd.getEndCompanyId() && !SYS_FALSE.equals(orvd.getEndCompanyId())) {
//新的账单 记录
//新的账单 记录 OUT_ORDER_FUND 返回订单款取消订单
OrderAccount orderAccount = orderAccountBiz.selectOne(new OrderAccount(){{
setOrderId(baseOrder.getId());
setAccountType(AccountTypeEnum.IN_ORDER_PAY.getCode());
setAccountType(AccountTypeEnum.OUT_ORDER_FUND.getCode());
}});
if(BigDecimal.ZERO.equals(orderAccount.getDeductAmount())) {
......@@ -387,26 +384,26 @@ public class OrderMsgBiz {
BigDecimal refundAmount;
BigDecimal residueAmount;
//查询订单退款记录
OrderRefund orderRefund;
OrderAccount orderAccount;
if(RefundStatusEnum.RESIDUE_ILLEGAL.equals(baseOrder.getRefundStatus())) {
smstype = SmsTemplateDTO.REFUND_A;
orderRefund = orderRefundBiz.selectOne(new OrderRefund(){{
orderAccount = orderAccountBiz.selectOne(new OrderAccount(){{
setOrderId(baseOrder.getId());
setRefundType(RefundTypeEnum.PART_DEPOSIT.getCode());
setAccountType(AccountTypeEnum.OUT_PART_DEPOSIT.getCode());
}});
originalAmount = orvd.getDeposit();
violateAmount = orderRefund.getDeductAmount();
refundAmount = orderRefund.getRefundAmount();
violateAmount = orderAccount.getDeductAmount();
refundAmount = orderAccount.getAccountAmount();
residueAmount = orvd.getReturnPayResidue();
}else if(RefundStatusEnum.REFUND_DEPOSIT.equals(baseOrder.getRefundStatus())){
smstype = SmsTemplateDTO.REFUND_B;
orderRefund = orderRefundBiz.selectOne(new OrderRefund(){{
orderAccount = orderAccountBiz.selectOne(new OrderAccount(){{
setOrderId(baseOrder.getId());
setRefundType(RefundTypeEnum.RESIDUE_DEPOSIT.getCode());
setAccountType(AccountTypeEnum.OUT_RESIDUE_DEPOSIT.getCode());
}});
originalAmount = orderRefund.getOriginalRefundAmount();
violateAmount = orderRefund.getDeductAmount();
refundAmount = orderRefund.getRefundAmount();
originalAmount = orderAccount.getOriginalAmount();
violateAmount = orderAccount.getDeductAmount();
refundAmount = orderAccount.getAccountAmount();
residueAmount = BigDecimal.ZERO;
}else {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, new HashSet<String>() {{
......
......@@ -2,7 +2,6 @@ package com.xxfc.platform.order.jobhandler;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.biz.inner.OrderMsgBiz;
import com.xxfc.platform.order.contant.enumerate.*;
......@@ -19,7 +18,6 @@ import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -27,7 +25,6 @@ import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -60,9 +57,6 @@ public class RentDepositJobHandler extends IJobHandler {
@Autowired
OrderViolationBiz orderViolationBiz;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
OrderAccountBiz orderAccountBiz;
......
package com.xxfc.platform.order.rest;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
......@@ -19,6 +20,7 @@ import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRefund;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.universal.constant.DictionaryKey;
......@@ -75,63 +77,87 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
OrderTypeEnum orderTypeEnum = OrderTypeEnum.get(orderPageVO.getType());
BigDecimal orderRefundAmount = BigDecimal.ZERO;
BigDecimal totalRefundAmount = BigDecimal.ZERO;
BigDecimal totalDeductAmount = BigDecimal.ZERO;
StringBuilder refundDescBuilder = new StringBuilder("");
String refundDesc = "";
InProgressVO inProgressVO = new InProgressVO();
switch (orderTypeEnum) {
case RENT_VEHICLE:
DateTime nowTime = DateTime.parse(DateTime.now().toString(CommonConstants.YMR_SLASH_FORMATTER_JODA), CommonConstants.YMR_SLASH_FORMATTER_JODA);
DateTime startTime = DateTime.parse(new DateTime(orderPageVO.getOrderRentVehicleDetail().getStartTime()).toString(CommonConstants.YMR_SLASH_FORMATTER_JODA), CommonConstants.YMR_SLASH_FORMATTER_JODA);
DateTime endTime = DateTime.parse(new DateTime(orderPageVO.getOrderRentVehicleDetail().getEndTime()).toString(CommonConstants.YMR_SLASH_FORMATTER_JODA), CommonConstants.YMR_SLASH_FORMATTER_JODA);
InProgressVO inProgressVO = orderCalculateBiz.inProgressCalculate(orderPageVO, baseOrderBiz.getDaysBetweenDateTime(startTime, nowTime));
// orderRefundAmount = orderAccountBiz.calculateDeduction(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
// , orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
// , DictionaryKey.APP_ORDER+ "_"+ RENT_REFUND
// , refundDescBuilder);
// OrderRentVehicleDetail orvd = orderPageVO.getOrderRentVehicleDetail();
// Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
// //原退还押金
// BigDecimal originalDeductAmount = BigDecimal.ZERO;
// BigDecimal originalRefundAmount = BigDecimal.ZERO.add(orvd.getDeposit());
// //判断是否使用免费天数,并且进行扣款
// if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
// refundDescBuilder = new StringBuilder("");
// OrderItem orderItem = orderItemBiz.selectOne(new OrderItem(){{
// setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
// setOrderId(orderPageVO.getId());
// }});
// originalDeductAmount = orderItem.getUnitPrice().multiply(new BigDecimal(orvd.getFreeDays()+ ""));
// }
// BigDecimal residueAmount = orderRefundBiz.calculateDeduction(originalDeductAmount, timeLag, APP_ORDER+ "_"+ RENT_REFUND, refundDescBuilder);
//扣款 = 违约金 + 消费金额
BigDecimal residueAmount = BigDecimal.ZERO;
//inProgressVO.get
residueAmount = residueAmount.setScale(2, RoundingMode.HALF_UP);
//押金剩余款 :押金 - (原扣除款 - 剩余款)
//退款金额 :订单剩余款 + 押金剩余款
//orderRefundAmount = orderRefundAmount.add(originalRefundAmount.subtract(originalDeductAmount.subtract(residueAmount)));
Long timeLag = orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis();
OrderItem vehicleItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.VEHICLE_MODEL.getCode());
setOrderId(orderPageVO.getId());
}});
if(timeLag < 0 ) {
OrderAccountDetail oad = new OrderAccountDetail();
Integer freeDays = (null == vehicleItem.getCutNum())?0 :vehicleItem.getCutNum();
inProgressVO = orderCalculateBiz.inProgressCalculate(orderPageVO, vehicleItem, freeDays, baseOrderBiz.getDaysBetweenDateTime(startTime, nowTime), new OrderAccountDetail(), Boolean.FALSE);
//.inProgressCalculate(orderPageVO, baseOrderBiz.getDaysBetweenDateTime(startTime, nowTime));
totalDeductAmount = oad.realTotalDeduct();
totalRefundAmount = oad.getOrderAmount().add(oad.getDepositAmount());
refundDesc = inProgressVO.getViolateDesc();
}else {
String key = RENT_REFUND;
BigDecimal deductionAmount = orderAccountBiz.calculateDeduction(vehicleItem.getBuyAmount()
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ key
, refundDescBuilder);
totalDeductAmount = deductionAmount;
totalRefundAmount = orderPageVO.getRealAmount().subtract(deductionAmount);
refundDesc = refundDescBuilder.toString();
}
break;
case TOUR:
//判断是省内还是省外
// String key = TOUR_IN_REFUND;
// if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
// key = TOUR_REFUND;
// }
// orderRefundAmount = orderRefundBiz.calculateDeduction(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
// , orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
// , DictionaryKey.APP_ORDER+ "_"+ key
// , refundDescBuilder);
// break;
String key = TOUR_IN_REFUND;
if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
key = TOUR_REFUND;
}
OrderItem adultItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.TOUR_ADULT.getCode());
setOrderId(orderPageVO.getId());
}});
OrderItem childItem = orderItemBiz.selectOne(new OrderItem(){{
setType(ItemTypeEnum.TOUR_CHILD.getCode());
setOrderId(orderPageVO.getId());
}});
BigDecimal adultItemAmount = (null == adultItem)? BigDecimal.ZERO: adultItem.getRealAmount();
BigDecimal childItemAmount = (null == childItem)? BigDecimal.ZERO: childItem.getRealAmount();
BigDecimal deductionAmount = orderAccountBiz.calculateDeduction(adultItemAmount.add(childItemAmount)
, orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ key
, refundDescBuilder);
totalRefundAmount = orderPageVO.getRealAmount().subtract(deductionAmount);
refundDesc = refundDescBuilder.toString();
break;
default:
break;
}
OrderRefundPriceVO orpv = new OrderRefundPriceVO();
orpv.setRealAmount(orderPageVO.getRealAmount());
orpv.setRefundAmount(orderRefundAmount);
orpv.setRefundDesc("取消操作可能会产生额外费用,是否确定取消订单");
orpv.setRefundAmount(totalRefundAmount);
if(totalDeductAmount.compareTo(BigDecimal.ZERO) > 0) {
orpv.setRefundDesc(StrUtil.format("本次取消操作需要扣除{}元违约金,实际退款金额为{}元,您确定要取消订单吗?", totalDeductAmount, totalRefundAmount));
}else {
orpv.setRefundDesc("取消操作可能会产生额外费用,是否确定取消订单");
}
return ObjectRestResponse.succ(orpv);
}
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ace-security</artifactId>
<groupId>com.github.wxiaoqi</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>xx-summit</artifactId>
<packaging>pom</packaging>
<modules>
<module>xx-summit-api</module>
<module>xx-summit-server</module>
</modules>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.xxfc.common</groupId>
<artifactId>xx-common-platform</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-summit-api</artifactId>
<dependencies>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-universal-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.xxfc.platform.summit.constant;
public class RedisKey {
/**
*验证码key前缀
*/
public static final String CONSTANT_CODE_PREFIX ="bm:info:";
}
package com.xxfc.platform.summit.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.*;
import java.math.BigDecimal;
/**
* 文章实体
*
* @author Administrator
*/
@Data
@Table(name = "fc_activity")
@Entity
@ApiModel(value = "峰会活动表")
public class Activity {
@Id
@GeneratedValue(generator="JDBC")
private Integer id;
@Column(name = "rid")
@ApiModelProperty("抽奖活动id")
private Integer rId;
@Column(name = "title")
@ApiModelProperty("活动主标题")
private String title;
@Column(name = "subtitle")
@ApiModelProperty("副标题(不展示)")
private String subtitle;
@Column(name = "banner")
@ApiModelProperty("活动主图")
private String banner;
@Column(name = "start_time")
@ApiModelProperty("开始时间")
private Long startTime;
@Column(name = "end_time")
@ApiModelProperty("结束时间")
private Long endTime;
@Column(name = "bm_close_time")
@ApiModelProperty("报名截止时间(不展示)")
private String bmCloseTime;
@Column(name = "province_code")
@ApiModelProperty("省编码")
private Integer provinceCode;
@Column(name = "province")
@ApiModelProperty("省")
private String province;
@Column(name = "city_code")
@ApiModelProperty("市编码")
private Integer cityCode;
@Column(name = "city")
@ApiModelProperty("市")
private String city;
@Column(name = "town_code")
@ApiModelProperty("县/镇 编码")
private Integer townCode;
@Column(name = "town")
@ApiModelProperty("县/镇")
private String town;
@Column(name = "address")
@ApiModelProperty("活动场地(地址格式)")
private String address;
@Column(name = "latitude")
@ApiModelProperty("纬度(不展示")
private BigDecimal latitude;
@Column(name = "longitude")
@ApiModelProperty("经度 (不展示)")
private BigDecimal longitude;
@Column(name = "content")
@ApiModelProperty("活动图文内容")
private String content;
@Column(name = "is_show")
@ApiModelProperty("活动开关(1开,0关)")
private Integer isShow;
@Column(name = "is_open_bm")
@ApiModelProperty("报名开关(1开,0关)")
private Integer isOpenBm;
@Column(name = "is_publish")
@ApiModelProperty("0是未发布,1是已发布")
private Integer isPublish;
@Column(name = "status")
@ApiModelProperty("0-默认;1-报名中,2-进行中;3-已结束")
private Integer status;
@Column(name = "act_desc")
@ApiModelProperty("活动对象说明(不展示)")
private String actDesc;
@Column(name = "process_json")
@ApiModelProperty("活动流程")
private String processJson;
@Column(name = "type")
@ApiModelProperty("活动类型(保留,不展示)")
private Integer type;
@Column(name = "limit_num")
@ApiModelProperty("总人数限制")
private Integer limitNum;
@Column(name = "bm_num")
@ApiModelProperty("已报名人数")
private Integer bmNum;
@Column(name = "qd_num")
@ApiModelProperty("已签到人数")
private Integer qdNum;
@Column(name = "rank")
@ApiModelProperty("排序")
private Integer rank;
@Column(name = "crt_time")
@ApiModelProperty("创建时间")
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty("修改时间")
private Long updTime;
@Column(name = "is_del")
@ApiModelProperty("删除(0正常,1删除)")
private Integer isDel;
}
package com.xxfc.platform.summit.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;
/**
* @author Administrator
*/
@Data
@Table(name = "fc_activity_bm")
public class ActivityBm {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "activity_id")
@ApiModelProperty("活动id")
private Integer activityId;
@Column(name = "meepo_user_id")
@ApiModelProperty("用户id")
private Integer meepoUserId;
@Column(name = "name")
@ApiModelProperty("报名人姓名")
private String name;
@Column(name = "phone")
@ApiModelProperty("报名人电话")
private String phone;
@Column(name = "id_number")
@ApiModelProperty("身份证号")
private String idNumber;
@Column(name = "inviter")
@ApiModelProperty("邀请人")
private String inviter;
@Column(name = "qd_status")
@ApiModelProperty("0-未签到;1-已签到")
private Integer qdStatus;
@Column(name = "bm_status")
@ApiModelProperty("0-未报名;1-已报名")
private Integer bmStatus;
@Column(name = "crt_time")
@ApiModelProperty("创建时间")
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty("创建时间")
private Long updTime;
@Column(name = "is_del")
@ApiModelProperty("是否删除:0-正常;1-删除")
private Integer isDel;
}
package com.xxfc.platform.summit.entity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.junit.Test;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author Administrator
*/
@Data
@Table(name = "fc_activity_show")
public class ActivityShow {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "activity_id")
@ApiModelProperty("活动id")
private Integer activityId;
@Column(name = "type")
@ApiModelProperty("1-图片;2-视频")
private Integer type;
@Column(name = "path")
@ApiModelProperty("图片或视频路径")
private String path;
@Column(name = "crt_time")
@ApiModelProperty("创建时间")
private Long crtTime;
@Column(name = "is_del")
@ApiModelProperty("是否删除:0-正常;1-删除")
private Integer isDel;
}
package com.xxfc.platform.summit.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;
@Data
@Table(name = "ims_meepo_xianchang_qd")
public class MeepoUserQd {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "weid")
@ApiModelProperty("主公众号Id")
private Integer weId;
@Column(name = "rid")
@ApiModelProperty("规则ID")
private Integer rId;
@Column(name = "openid")
@ApiModelProperty("openid")
private String openId;
@Column(name = "nick_name")
@ApiModelProperty("昵称")
private String nickName;
@Column(name = "avatar")
@ApiModelProperty("微信头像")
private String avatar;
@Column(name = "level")
@ApiModelProperty("状态")
private Integer level;
@Column(name = "createtime")
@ApiModelProperty("创建时间")
private Long createTime;
}
package com.xxfc.platform.summit.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.math.BigDecimal;
/**
* @author Administrator
*/
@Data
@Table(name = "ims_meepo_xianchang_user")
public class User {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@Column(name = "weid")
@ApiModelProperty("主公众号id")
private Integer weId;
@Column(name = "rid")
@ApiModelProperty("规则ID")
private Integer rId;
@Column(name = "openid")
@ApiModelProperty("微信openid")
private String openId;
@Column(name = "oauth_openid")
@ApiModelProperty("待定")
private String oauthOpenid;
@Column(name = "mobile")
@ApiModelProperty("电话")
private String mobile;
@Column(name = "nick_name")
@ApiModelProperty("昵称")
private String nickName;
@Column(name = "avatar")
@ApiModelProperty("头像")
private String avatar;
@Column(name = "sex")
@ApiModelProperty("性别")
private String sex;
@Column(name = "group")
@ApiModelProperty("分组")
private Integer group;
@Column(name = "status")
@ApiModelProperty("状态")
private Integer status;
@Column(name = "isblacklist")
@ApiModelProperty("待定")
private Integer isBlacklist;
@Column(name = "can_lottory")
@ApiModelProperty("待定")
private Integer canLottory;
@Column(name = "can_dt")
@ApiModelProperty("待定")
private Integer canDt;
@Column(name = "nd_id")
@ApiModelProperty("待定")
private Integer ndId;
@Column(name = "qd_status")
@ApiModelProperty("签到状态")
private Integer qdStatus;
@Column(name = "is_manager")
@ApiModelProperty("待定")
private Integer isManager;
@Column(name = "money")
@ApiModelProperty("分组")
private BigDecimal money;
@Column(name = "createtime")
@ApiModelProperty("创建时间")
private Integer createtime;
@Column(name = "lastjointime")
@ApiModelProperty("待定")
private Integer lastjointime;
@Column(name = "had_luru")
@ApiModelProperty("待定")
private Integer hadLuru;
}
package com.xxfc.platform.summit.feign;
import org.springframework.cloud.openfeign.FeignClient;
/**
* ${DESCRIPTION}
*
* @author wanghaobin
* @create 2017-06-21 8:11
*/
@FeignClient(value = "xx-summit")
public interface SummitFeign {
}
package com.xxfc.platform.summit.pojo;
import lombok.Data;
public enum AccessType {
BACKSTAGE(1, "后台管理页面"),
PUBLIC(2,"公众号");
AccessType(Integer code, String mas) {
this.code = code;
this.mas = mas;
}
private Integer code;
private String mas;
public Integer getCode() {
return code;
}
public String getMas() {
return mas;
}
}
package com.xxfc.platform.summit.pojo;
import lombok.Data;
@Data
public class ActivityBmQuery extends Query {
private String inviter;
private String name;
private Integer qdStatus;
private Integer activityId;
}
package com.xxfc.platform.summit.pojo;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class ActivityQuery extends Query {
private String title;
private Long startTime;
private Integer status;
/**
* 1.管理后台,2.h5页面
*/
private Integer type=1;
}
package com.xxfc.platform.summit.pojo;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class Query {
private Integer page=1;
private Integer limit=10;
}
package com.xxfc.platform.summit.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URLDecoder;
@Slf4j
public class HttpRequestUtil {
/**
* post请求
* @param url url地址
* @return
*/
public static String httpPost(String url){
//post请求返回结果
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost method = new HttpPost(url);
String str = "";
try {
HttpResponse result = httpClient.execute(method);
url = URLDecoder.decode(url, "UTF-8");
/**请求发送成功,并得到响应**/
if (result.getStatusLine().getStatusCode() == 200) {
try {
/**读取服务器返回过来的json字符串数据**/
str = EntityUtils.toString(result.getEntity(),"UTF-8");
} catch (Exception e) {
log.error("post请求提交失败:" + url, e);
}
}
} catch (IOException e) {
log.error("post请求提交失败:" + url, e);
}
return str;
}
/**
* 发送get请求
* @param url 路径
* @return
*/
public static String httpGet(String url){
//get请求返回结果
String strResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
//发送get请求
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
strResult = EntityUtils.toString(response.getEntity(),"UTF-8");
} else {
log.error("get请求提交失败:" + url);
}
} catch (IOException e) {
log.error("get请求提交失败:" + url, e);
}
return strResult;
}
}
package com.xxfc.platform.summit.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class MeepoActivityVo {
@ApiModelProperty("活动id")
private Integer rId;
@ApiModelProperty("主公众号Id")
private Integer weId;
@ApiModelProperty("活动标题")
private String title;
}
package com.xxfc.platform.summit.vo;
import lombok.Data;
@Data
public class UserInfo {
private String unionid;
private String openId;
private String nickname;
private String headimgurl;
private String sex;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>xx-common-platform-web</artifactId>
<groupId>com.xxfc.common</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-summit-server</artifactId>
<dependencies>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-summit-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>xx-summit</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.xxfc.platform.summit;
import com.ace.cache.EnableAceCache;
import com.github.wxiaoqi.security.api.vo.config.HeaderConfig;
import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient;
import com.github.wxiaoqi.security.common.annotation.AddBasicConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication(scanBasePackages = {
"com.xxfc.platform",
"com.github.wxiaoqi.security.common.handler"
})
@EnableDiscoveryClient
@EnableAceAuthClient
@EnableScheduling
@EnableAceCache
@EnableTransactionManagement
@AddBasicConfiguration
@tk.mybatis.spring.annotation.MapperScan(basePackages = "com.xxfc.platform.summit.mapper")
@EnableFeignClients(value = {"com.xxfc.platform","com.github.wxiaoqi.security"},defaultConfiguration = HeaderConfig.class)
public class SummitApplication {
public static void main(String[] args) {
SpringApplication.run(SummitApplication.class, args);
}
}
package com.xxfc.platform.summit.biz;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.mapper.ActivityMapper;
import com.xxfc.platform.summit.pojo.AccessType;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* @author Administrator
*/
@Service
public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
/**
* 未删除
*/
private Integer NOT_DELETE = 0;
private Activity activity;
/**
* 已发布
*/
private Integer PUBLISHED = 1;
public Object getList(ActivityQuery query) {
Example exa = new Example(Activity.class);
Example.Criteria criteria = exa.createCriteria();
criteria.andEqualTo("isDel", NOT_DELETE);
if (StringUtils.isNotBlank(query.getTitle())) {
criteria.andLike("title", String.format("%%%s%%", query.getTitle().trim()));
}
if (query.getStartTime() != null) {
criteria.andLike("startTime", query.getStartTime() / 1000 + "%");
}
if (query.getStatus() != null) {
criteria.andEqualTo("status", query.getStatus());
}
if (query.getType() != null && AccessType.PUBLIC.getCode().equals(query.getType())) {
criteria.andEqualTo("isPublish", PUBLISHED);
}
exa.orderBy("rank").asc().orderBy("startTime").desc();
if (AccessType.PUBLIC.getCode().equals(query.getType())) {
return mapper.selectByExample(exa);
}
PageHelper.startPage(query.getPage(), query.getLimit());
List<Activity> activities = mapper.selectByExample(exa);
return new PageInfo<Activity>(activities);
}
@Transactional(rollbackFor = Exception.class)
public Boolean update(Activity activity) {
try {
activity.setUpdTime(System.currentTimeMillis());
mapper.updateByPrimaryKeySelective(activity);
return true;
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
@Transactional(rollbackFor = Exception.class)
public boolean add(Activity activity) {
try {
activity.setCrtTime(System.currentTimeMillis());
activity.setIsDel(0);
if (activity.getIsOpenBm() == null) {
activity.setIsOpenBm(0);
}
if (activity.getIsPublish() == null) {
activity.setIsPublish(0);
}
if (activity.getIsShow() == null) {
activity.setIsShow(0);
}
mapper.insertSelective(activity);
return true;
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
@Override
public void updateSelectiveById(Activity activity) {
activity.setUpdTime(System.currentTimeMillis());
mapper.updateByPrimaryKeySelective(activity);
}
}
package com.xxfc.platform.summit.biz;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.constant.RestCode;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.ActivityBmMapper;;
import com.xxfc.platform.summit.pojo.ActivityBmQuery;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author Administrator
*/
@Service
@Slf4j
public class ActivityBmBiz extends BaseBiz<ActivityBmMapper, ActivityBm> {
@Autowired
private RedisTemplate summbitRedisTemplate;
@Autowired
private UserBiz userBiz;
@Autowired
private ActivityBiz activityBiz;
@Autowired
private MeepoUserQdBiz meepoUserQdBiz;
//用户报名
public ObjectRestResponse userBmOrQd(ActivityBm activityBm,Integer meepoUserId)throws Exception{
if (activityBm==null||meepoUserId==null||meepoUserId==0){
log.info("-----activityBm==="+activityBm+"-------meepoUserId==="+meepoUserId+"-----为空");
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"参数不能为空");
}
Integer activityId=activityBm.getActivityId();
Integer bmStatus=activityBm.getBmStatus()==null?0:activityBm.getBmStatus();
Integer qdStatus=activityBm.getQdStatus()==null?0:activityBm.getQdStatus();
log.info("-----activityBm==="+JSONObject.toJSONString(activityBm)+"-------meepoUserId==="+meepoUserId+"----activityId==="+activityId+"---bmStatus=="+bmStatus+"---qdStatus=="+qdStatus);
if (activityId==null||activityId==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动不存在");
}
ActivityBm activityBm1=checkUserBm(meepoUserId,activityId);
int isQd=0;
if (activityBm1!=null){
if (bmStatus==1&&activityBm1.getBmStatus()==1){
log.info("----用户已报名---meepoUserId==="+meepoUserId);
return ObjectRestResponse.createFailedResult(ResultCode.EXIST_CODE,"用户已报名");
}else if (qdStatus==1){
if (activityBm1.getQdStatus()==1){
log.info("----用户已签到---meepoUserId==="+meepoUserId);
return ObjectRestResponse.createFailedResult(ResultCode.EXIST_CODE,"用户已签到");
}
isQd=1;
}
activityBm.setId(activityBm1.getId());
updateSelectiveById(activityBm);
}else {
activityBm.setMeepoUserId(meepoUserId);
insertSelective(activityBm);
if (qdStatus==1){
isQd=1;
}
}
if (isQd==1){
meepoUserQdBiz.addUserQd(meepoUserId);
}
log.info("-----用户报名成功----bmId===="+activityBm.getId());
return ObjectRestResponse.succ();
}
//获取小程序峰会活动
public List<MeepoActivityVo> getMeepoActivitys(Integer rId){
return mapper.getMeepoActivitys(rId);
}
//获取缓存内容
public ActivityBm userInfo(String redisLockKey)throws Exception{
if (StringUtils.isBlank(redisLockKey)){
log.info("-----redisLockKey==="+redisLockKey+"-----为空");
return null;
}
ActivityBm bm =new ActivityBm();
String json = summbitRedisTemplate.opsForValue().get(redisLockKey) == null ? "" : summbitRedisTemplate.opsForValue().get(redisLockKey).toString();
log.info("userBm接口,获取redis中的报名信息:" + json);
if (StringUtils.isBlank(json)){
return null;
}
JSONObject jsonObject= JSONObject.parseObject(json);
BeanUtils.copyProperties(jsonObject,bm);
return bm;
}
public ActivityBm checkUserBm(Integer meepoUserId,Integer activityId ){
Example example =new Example(ActivityBm.class);
example.createCriteria().andEqualTo("meepoUserId",meepoUserId).andEqualTo("activityId",activityId).andEqualTo("isDel",0);
List<ActivityBm> list=mapper.selectByExample(example);
if (list.size()>0){
return list.get(0);
}
return null;
}
//用户报名/签到操作
public JSONObject userBmOrQdByKey(String key,Integer activityId, HttpServletRequest request){
JSONObject jsonObject=new JSONObject();
jsonObject.put("isbm",0);
jsonObject.put("isqd",0);
jsonObject.put("value","");
try {
User user=userBiz.getSession(request);
//是否登录
log.info("-----userBmByKey---activityId==="+activityId);
if (user==null){
log.info("-----userBmByKey---用户未登录----");
ActivityBm activityBm= userInfo(key);
if (activityBm!=null){
log.info("-----userBmByKey---key已存在----");
jsonObject.put("value",activityBm);
// 获取到缓存的验证码后要先清空缓存对应键的值
summbitRedisTemplate.delete(key);
}
}else {
Integer userId=user.getId();
log.info("-----userBmByKey---用户登录--userId==="+userId);
ActivityBm activityBm= userInfo(key);
if (activityBm==null){
log.info("-----userBmByKey---key不存在判断用户是否报名/签到----");
ActivityBm activityBm1=checkUserBm(userId,activityId);
if (activityBm1!=null){
log.info("-----userBmByKey---key不存在用户已报名/签到----");
jsonObject.put("isbm",activityBm1.getBmStatus());
jsonObject.put("isqd",activityBm1.getQdStatus());
}
}else {
log.info("-----userBmByKey---key已存在去报名/签到----");
ObjectRestResponse restResponse=userBmOrQd(activityBm,userId);
if (restResponse.getStatus()==RestCode.SUCCESS.getStatus()){
log.info("-----userBmByKey---key已存在去报名/签到----报名/签到成功");
if (activityBm.getBmStatus()==1){
jsonObject.put("isbm",1);
jsonObject.put("bm_status",1);
}else if (activityBm.getQdStatus()==1){
jsonObject.put("isqd",1);
jsonObject.put("qd_status",1);
}
}else {
log.info("-----userBmByKey---key已存在去报名/签到----报名/签到失败");
if (activityBm.getBmStatus()==1){
jsonObject.put("bm_status",2);
}else if (activityBm.getQdStatus()==1){
jsonObject.put("qd_status",2);
}
}
summbitRedisTemplate.delete(key);
}
}
}catch (Exception e){
e.printStackTrace();
}
return jsonObject;
}
//获取峰会活动详情
public ObjectRestResponse getActivityById(Integer activityId,String key,HttpServletRequest request){
if (activityId==0||activityId==null){
return ObjectRestResponse.createFailedResult(ResultCode.NOTEXIST_CODE,"参数为空");
}
Example example=new Example(Activity.class);
example.createCriteria().andEqualTo("id",activityId).andEqualTo("isDel",0);
List<Activity> list=activityBiz.selectByExample(example);
if (list.size()==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动不存在");
}
Activity activity=list.get(0);
if (activity.getIsShow()==null||activity.getIsShow()==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动已下架");
}
if (activity.getIsPublish()==null||activity.getIsPublish()==0){
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"活动未发布");
}
Integer status=activity.getStatus();
if (status==null){
status=0;
}
if (status==0){
Long nowTime=System.currentTimeMillis();
Long startTime=activity.getStartTime();
Long endTime=activity.getEndTime();
if (nowTime<startTime){
status=1;
}else if (nowTime>=startTime&&nowTime<endTime){
status=2;
}else {
status=3;
}
activity.setStatus(status);
}
JSONObject jsonObject=new JSONObject();
jsonObject.put("activity",activity);
JSONObject userBm=userBmOrQdByKey(key,activityId,request);
jsonObject.put("bmInfo",userBm);
return ObjectRestResponse.succ(jsonObject);
}
public PageInfo<ActivityBm> list(ActivityBmQuery query) {
Example exa = new Example(ActivityBm.class);
Example.Criteria criteria = exa.createCriteria();
if (StringUtils.isNotBlank(query.getInviter())) {
criteria.andEqualTo("inviter",String.format("%%%s%%",query.getInviter().trim()));
}
if (StringUtils.isNotBlank(query.getName())) {
criteria.andLike("name",String.format("%%%s%%",query.getName().trim()));
}
if (query.getQdStatus()!=null) {
criteria.andEqualTo("qdStatus",query.getQdStatus());
}
criteria.andEqualTo("isDel",0).andEqualTo("activityId",query.getActivityId());
exa.orderBy("crtTime").desc();
PageHelper.startPage(query.getPage(),query.getLimit());
List<ActivityBm> activityBms = mapper.selectByExample(exa);
return PageInfo.of(activityBms);
}
public ActivityBm userBm(ActivityBm activityBm, Integer id) {
return null;
}
}
package com.xxfc.platform.summit.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.summit.dto.ActivityShowDto;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityShow;
import com.xxfc.platform.summit.mapper.ActivityShowMapper;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.GetMapping;
import java.lang.reflect.InvocationTargetException;
/**
* @author Administrator
*/
@Service
public class ActivityShowBiz extends BaseBiz<ActivityShowMapper, ActivityShow> {
@Autowired
private ActivityBiz activityBiz;
public ActivityShowDto getOne(Integer activityId) {
return mapper.getOne(activityId);
}
@Transactional(rollbackFor = Exception.class)
public boolean save(ActivityShowDto showDto) {
try {
ActivityShow activityShow = new ActivityShow();
BeanUtilsBean.getInstance().copyProperties(activityShow,showDto);
Activity activity = new Activity();
activity.setId(showDto.getActivityId());
activity.setBanner(showDto.getBanner());
if (showDto.getId()==null) {
mapper.insertSelective(activityShow);
activityBiz.updateSelectiveById(activity);
}else {
mapper.updateByPrimaryKeySelective(activityShow);
activityBiz.updateSelectiveById(activity);
}
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
return true;
}
}
package com.xxfc.platform.summit.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.summit.entity.MeepoUserQd;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.MeepoUserQdMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* @author Administrator
*/
@Service
@Slf4j
public class MeepoUserQdBiz extends BaseBiz<MeepoUserQdMapper, MeepoUserQd> {
@Autowired
UserBiz userBiz;
//添加签到信息
public void addUserQd(Integer meepoUserId){
if (meepoUserId==null||meepoUserId==0){
log.info("----签到信息为空meepoUserId==="+meepoUserId);
return;
}
User user= userBiz.selectById(meepoUserId);
Integer weId=user.getWeId();
Integer rid=user.getRId();
String openId=user.getOpenId();
String avatar=user.getAvatar();
String nikeName=user.getNickName();
log.info("---addUserQd----meepoUserId==="+meepoUserId+"----openId==="+openId+"--weId=="+weId+"---rid==="+rid+"---avatar==="+avatar);
Example example=new Example(MeepoUserQd.class);
example.createCriteria().andEqualTo("weId",weId).andEqualTo("rId",rid).andEqualTo("openId",openId);
List<MeepoUserQd> list=selectByExample(example);
if (list.size()>0){
log.info("----已签到---meepoUserId==="+meepoUserId+"----openId==="+openId);
return;
}
MeepoUserQd meepoUserQd=new MeepoUserQd();
meepoUserQd.setAvatar(avatar);
meepoUserQd.setLevel(1);
meepoUserQd.setNickName(nikeName);
meepoUserQd.setOpenId(openId);
meepoUserQd.setRId(rid);
meepoUserQd.setWeId(weId);
meepoUserQd.setCreateTime(System.currentTimeMillis()/1000L);
insertSelective(meepoUserQd);
}
}
package com.xxfc.platform.summit.biz;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.mapper.UserMapper;
import com.xxfc.platform.summit.service.WeixinService;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.mockito.internal.util.collections.Sets;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* @author Administrator
*/
@Service
@Slf4j
public class UserBiz extends BaseBiz<UserMapper, User> {
@Autowired
private ActivityBiz activityBiz;
@Autowired
private ActivityBmBiz activityBmBiz;
@Autowired
WeixinService weixinService;
@Autowired
UserBiz userBiz;
public static final String frontSessionKey = "frontWeixKey";
public Integer addMeepoUser(User user,Integer activityId){
Integer userId=0;
log.info("-----activityId===="+activityId);
if (user==null|| StringUtils.isBlank(user.getOpenId())||activityId==null||activityId==0){
log.info("-----参数为空----");
return userId;
}
Activity activity=activityBiz.selectById(activityId);
if (activity==null){
log.info("-----活动不存在----");
return userId;
}
Integer rId=activity.getRId();
if (rId==null||rId==0){
log.info("-----没设置小程序抽奖活动id----");
return userId;
}
List<MeepoActivityVo> list=activityBmBiz.getMeepoActivitys(rId);
if (list.size()==0){
log.info("-----小程序抽奖活动id不存在----");
return userId;
}
MeepoActivityVo meepoActivityVo=list.get(0);
Integer weId=meepoActivityVo.getWeId();
String openId=user.getOpenId();
Example example=new Example(User.class);
example.createCriteria().andEqualTo("weId",weId).andEqualTo("rId",rId).andEqualTo("openId",openId);
List<User> uses=mapper.selectByExample(example);
if (uses.size()>0){
userId=uses.get(0).getId();
user.setId(userId);
}else {
user.setWeId(weId);
user.setRId(rId);
insertSelective(user);
userId=user.getId();
}
return userId;
}
public void authUser(String code,String key, HttpServletRequest request){
if (StringUtils.isBlank(code)){
log.info("----code为空---");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("code为空"));
}
String openid = null;
String access_token = null;
try {
JSONObject jsonData = weixinService.getAccessToken(code);
openid = jsonData.getString("openid");
access_token = jsonData.getString("access_token");
String refresh_token = jsonData.getString("refresh_token");
log.info("-----微信回调userInfo---openid=="+openid+"----access_token==="+access_token);
//验证access_token是否失效
JSONObject validateData = weixinService.getValidateData(access_token, openid);
if (!"0".equals(validateData.getString("errcode"))){
//刷新access_token
JSONObject refreshData= weixinService.getRefreshToken(refresh_token);
access_token = refreshData.getString("access_token");
}
}catch (Exception e){
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("网络异常"));
}
try {
// 获取微信用户基本信息
JSONObject userinfo_json = weixinService.getUserInfo(access_token,openid);
if (userinfo_json == null || StringUtils.isNotBlank(userinfo_json.getString("errcode"))) {
log.info("调用微信用户基本信息接口失败");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("调用微信用户基本信息接口失败"));
}
log.info("微信用户基本信息---user===" +userinfo_json.toJSONString());
ActivityBm activityBm=activityBmBiz.userInfo(key);
if (activityBm==null){
log.info("redis的报名信息为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("redis的报名信息为空"));
}
Integer activityId=activityBm.getActivityId();
if (activityId==null||activityId==0){
log.info("redis的报名信息activityId---为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("redis的报名信息activityId---为空"));
}
User userInfo=new User();
String nickName = userinfo_json.getString("nickname");
String headimgurl = userinfo_json.getString("headimgurl");
String sex = userinfo_json.getString("sex");
if (StringUtils.isBlank(sex)){
sex="0";
}
userInfo.setOpenId(openid);
userInfo.setNickName(nickName);
userInfo.setAvatar(headimgurl);
userInfo.setSex(sex);
Integer userId=userBiz.addMeepoUser(userInfo,activityId);
log.info("小程序用户---userId===" +userId);
if (userId==null||userId==0){
log.info("小程序用户---userId---为空");
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("小程序用户---userId---为空"));
}
String encode = Base64.encode(JSONObject.toJSONString(userInfo));
HttpSession session = request.getSession();
session.removeAttribute(frontSessionKey);
session.setAttribute(frontSessionKey, encode);
} catch (Exception e) {
log.info("调用微信用户基本信息接口失败", e);
throw new BaseException(ResultCode.FAILED_CODE, Sets.newSet("调用微信用户基本信息接口失败"));
}
}
//获取缓存
public User getSession(HttpServletRequest request){
try {
HttpSession session = request.getSession();
String frontSessionValue1 = (String) session.getAttribute(frontSessionKey);
if (StringUtils.isBlank(frontSessionValue1)) {
return null;
}
JSONObject jsonObject=JSONObject.parseObject(frontSessionValue1);
User user=new User();
BeanUtils.copyProperties(jsonObject,user);
return user;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public User getUserInfo(HttpServletRequest request,Integer activityId){
User user=getSession(request);
if (user!=null){
Integer userId=addMeepoUser(user,activityId);
if (userId==null||userId==0){
return null;
}
return user;
}
return null;
}
}
package com.xxfc.platform.summit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* ${DESCRIPTION}
*
* @author wanghaobin
* @create 2017-06-21 8:39
*/
@Configuration
@Primary
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> summbitRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
package com.xxfc.platform.summit.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public Logger.Level feignLevel(){
return Logger.Level.HEADERS;
}
}
package com.xxfc.platform.summit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
* @Description : swagger配置配置
* @Author : Mars
* @Date : 2017年9月6日
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple
* swagger groups i.e. same code base multiple swagger resource listings.
*/
@Bean
public Docket customDocket(){
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
ticketPar.name("Authorization").description("user Authorization")
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build(); //header中的ticket参数非必填,传空也可以
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.tour"))
//.apis(RequestHandlerSelectors.any())
.build()
.globalOperationParameters(pars)
.apiInfo(apiInfo());
}
ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("api swagger document")
.description("前后端联调swagger api 文档")
.version("2.1.5.5")
.build();
}
}
\ No newline at end of file
package com.xxfc.platform.summit.config;
import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import com.xxfc.platform.summit.interceptor.WeChatH5LoginInterceoptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.Collections;
@Configuration("summitWebConfig")
@Primary
public class WebConfiguration implements WebMvcConfigurer {
@Bean
GlobalExceptionHandler getGlobalExceptionHandler() {
return new GlobalExceptionHandler();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getWeChatH5LoginRestInterceptor()).
addPathPatterns(getIncludePathPatterns());
}
@Bean
WeChatH5LoginInterceoptor getWeChatH5LoginRestInterceptor() {
return new WeChatH5LoginInterceoptor();
}
/**
* 需要用户和服务认证判断的路径
* @return
*/
private ArrayList<String> getIncludePathPatterns() {
ArrayList<String> list = new ArrayList<>();
String[] urls = {
"/activity/**"
};
Collections.addAll(list, urls);
return list;
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.pojo.ActivityBmQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author Administrator
*/
@RestController
@RequestMapping("/activityBm")
public class ActivityBmController extends BaseController<ActivityBmBiz,ActivityBm> {
@Autowired
UserBiz userBiz;
@PostMapping("/add")
public ObjectRestResponse bm(@RequestBody ActivityBm activityBm, HttpServletRequest request){
User user=userBiz.getSession(request);
try {
return ObjectRestResponse.succ(baseBiz.userBm(activityBm,user.getId()));
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
@PostMapping("/list")
public ObjectRestResponse getList( @RequestBody ActivityBmQuery query ){
return ObjectRestResponse.succ(baseBiz.list(query));
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.springframework.web.bind.annotation.*;
/**
* @author Administrator
*/
@RestController
@RequestMapping("/activity")
public class ActivityController extends BaseController<ActivityBiz, Activity> {
@PostMapping("/app/unauth/list")
public ObjectRestResponse getList(@RequestBody ActivityQuery query ){
return ObjectRestResponse.succ(baseBiz.getList(query));
}
@Override
@PutMapping ("/update")
public ObjectRestResponse update(@RequestBody Activity activity ){
if (baseBiz.update(activity)) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
@Override
@PostMapping("/add")
public ObjectRestResponse add(@RequestBody Activity activity ){
if (baseBiz.add(activity)) {
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.biz.ActivityShowBiz;
import com.xxfc.platform.summit.dto.ActivityShowDto;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.entity.ActivityShow;
import org.springframework.web.bind.annotation.*;
/**
* @author Administrator
*/
@RestController
@RequestMapping("/activityShow")
public class ActivityShowController extends BaseController<ActivityShowBiz, ActivityShow> {
@GetMapping("/one/{activityId}")
public ObjectRestResponse getOne(@PathVariable Integer activityId){
return ObjectRestResponse.succ( baseBiz.getOne(activityId));
}
@PostMapping("/save")
public ObjectRestResponse save(@RequestBody ActivityShowDto showDto){
if (baseBiz.save(showDto)){
return ObjectRestResponse.succ();
}
return ObjectRestResponse.createDefaultFail();
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author Administrator
*/
@RestController
@RequestMapping("auth/activity")
@IgnoreClientToken
@IgnoreUserToken
public class AuthActivityController extends BaseController<ActivityBmBiz,ActivityBm> {
@Autowired
UserBiz userBiz;
@PostMapping("app/unauth/bm")
public ObjectRestResponse bm(@RequestBody ActivityBm activityBm, HttpServletRequest request){
User user=userBiz.getUserInfo(request,activityBm.getActivityId());
try {
return baseBiz.userBmOrQd(activityBm,user.getId());
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
@PostMapping("app/unauth/qd")
public ObjectRestResponse qd(@RequestBody ActivityBm activityBm, HttpServletRequest request){
User user=userBiz.getUserInfo(request,activityBm.getActivityId());
try {
return baseBiz.userBmOrQd(activityBm,user.getId());
}catch (Exception e){
e.printStackTrace();
return ObjectRestResponse.createDefaultFail();
}
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.summit.biz.ActivityBiz;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author Administrator
*/
@RestController
@RequestMapping("/front/activity")
@IgnoreUserToken
@IgnoreClientToken
public class FrontActivityController extends BaseController<ActivityBiz, Activity> {
@Autowired
private ActivityBmBiz activityBmBiz;
@GetMapping("app/unauth/info")
public ObjectRestResponse info(
@RequestParam(value = "activityId",defaultValue = "0")Integer activityId,
@RequestParam(value = "key",defaultValue = "")String key,
HttpServletRequest request){
return activityBmBiz.getActivityById(activityId,key,request);
}
}
package com.xxfc.platform.summit.controller;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("activity")
@IgnoreClientToken
@Slf4j
public class IndexController {
@RequestMapping(value ="/app/unauth/index",method = RequestMethod.GET)
@IgnoreUserToken
public ObjectRestResponse index(){
return ObjectRestResponse.succ();
}
@RequestMapping(value ="/app/unauth/info",method = RequestMethod.GET)
@IgnoreUserToken
public ObjectRestResponse info(){
return ObjectRestResponse.succ("123456");
}
}
\ No newline at end of file
package com.xxfc.platform.summit.controller;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.xxfc.platform.summit.biz.ActivityBmBiz;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.service.WeixinService;
import com.xxfc.platform.summit.vo.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* @author Administrator
*/
@Controller
@RequestMapping("/auth")
@Slf4j
public class WeixinController {
public static final String WECHAT_AUTOLOGIN_CALLBACKURL_KEY = "callback";
public static final String WECHAT_REDIS_KEY = "key";
@Autowired
WeixinService weixinService;
@Autowired
UserBiz userBiz;
@Autowired
ActivityBmBiz activityBmBiz;
public static final String frontSessionKey = "frontWeixKey";
@Value("${wx.url}")
private String url;
@RequestMapping(value ="/app/unauth/wxLogin",method = RequestMethod.GET)
@IgnoreUserToken
public String index(@RequestParam(value = "redirec_url")String redirec_url,
@RequestParam(value = "key")String key){
log.info("-----微信wxLogin---redirec_url=="+redirec_url);
if (StringUtils.isBlank(redirec_url)){
redirec_url="";
}
try {
String encrypt_curr_url = Base64.encode(redirec_url.getBytes("utf-8"));
redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url+"&"+WECHAT_REDIS_KEY+"="+key;
String oauth_api=weixinService.getAuthorize(redirec_url);
return String.format("redirect:"+oauth_api);
}catch (Exception e){
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
return String.format("网络异常");
}
}
/**
* 微信浏览器获取用户信息
* @param code
* @param callback
* @return
*/
@GetMapping(value = "/app/unauth/userInfo")
public String getUserInformation(String code, String callback,String key, HttpServletRequest request) {
log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback+"---key==="+key);
try {
userBiz.authUser(code,key,request);
callback =new String(Base64.decode(callback), "utf-8");
log.info("callback===" + callback);
}catch (Exception e){
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
}
return String.format("redirect:"+callback);
}
}
package com.xxfc.platform.summit.dto;
import com.xxfc.platform.summit.entity.ActivityShow;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class ActivityShowDto extends ActivityShow {
private String banner;
}
package com.xxfc.platform.summit.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.github.wxiaoqi.security.common.util.UserAgentUtil;
import com.xxfc.platform.summit.biz.UserBiz;
import com.xxfc.platform.summit.constant.RedisKey;
import com.xxfc.platform.summit.entity.User;
import com.xxfc.platform.summit.service.WeixinService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
* 微信登陆拦截器
*
* @author
*
*/
@Slf4j
public class WeChatH5LoginInterceoptor extends HandlerInterceptorAdapter {
@Autowired
WeixinService weixinService;
@Autowired
UserBiz userBiz;
@Autowired
private RedisTemplate summbitRedisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String curr_domain = request.getServerName();
log.info("curr_domain:" + curr_domain);
log.info("address:" + request.getRequestURL().toString());
log.info("params:" + request.getQueryString());
boolean isWx = UserAgentUtil.isWexinBrowser(request);
if (isWx) {
//session里面获取用户信息
User user=userBiz.getSession(request);
if (user!=null){
return true;
}
String redisKey=redisInfo(request);
Map<String,Object> result=new HashMap<>();
JSONObject json = new JSONObject();
if (StringUtils.isNotBlank(redisKey)){
json.put("key",redisKey);
}
json.put("url","https://dev.dfangche.com/api/summit/auth/app/unauth/wxLogin?redirec_url=https://dev.dfangche.com/h5/appHtml/view/wxh5/index.html");
result.put("data",json);
result.put("status",1001);
response.getWriter().write(result.toString());
return false;
}
return true;
}
//获取body的参数并放入redis
public String redisInfo(HttpServletRequest request)throws Exception{
request.setCharacterEncoding("UTF-8");
StringBuffer jb = new StringBuffer();
String line = null;
try
{
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
}
catch (Exception e)
{
e.printStackTrace();
}
String redisLockKey=null;
if (StringUtils.isNotBlank(jb)){
redisLockKey= RedisKey.CONSTANT_CODE_PREFIX + UUID.randomUUID();
Boolean suc = summbitRedisTemplate.opsForValue().setIfAbsent(redisLockKey, jb);
if (suc) {
summbitRedisTemplate.expire(redisLockKey, 5, TimeUnit.MINUTES);//5分钟内过期
}
}
return redisLockKey;
}
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.ActivityBm;
import com.xxfc.platform.summit.vo.MeepoActivityVo;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* @author Administrator
*/
public interface ActivityBmMapper extends Mapper<ActivityBm> {
List<MeepoActivityVo> getMeepoActivitys(@Param("rId")Integer rId);
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.Activity;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Administrator
*/
public interface ActivityMapper extends Mapper<Activity> {
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.dto.ActivityShowDto;
import com.xxfc.platform.summit.entity.ActivityShow;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Administrator
*/
public interface ActivityShowMapper extends Mapper<ActivityShow> {
ActivityShowDto getOne(Integer activityId);
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.MeepoUserQd;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Administrator
*/
public interface MeepoUserQdMapper extends Mapper<MeepoUserQd> {
}
package com.xxfc.platform.summit.mapper;
import com.xxfc.platform.summit.entity.User;
import tk.mybatis.mapper.common.Mapper;
/**
* @author Administrator
*/
public interface UserMapper extends Mapper<User> {
}
package com.xxfc.platform.summit.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xxfc.platform.summit.util.HttpRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class WeixinService {
/**
* 网页
*/
@Value("${wx.appid}")
private String wy_appid;
@Value("${wx.appSercet}")
private String wy_secret;
public JSONObject getAccessToken(String code){
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?";
String params = "appid="+wy_appid+"&secret="+wy_secret+"&code="+code+"&grant_type=authorization_code";
String result = HttpRequestUtil.httpGet(url + params);
JSONObject data = JSON.parseObject(result);
return data;
}
public JSONObject getValidateData(String access_token,String openid){
String url = "https://api.weixin.qq.com/sns/auth?access_token=" + access_token + "&openid=" + openid;
String result = HttpRequestUtil.httpGet(url);
JSONObject data = JSON.parseObject(result);
return data;
}
public JSONObject getRefreshToken(String refresh_token){
String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + wy_appid + "&grant_type=refresh_token&refresh_token=" + refresh_token;
String result = HttpRequestUtil.httpGet(url);
JSONObject data = JSON.parseObject(result);
return data;
}
public JSONObject getUserInfo(String access_token,String openid){
String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN";
String result = HttpRequestUtil.httpGet(url);
JSONObject data = JSON.parseObject(result);
return data;
}
public String getAuthorize(String redirec_url){
String oauth_api = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={APPID}&redirect_uri={REDIRECT_URI}&response_type=code&scope={SCOPE}&state={STATE}#wechat_redirect";
oauth_api = oauth_api.replace("{APPID}", wy_appid)
.replace("{REDIRECT_URI}", redirec_url)
.replace("{SCOPE}", "snsapi_userinfo").replace("{STATE}", "state");
log.info("---oauth_api===="+oauth_api);
return oauth_api;
}
}
logging:
config: classpath:logback.xml
level:
com.github.wxiaoqi:
debug
com.xxfc.platform:
debug
\ No newline at end of file
#spring:
# application:
# name: vehicle
# cloud:
# nacos:
# config:
# server-addr: 127.0.0.1:8848
# file-extension: yaml
# profiles:
# active: dev
spring:
profiles:
active: dev
application:
name: xx-summit
cloud:
nacos:
config:
file-extension: yaml
---
spring:
profiles: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
#共用配置,暂定一个
shared-dataids: common-dev.yaml,mongodb-log-dev.yaml
---
spring:
profiles: pro
cloud:
nacos:
config:
server-addr: 10.5.52.2:8848
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<property name="LOG_HOME" value="${system.log.path:-logs}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--1. 输出到控制台-->
<filter class="com.github.wxiaoqi.security.common.filter.NacosLogFilter"></filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
</appender>
<appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 按照每天生成日志文件 -->
<filter class="com.github.wxiaoqi.security.common.filter.DenyFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/sys.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件输出的文件名 -->
<MaxHistory>30</MaxHistory><!--日志文件保留天数 -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
</encoder>
</appender>
<appender name="WEB_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 按照每天生成日志文件 -->
<filter class="com.github.wxiaoqi.security.common.filter.AcceptFilter"></filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件输出的文件名 -->
<MaxHistory>30</MaxHistory><!--日志文件保留天数 -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="SYSTEM_FILE" />
<appender-ref ref="WEB_FILE" />
</root>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.ActivityBmMapper">
<select id="getMeepoActivitys" resultType="com.xxfc.platform.summit.vo.MeepoActivityVo">
SELECT
id as rId,
weid as weId,
title as title
FROM ims_meepo_xianchang_rid
<where>
<if test="rId!=null and rId!=0 ">
id=#{rId}
</if>
</where>
ORDER BY id DESC
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.ActivityMapper">
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.ActivityShowMapper">
<select id="getOne" parameterType="Integer" resultType="com.xxfc.platform.summit.entity.ActivityShow">
SELECT
a.banner,
s.*
FROM
fc_activity a
LEFT JOIN fc_activity_show s ON a.id = s.activity_id
WHERE
a.id =#{activityId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.MeepoUserQdMapper">
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.summit.mapper.UserMapper">
</mapper>
\ No newline at end of file
......@@ -83,7 +83,6 @@ public class VehicleActiveService {
if (MileageLift == null || MileageLift1 >= MileageLift) {
// 写入车辆公里数,预计目的地
vehicle.setMileageLastUpdate(MileageLift1);
vehicle.setExpectDestinationBranchCompanyId(departureVo.getExpectArrivalBranchCompanyId());
vehicleMapper.updateByPrimaryKeySelective(vehicle);
// 修改车辆状态,确认是空闲状态
......@@ -211,7 +210,6 @@ public class VehicleActiveService {
if (vehicleBookRecord != null) {
vehicle.setParkBranchCompanyId(vehicleBookRecord.getRetCompany());
}
vehicle.setExpectDestinationBranchCompanyId(0);
vehicleMapper.updateByPrimaryKeySelective(vehicle);
// 出车记录
VehicleDepartureLogVo departureLogVo = vehicleDepartureLogMapper.selectByBookRecordId(arrivalVo.getBookRecordId());
......
......@@ -506,10 +506,9 @@
<if test="flag == true and status == 1">
and book_end_date &gt;= now()
</if>
<!--增加时间限制,已审核的未出车小于当前时间的不显示, 已出车的结束时间后两天的不显示-->
<if test="flag == true and (status == 2 || status == 3 || status == 5)">
and ((v4.id is not NULL and v1.book_end_date &gt;= DATE_ADD(NOW(),interval '2 00:00:00' DAY_SECOND)) or
(v4.id is NULL and v1.book_end_date &gt;= now()))
<!--增加时间限制,已审核的未出车小于当前时间的不显示, 已出车的结束时间延后两天小于当前时间的不显示-->
<if test="flag == true and status == 2">
and ( v4.id IS NOT NULL OR (v4.id IS NULL AND v1.book_end_date &gt;= now()))
</if>
and v1.book_user != -2
</where>
......
......@@ -150,8 +150,7 @@
</foreach>
</if>
<if test="subordinateBranch !=null ">
and ( v.park_branch_company_id = #{subordinateBranch} or
v.expect_destination_branch_company_id=#{subordinateBranch} )
and ( v.park_branch_company_id = #{subordinateBranch})
</if>
<if test=" addrProvince !=null or addrCity !=null or zoneId !=null ">
<if test="addrProvince !=null">
......
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