Commit 158318d1 authored by jiaorz's avatar jiaorz

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

parents 18dd453b 594aee30
...@@ -43,4 +43,7 @@ public class WalletCathListDTO { ...@@ -43,4 +43,7 @@ public class WalletCathListDTO {
@ApiModelProperty("单号") @ApiModelProperty("单号")
private String cono; private String cono;
@ApiModelProperty(value = "用户账号")
private String accountNumber;
} }
...@@ -79,7 +79,7 @@ public class AppUserDTO { ...@@ -79,7 +79,7 @@ public class AppUserDTO {
private Integer buyCount; private Integer buyCount;
private Integer lockDays; private Integer lockDays;
private Integer discount; private Integer discount;
private Integer memberLevel; private Integer memberLevel = 0;
private String memberName; private String memberName;
//图标 //图标
private String icon; private String icon;
......
...@@ -40,4 +40,7 @@ public class WalletCathAdminVo { ...@@ -40,4 +40,7 @@ public class WalletCathAdminVo {
@ApiModelProperty("单号") @ApiModelProperty("单号")
private String cono; private String cono;
@ApiModelProperty(value = "用户账号")
private String accountNumber;
} }
...@@ -4,6 +4,8 @@ import com.ace.cache.annotation.Cache; ...@@ -4,6 +4,8 @@ import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear; import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.dto.BaseUserMemberVO; import com.github.wxiaoqi.security.admin.dto.BaseUserMemberVO;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO; import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.mapper.BaseUserMemberLevelMapper;
import com.github.wxiaoqi.security.admin.vo.AppUserVo; import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.admin.vo.UserMemberVo; import com.github.wxiaoqi.security.admin.vo.UserMemberVo;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
...@@ -43,6 +45,9 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem ...@@ -43,6 +45,9 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
@Autowired @Autowired
AppUserDetailBiz detailBiz; AppUserDetailBiz detailBiz;
@Autowired
private BaseUserMemberLevelMapper BaseUserMemberLevelMapper;
// @Autowired // @Autowired
// private TaskExecutor taskExecutor; // private TaskExecutor taskExecutor;
// //
...@@ -213,7 +218,6 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem ...@@ -213,7 +218,6 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
} }
/** /**
* 设置用户会员 * 设置用户会员
* *
...@@ -230,7 +234,25 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem ...@@ -230,7 +234,25 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
if (totalNumber < freeDays) { if (totalNumber < freeDays) {
freeDays = totalNumber; freeDays = totalNumber;
} }
Integer buyCount = userMemberDTO.getBuyCount() == null ? 1:userMemberDTO.getBuyCount() ;
if (userMemberDTO.getMemberLevel() != null) {
Example exa = new Example(BaseUserMemberLevel.class);
Example.Criteria criteria = exa.createCriteria();
criteria.andEqualTo("isdel", 0);
criteria.andEqualTo("level",userMemberDTO.getMemberLevel());
List<BaseUserMemberLevel> levels = BaseUserMemberLevelMapper.selectByExample(exa);
if (CollectionUtils.isEmpty(levels)) {
log.error("错误!设置的该等级会员不存在.");
throw new BaseException("错误!设置的该等级会员不存在。");
}else if (levels.size()>1){
log.error("错误!该等级的会员存在多个。");
throw new BaseException("错误!该等级的会员存在多个。");
}else {
baseUserMember.setDiscount(levels.get(0).getDiscount());
}
}
Integer buyCount = userMemberDTO.getBuyCount() == null ? 1 : userMemberDTO.getBuyCount();
UserMemberVo userMemberVo = getMemberInfoByUserId(userMemberDTO.getUserId()); UserMemberVo userMemberVo = getMemberInfoByUserId(userMemberDTO.getUserId());
if (userMemberVo == null) { if (userMemberVo == null) {
baseUserMember.setRentFreeDays(freeDays); baseUserMember.setRentFreeDays(freeDays);
...@@ -241,8 +263,8 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem ...@@ -241,8 +263,8 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
Integer number = userMemberVo.getTotalNumber() == null ? 0 : userMemberVo.getTotalNumber(); Integer number = userMemberVo.getTotalNumber() == null ? 0 : userMemberVo.getTotalNumber();
Integer days = userMemberVo.getRentFreeDays() == null ? 0 : userMemberVo.getRentFreeDays(); Integer days = userMemberVo.getRentFreeDays() == null ? 0 : userMemberVo.getRentFreeDays();
baseUserMember.setBuyCount(userMemberVo.getBuyCount() + buyCount); baseUserMember.setBuyCount(userMemberVo.getBuyCount() + buyCount);
number=(totalNumber-number)+number; number = (totalNumber - number) + number;
days=(freeDays-days)+days; days = (freeDays - days) + days;
baseUserMember.setTotalNumber(number); baseUserMember.setTotalNumber(number);
baseUserMember.setRentFreeDays(days); baseUserMember.setRentFreeDays(days);
getMyBiz().updateSelectiveById(baseUserMember); getMyBiz().updateSelectiveById(baseUserMember);
...@@ -255,14 +277,13 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem ...@@ -255,14 +277,13 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
userVo1.setIsMember(1); userVo1.setIsMember(1);
detailBiz.updUuserInfoById(userVo1); detailBiz.updUuserInfoById(userVo1);
} }
} }
public void deleteByUserIds(Collection<Integer> userIds) { public void deleteByUserIds(Collection<Integer> userIds) {
Example example = new Example(BaseUserMember.class); Example example = new Example(BaseUserMember.class);
Example.Criteria criteria = example.createCriteria(); Example.Criteria criteria = example.createCriteria();
criteria.andIn("userId",userIds); criteria.andIn("userId", userIds);
mapper.deleteByExample(example); mapper.deleteByExample(example);
} }
} }
\ No newline at end of file
...@@ -84,6 +84,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -84,6 +84,7 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
.memberLevel(userMemberSaveDTO.getMemberLevel()) .memberLevel(userMemberSaveDTO.getMemberLevel())
.totalNumber(userMemberSaveDTO.getTotalNumber()) .totalNumber(userMemberSaveDTO.getTotalNumber())
.rentFreeDays(userMemberSaveDTO.getRentFreeDays()) .rentFreeDays(userMemberSaveDTO.getRentFreeDays())
.memberName(userMemberSaveDTO.getMemberName())
.discount(level == null ? 0 : level.getDiscount() == null ? 0 : level.getDiscount()) .discount(level == null ? 0 : level.getDiscount() == null ? 0 : level.getDiscount())
.status(phoneAndUserIdMap == null ? 0 : (phoneAndUserIdMap.get(userMemberSaveDTO.getPhone()) == null ? 0 : 1)) .status(phoneAndUserIdMap == null ? 0 : (phoneAndUserIdMap.get(userMemberSaveDTO.getPhone()) == null ? 0 : 1))
.crtId(userId) .crtId(userId)
...@@ -113,12 +114,13 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -113,12 +114,13 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
AtomicInteger counter = new AtomicInteger(0); AtomicInteger counter = new AtomicInteger(0);
int threadNums= userMemberData.size()/BORDER_NUM==0?1:userMemberData.size()/BORDER_NUM; int threadNums= userMemberData.size()/BORDER_NUM==0?1:userMemberData.size()/BORDER_NUM;
CountDownLatch latch = new CountDownLatch(threadNums); CountDownLatch latch = new CountDownLatch(threadNums);
Map<Integer,UserMemberDTO> numAndUserMemberMap = new HashMap<>(userMemberData.size());
for (int i=0;i<threadNums;i++){ for (int i=0;i<threadNums;i++){
int startIndex = i*BORDER_NUM; int startIndex = i*BORDER_NUM;
int endIndex=i==(threadNums-1)?userMemberData.size():(i+1)*BORDER_NUM; int endIndex=i==(threadNums-1)?userMemberData.size():(i+1)*BORDER_NUM;
List<String[]> subResultDate = userMemberData.subList(startIndex,endIndex); List<String[]> subResultDate = userMemberData.subList(startIndex,endIndex);
threadPoolTaskExecutor.execute(()->{ threadPoolTaskExecutor.execute(()->{
wrapperData(subResultDate, userId, userName, baseUserMemberExports, levelAndbaseUserMemberMap, phoneAndUserIdMap, leaveNameAndLeaveEntry, memberLevel, discount, counter); wrapperData(subResultDate, userId, userName, baseUserMemberExports, levelAndbaseUserMemberMap, phoneAndUserIdMap, leaveNameAndLeaveEntry, memberLevel, discount, counter, numAndUserMemberMap);
latch.countDown(); latch.countDown();
}); });
} }
...@@ -128,12 +130,22 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -128,12 +130,22 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
throw new BaseException("导入数据失败"); throw new BaseException("导入数据失败");
} }
InsertBatch(baseUserMemberExports); InsertBatch(baseUserMemberExports);
Set<Map.Entry<Integer, UserMemberDTO>> entries = numAndUserMemberMap.entrySet();
for (Map.Entry<Integer, UserMemberDTO> memberDTOEntry : entries) {
try {
baseUserMemberBiz.updUserMemberByUserId(memberDTOEntry.getValue());
}catch (Exception ex){
log.error("当前行数:【{}】",memberDTOEntry.getKey());
log.error("会员更新错误:【{}】", ex.getMessage());
throw new BaseException("");
}
}
return baseUserMemberExports.size(); return baseUserMemberExports.size();
} }
private void wrapperData(List<String[]> userMemberData, Integer userId, String userName, List<BaseUserMemberExport> baseUserMemberExports, Map<Integer, BaseUserMemberLevel> levelAndbaseUserMemberMap, Map<String, Integer> phoneAndUserIdMap, Set<Map.Entry<String, Integer>> leaveNameAndLeaveEntry, Integer memberLevel, Integer discount, AtomicInteger counter) { private void wrapperData(List<String[]> userMemberData, Integer userId, String userName, List<BaseUserMemberExport> baseUserMemberExports, Map<Integer, BaseUserMemberLevel> levelAndbaseUserMemberMap, Map<String, Integer> phoneAndUserIdMap, Set<Map.Entry<String, Integer>> leaveNameAndLeaveEntry, Integer memberLevel, Integer discount, AtomicInteger counter,Map<Integer,UserMemberDTO> numAndUserMemberMap) {
for (String[] data : userMemberData) { for (String[] data : userMemberData) {
counter.incrementAndGet();
String phone = data[0]; String phone = data[0];
String memberLevelName = data[1]; String memberLevelName = data[1];
String memberName = data[2]; String memberName = data[2];
...@@ -158,15 +170,15 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper, ...@@ -158,15 +170,15 @@ public class BaseUserMemberExportBiz extends BaseBiz<BaseUserMemberExportMapper,
userMemberDTO.setIsBind(1); userMemberDTO.setIsBind(1);
userMemberDTO.setMemberName(memberName); userMemberDTO.setMemberName(memberName);
userMemberDTO.setBuyCount(0); userMemberDTO.setBuyCount(0);
try { numAndUserMemberMap.put(counter.incrementAndGet(),userMemberDTO);
/* try {
baseUserMemberBiz.updUserMemberByUserId(userMemberDTO); baseUserMemberBiz.updUserMemberByUserId(userMemberDTO);
} catch (Exception e) { } catch (Exception e) {
log.error("当前行数:【{}】",counter.get()); log.error("当前行数:【{}】",counter.get());
log.error("会员更新错误:【{}】", e.getMessage()); log.error("会员更新错误:【{}】", e.getMessage());
throw new BaseException(e); throw new BaseException(e);
}*/
} }
}
BaseUserMemberExport memberExport = BaseUserMemberExport BaseUserMemberExport memberExport = BaseUserMemberExport
.builder() .builder()
.username(phone.trim()) .username(phone.trim())
......
...@@ -2,6 +2,7 @@ package com.github.wxiaoqi.security.admin.mapper; ...@@ -2,6 +2,7 @@ package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
...@@ -13,6 +14,7 @@ import java.util.List; ...@@ -13,6 +14,7 @@ import java.util.List;
* @email nishijjo@qq.com * @email nishijjo@qq.com
* @date 2019-06-11 11:06:45 * @date 2019-06-11 11:06:45
*/ */
@Repository
public interface BaseUserMemberLevelMapper extends Mapper<BaseUserMemberLevel> { public interface BaseUserMemberLevelMapper extends Mapper<BaseUserMemberLevel> {
List<BaseUserMemberLevel> selectUserMembersLevelByLevels(@Param("levels") List<Integer> levels); List<BaseUserMemberLevel> selectUserMembersLevelByLevels(@Param("levels") List<Integer> levels);
......
...@@ -30,6 +30,7 @@ import com.github.wxiaoqi.security.common.util.result.JsonResultUtil; ...@@ -30,6 +30,7 @@ import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.activity.feign.ActivityFeign; import com.xxfc.platform.activity.feign.ActivityFeign;
import com.xxfc.platform.im.feign.ImFeign; import com.xxfc.platform.im.feign.ImFeign;
import com.xxfc.platform.universal.dto.RegionDTO; import com.xxfc.platform.universal.dto.RegionDTO;
import com.xxfc.platform.universal.dto.SmsTemplateDTO;
import com.xxfc.platform.universal.feign.MQSenderFeign; import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.RegionFeign; import com.xxfc.platform.universal.feign.RegionFeign;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
...@@ -37,6 +38,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -37,6 +38,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -105,6 +107,9 @@ public class AppPermissionService { ...@@ -105,6 +107,9 @@ public class AppPermissionService {
@Autowired @Autowired
private BaseUserMemberBiz baseUserMemberBiz; private BaseUserMemberBiz baseUserMemberBiz;
@Value("${admin.smallName}")
private String smallName;
public AppUserInfo validate(String username, String password) { public AppUserInfo validate(String username, String password) {
AppUserInfo info = new AppUserInfo(); AppUserInfo info = new AppUserInfo();
...@@ -447,8 +452,14 @@ public class AppPermissionService { ...@@ -447,8 +452,14 @@ public class AppPermissionService {
} }
public static String getIp() { public static String getIp() {
try {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
return requestAttributes.getRequest().getHeader("userHost"); return requestAttributes.getRequest().getHeader("userHost");
}catch (Exception e){
e.printStackTrace();
return null;
}
} }
/** /**
...@@ -949,7 +960,15 @@ public class AppPermissionService { ...@@ -949,7 +960,15 @@ public class AppPermissionService {
//上线绑定 //上线绑定
relationBiz.bindByUserId(userid, small_id); relationBiz.bindByUserId(userid, small_id);
//发送短信通知用户 //发送短信通知用户
thirdFeign.sendCode(username, password, SystemConfig.TEMPLATECODE); List<String> smsParams = new ArrayList<String>();
smsParams.add(smallName);
smsParams.add(username);
smsParams.add(password);
thirdFeign.sendTemplate(new SmsTemplateDTO(){{
setPhoneNumbers(username);
setType(SmsTemplateDTO.PWD);
setParams(smsParams.toArray(new String[smsParams.size()]));
}});
//参加新人活动 //参加新人活动
jionActivity(userid); jionActivity(userid);
// 登录结果要做做统一处理 // 登录结果要做做统一处理
......
...@@ -113,6 +113,7 @@ ...@@ -113,6 +113,7 @@
base_user_member_level ml base_user_member_level ml
on on
ml.level = b.member_level ml.level = b.member_level
where ml.isdel = 0
) m ) m
on on
l.id = m.user_id l.id = m.user_id
......
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
wc.stauts, wc.stauts,
wc.crt_time AS `crtTime`, wc.crt_time AS `crtTime`,
wc.finish_time AS `finishTime`, wc.finish_time AS `finishTime`,
wc.cono wc.cono,
wc.account_number AS `accountNumber`
FROM FROM
(SELECT * FROM `my_wallet_cath` <if test="state != null"> (SELECT * FROM `my_wallet_cath` <if test="state != null">
WHERE `stauts`=#{state} WHERE `stauts`=#{state}
......
package com.xxfc.platform.order.Utils;
import java.util.Calendar;
public class OrderDateUtils {
public static String getFirstDayOfMonth(int year, int month) {
String monthStr = month < 10 ? "0" + month : String.valueOf(month);
return year + "-" + monthStr + "-" + "01";
}
/**
* get the last date of given month and year
* @param year
* @param month
* @return
*     
*/
public static String getLastDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DATE, 1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" +
calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* get Calendar of given year
* @param year
* @return
*     
*/
private static Calendar getCalendarFormYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
return cal;
}
/**
* get start date of given week no of a year
* @param year
* @param weekNo
* @return
*     
*/
public static String getStartDayOfWeekNo(int year, int weekNo) {
Calendar cal = getCalendarFormYear(year);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
cal.get(Calendar.DAY_OF_MONTH);
}
/**
* get the end day of given week no of a year.
* @param year
* @param weekNo
* @return
*     
*/
public static String getEndDayOfWeekNo(int year, int weekNo) {
Calendar cal = getCalendarFormYear(year);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
cal.add(Calendar.DAY_OF_WEEK, 6);
return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
cal.get(Calendar.DAY_OF_MONTH);
}
}
package com.xxfc.platform.order.contant.enumerate;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public enum OrderInquiryType {
DAY(1,"按天分类"),WEEK(2,"按周分类"),MONTH(3,"按月分类");
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
OrderInquiryType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
package com.xxfc.platform.order.entity;
import com.xxfc.platform.order.pojo.Member;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* @author Administrator
*/
@Data
public class MembersOrder {
/**
* 时间段按日(yyyy-MM-dd)/周(yyyy-ww) /月(yyyy-MM)
*/
private String period;
List<Member> members;
}
package com.xxfc.platform.order.entity.inter; package com.xxfc.platform.order.entity.inter;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem; import com.xxfc.platform.order.entity.OrderItem;
...@@ -28,4 +29,8 @@ public interface OrderDetail extends OrderItemInter { ...@@ -28,4 +29,8 @@ public interface OrderDetail extends OrderItemInter {
void setTickerNo(List<String> tickerNo); void setTickerNo(List<String> tickerNo);
public AppUserDTO getAppUserDTO();
public void setAppUserDTO(AppUserDTO appUserDTO);
} }
package com.xxfc.platform.order.pojo;
import lombok.Data;
import java.math.BigDecimal;
/**
* 每日、每周或每月不同会员的总数据
* @author Administrator
*/
@Data
public class Member {
/**
* 金额
*/
private BigDecimal amount;
/**
* 会员等级
*/
private Integer level;
/**
* 购买次数
*/
private Integer number;
/**
* 会员名
*/
private String memberName;
}
package com.xxfc.platform.order.pojo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 每日、每周、每月会员购买数据
* @author Administrator
*/
@Data
public class MembersOrderDto {
/**
* 时间段
*/
private String timeSlot;
/**
* 时间段总数据
*
*/
private BigDecimal totalPayment;
/**
* 时间段内不同会员数据
*/
private List<Member> members;
}
package com.xxfc.platform.order.pojo;
import lombok.Data;
/**
* 会员订单统计条件
* @author Administrator
*/
@Data
public class OrderQuery {
private Integer page=1;
private Integer limit=10;
/**
* 查询开始时间
*/
private Long startTime;
/**
* 查询结束时间
*/
private Long endTime;
/**
* 1.按每日统计,2.按每周统计,3.按每月统计
*/
private Integer type=1;
}
...@@ -19,6 +19,7 @@ import java.util.List; ...@@ -19,6 +19,7 @@ import java.util.List;
public class MemberBO extends OrderMemberDetail implements OrderDetail { public class MemberBO extends OrderMemberDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
private BaseUserMemberLevel baseUserMemberLevel; private BaseUserMemberLevel baseUserMemberLevel;
AppUserDTO appUserDTO;
/** /**
* 下单来源,1--app;2--小程序 * 下单来源,1--app;2--小程序
*/ */
......
package com.xxfc.platform.order.pojo; package com.xxfc.platform.order.pojo.order.add;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@Data @Data
......
package com.xxfc.platform.order.pojo; package com.xxfc.platform.order.pojo.order.add;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.xxfc.platform.order.pojo; package com.xxfc.platform.order.pojo.order.add;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem; import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import com.xxfc.platform.vehicle.constant.AccompanyingItemType;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.xxfc.platform.order.pojo; package com.xxfc.platform.order.pojo.order.add;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column; import javax.persistence.Column;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@Data @Data
......
package com.xxfc.platform.order.pojo.order.add;
import lombok.Data;
@Data
public class BgAddRentDTO extends AddRentVehicleDTO {
/**
* 用户订单
*/
Integer appUserId;
}
...@@ -2,17 +2,17 @@ package com.xxfc.platform.order.biz; ...@@ -2,17 +2,17 @@ package com.xxfc.platform.order.biz;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.DailyMembersOrderStatistics; import com.xxfc.platform.order.entity.DailyMembersOrderStatistics;
import com.xxfc.platform.order.entity.MembersOrder;
import com.xxfc.platform.order.entity.OrderAccount; import com.xxfc.platform.order.entity.OrderAccount;
import com.xxfc.platform.order.entity.OrderStatistics; import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.mapper.DailyMembersOrderStatisticsMapper; import com.xxfc.platform.order.mapper.DailyMembersOrderStatisticsMapper;
import com.xxfc.platform.order.pojo.OrderQuery;
import com.xxfc.platform.order.pojo.account.OrderAccountDTO; import com.xxfc.platform.order.pojo.account.OrderAccountDTO;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail; import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -20,13 +20,11 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -20,13 +20,11 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 每日购买会员订单统计 * 每日购买会员订单统计
...@@ -120,4 +118,13 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta ...@@ -120,4 +118,13 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
public OrderStatistics findAll(Integer companyId) { public OrderStatistics findAll(Integer companyId) {
return mapper.monthOrderTotal(companyId); return mapper.monthOrderTotal(companyId);
} }
/**
* 根据时间按年月日分组
* @param query
* @return
*/
public List<MembersOrder> getMemberOrderStatistics(OrderQuery query) {
return mapper.getMemberOrderStatistics(query);
}
} }
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.db.PageResult;
import com.github.pagehelper.Page;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.common.biz.BaseBiz; 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.msg.ObjectRestResponse;
import com.google.common.collect.Maps;
import com.google.common.collect.Ordering;
import com.xxfc.platform.order.Utils.OrderDateUtils;
import com.xxfc.platform.order.contant.enumerate.OrderInquiryType;
import com.xxfc.platform.order.entity.MembersOrder;
import com.xxfc.platform.order.entity.OrderStatistics; import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.mapper.OrderStatisticsMapper; import com.xxfc.platform.order.mapper.OrderStatisticsMapper;
import com.xxfc.platform.order.pojo.HomePageOrderData; import com.xxfc.platform.order.pojo.HomePageOrderData;
import com.xxfc.platform.order.pojo.Member;
import com.xxfc.platform.order.pojo.MembersOrderDto;
import com.xxfc.platform.order.pojo.OrderQuery;
import org.apache.commons.lang3.StringUtils;
import org.assertj.core.util.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.text.DateFormat;
import java.util.Objects; import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/** /**
...@@ -63,15 +81,117 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat ...@@ -63,15 +81,117 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
} }
result.setTotalOrders(orderStatistics.stream().map(HomePageOrderData::getTotalOrders).filter(o -> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalOutstandingDeposit(orderStatistics.stream().map(HomePageOrderData::getTotalOutstandingDeposit).filter(o -> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalOrders(orderStatistics.stream().map(HomePageOrderData::getTotalOrders).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add)); result.setAdditionalIndemnity(orderStatistics.stream().map(HomePageOrderData::getAdditionalIndemnity).filter(o -> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add));
result.setTotalOutstandingDeposit(orderStatistics.stream().map(HomePageOrderData::getTotalOutstandingDeposit).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add)); return result;
}
result.setAdditionalIndemnity(orderStatistics.stream().map(HomePageOrderData::getAdditionalIndemnity).filter(o-> Objects.nonNull(o)).reduce(BigDecimal.ZERO, BigDecimal::add)); public PageResult<MembersOrderDto> getMemberOrderStatistics(List<BaseUserMemberLevel> memberLevels, OrderQuery query) {
List<MembersOrder> membersOrderList = membersBiz.getMemberOrderStatistics(query);
//按每天分类
if (CollectionUtil.isEmpty(membersOrderList)) {
return null;
}
//按每天分类
if (CollectionUtil.isEmpty(memberLevels)) {
throw new BaseException("获取不到会员信息");
}
//获取会员等级对应的名称
HashMap<Integer, String> map = Maps.newHashMap();
for (BaseUserMemberLevel memberLevel : memberLevels) {
map.put(memberLevel.getLevel(), memberLevel.getName());
}
//按查询条件获取统计信息
ArrayList<MembersOrderDto> arrayList = Lists.newArrayList();
if (OrderInquiryType.DAY.getCode().equals(query.getType())) {
for (MembersOrder mb : membersOrderList) {
MembersOrderDto mbdto = new MembersOrderDto();
//设置时间段
mbdto.setTimeSlot(mb.getPeriod());
TotalPaymentAndMemberName(map, mb, mbdto);
arrayList.add(mbdto);
}
} else {
if (membersOrderList.size() == 1) {
MembersOrder mb = membersOrderList.get(0);
MembersOrderDto mbdto = new MembersOrderDto();
//设置时间段
mbdto.setTimeSlot(query.getStartTime() + "-" + query.getEndTime());
TotalPaymentAndMemberName(map, mb, mbdto);
arrayList.add(mbdto);
} else {
for (int i = 0; i < membersOrderList.size(); i++) {
MembersOrder mb = membersOrderList.get(i);
String period = mb.getPeriod();
if (StringUtils.isBlank(period)) {
continue;
}
MembersOrderDto mbdto = new MembersOrderDto();
String[] periods = mb.getPeriod().split("-");
String startDay = null;
String endDay = null;
if (OrderInquiryType.WEEK.getCode().equals(query.getType())) {
startDay = OrderDateUtils.getEndDayOfWeekNo(Integer.parseInt(periods[0]), Integer.parseInt(periods[1]));
endDay = OrderDateUtils.getStartDayOfWeekNo(Integer.parseInt(periods[0]), Integer.parseInt(periods[1]));
}
if (OrderInquiryType.MONTH.getCode().equals(query.getType())) {
startDay = OrderDateUtils.getFirstDayOfMonth(Integer.parseInt(periods[0]), Integer.parseInt(periods[1]));
endDay = OrderDateUtils.getLastDayOfMonth(Integer.parseInt(periods[0]), Integer.parseInt(periods[1]));
}
if (i == 0) {
startDay = timeStampConversionToString(query.getStartTime());
}
if (i == (membersOrderList.size() - 1)) {
endDay = timeStampConversionToString(query.getEndTime());
}
if (StringUtils.isNotBlank(startDay) && StringUtils.isNotBlank(endDay)) {
mbdto.setTimeSlot(startDay + "-" + endDay);
} else {
mbdto.setTimeSlot("");
}
arrayList.add(mbdto);
}
}
}
//进行分页处理
return pagingProcessing(query,arrayList);
return result;
} }
private PageResult pagingProcessing(OrderQuery query, ArrayList<MembersOrderDto> arrayList) {
PageResult pageResult = (PageResult) arrayList;
pageResult.setPage(query.getPage());
pageResult.setPageSize(query.getLimit());
return pageResult;
}
private String timeStampConversionToString(Long startTime) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(startTime);
return simpleDateFormat.format(date);
}
private void TotalPaymentAndMemberName(HashMap<Integer, String> map, MembersOrder mb, MembersOrderDto mbdto) {
BigDecimal totalPayment = mbdto.getTotalPayment();
List<Member> members = mb.getMembers();
//设置时间段购买会员总金额和不同的会员名称
if (CollectionUtil.isNotEmpty(members)) {
mbdto.setMembers(members);
for (Member member : members) {
member.setMemberName(map.get(member.getLevel()));
totalPayment = totalPayment.add(member.getAmount());
}
}
}
} }
...@@ -357,7 +357,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -357,7 +357,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord); orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord);
//修改訂單狀態為定損 //修改訂單狀態為定損
baseOrder.setStatus(OrderStatusEnum.ORDER_FIXED_LOSS.getCode()); baseOrder.setStatus(OrderStatusEnum.ORDER_FIXED_LOSS.getCode());
baseOrderBiz.updateSelectiveByIdReT(baseOrder); baseOrder = baseOrderBiz.updateSelectiveByIdReT(baseOrder);
orderRentVehicleDetail.setFixedLossStatus(1); orderRentVehicleDetail.setFixedLossStatus(1);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail); orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
} else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS_NOW.getCode()) { //直接定损还车 } else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS_NOW.getCode()) { //直接定损还车
...@@ -370,7 +370,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp ...@@ -370,7 +370,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord); orderDepositRefundRecordBiz.saveFixLossRecord(depositRefundRecord);
//修改訂單狀態為已完成 //修改訂單狀態為已完成
baseOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode()); baseOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
baseOrderBiz.updateSelectiveByIdReT(baseOrder); baseOrder = baseOrderBiz.updateSelectiveByIdReT(baseOrder);
orderRentVehicleDetail.setFixedLossStatus(1); orderRentVehicleDetail.setFixedLossStatus(1);
orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail); orderRentVehicleBiz.updateSelectiveByIdRe(orderRentVehicleDetail);
baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH); baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH);
......
package com.xxfc.platform.order.mapper; package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.DailyMembersOrderStatistics; import com.xxfc.platform.order.entity.DailyMembersOrderStatistics;
import com.xxfc.platform.order.entity.MembersOrder;
import com.xxfc.platform.order.entity.OrderStatistics; import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.pojo.OrderQuery;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -18,4 +20,7 @@ public interface DailyMembersOrderStatisticsMapper extends Mapper<DailyMembersOr ...@@ -18,4 +20,7 @@ public interface DailyMembersOrderStatisticsMapper extends Mapper<DailyMembersOr
OrderStatistics monthOrderTotal(@Param("companyId") Integer companyId); OrderStatistics monthOrderTotal(@Param("companyId") Integer companyId);
List<MembersOrder> getMemberOrderStatistics(OrderQuery query);
} }
...@@ -37,7 +37,6 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense; ...@@ -37,7 +37,6 @@ import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO; import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import com.xxfc.platform.vehicle.pojo.CompanyDetail; import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import com.xxfc.platform.vehicle.pojo.QueryMultiDTO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.Data; import lombok.Data;
...@@ -49,14 +48,13 @@ import org.springframework.stereotype.Controller; ...@@ -49,14 +48,13 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Array;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.xxfc.platform.order.pojo.AddRentVehicleDTO.DEFAULT_DATE_TIME_FORMATTER; import static com.xxfc.platform.order.pojo.order.add.AddRentVehicleDTO.DEFAULT_DATE_TIME_FORMATTER;
@Controller @Controller
@RequestMapping("baseOrder") @RequestMapping("baseOrder")
......
package com.xxfc.platform.order.rest; package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
...@@ -9,15 +8,12 @@ import com.github.wxiaoqi.security.common.rest.BaseController; ...@@ -9,15 +8,12 @@ import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderMemberDetail; import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.pojo.AddMemberDTO; import com.xxfc.platform.order.pojo.order.add.AddMemberDTO;
import com.xxfc.platform.order.pojo.AddTourDTO;
import com.xxfc.platform.order.pojo.order.MemberBO; import com.xxfc.platform.order.pojo.order.MemberBO;
import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.service.OrderMemberService; import com.xxfc.platform.order.service.OrderMemberService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
......
...@@ -16,6 +16,7 @@ import com.xxfc.platform.order.biz.OrderRefundBiz; ...@@ -16,6 +16,7 @@ import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.biz.inner.OrderCalculateBiz; import com.xxfc.platform.order.biz.inner.OrderCalculateBiz;
import com.xxfc.platform.order.biz.inner.OrderCancelBiz; import com.xxfc.platform.order.biz.inner.OrderCancelBiz;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum; import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem; import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderRefund; import com.xxfc.platform.order.entity.OrderRefund;
...@@ -155,10 +156,12 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -155,10 +156,12 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
OrderRefundPriceVO orpv = new OrderRefundPriceVO(); OrderRefundPriceVO orpv = new OrderRefundPriceVO();
orpv.setRealAmount(orderPageVO.getRealAmount()); orpv.setRealAmount(orderPageVO.getRealAmount());
orpv.setRefundAmount(totalRefundAmount); orpv.setRefundAmount(totalRefundAmount);
if(totalDeductAmount.compareTo(BigDecimal.ZERO) > 0) { if(orderPageVO.getStatus().equals(OrderStatusEnum.ORDER_UNPAY.getCode())
orpv.setRefundDesc(StrUtil.format("本次取消操作需要扣除{}元违约金,实际退款金额为{}元,您确定要取消订单吗?", totalDeductAmount, totalRefundAmount)); || orderPageVO.getStatus().equals(OrderStatusEnum.ORDER_CRT.getCode())
|| totalDeductAmount.compareTo(BigDecimal.ZERO) <= 0) {
orpv.setRefundDesc("是否确定取消订单");
}else { }else {
orpv.setRefundDesc("取消操作可能会产生额外费用,是否确定取消订单"); orpv.setRefundDesc(StrUtil.format("本次取消操作需要扣除{}元违约金,实际退款金额为{}元,您确定要取消订单吗?", totalDeductAmount, totalRefundAmount));
} }
return ObjectRestResponse.succ(orpv); return ObjectRestResponse.succ(orpv);
} }
......
...@@ -13,8 +13,9 @@ import com.xxfc.platform.order.biz.BaseOrderBiz; ...@@ -13,8 +13,9 @@ import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz; import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.AddRentVehicleDTO; import com.xxfc.platform.order.pojo.order.add.AddRentVehicleDTO;
import com.xxfc.platform.order.pojo.order.RentVehicleBO; import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.order.add.BgAddRentDTO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO; import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.order.service.OrderRentVehicleService; import com.xxfc.platform.order.service.OrderRentVehicleService;
import com.xxfc.platform.vehicle.entity.BranchCompany; import com.xxfc.platform.vehicle.entity.BranchCompany;
...@@ -59,6 +60,24 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -59,6 +60,24 @@ public class OrderRentVehicleController extends CommonBaseController {
@ResponseBody @ResponseBody
@ApiOperation(value = "确认租车订单") @ApiOperation(value = "确认租车订单")
public ObjectRestResponse<BaseOrder> add(@RequestBody AddRentVehicleDTO vo){ public ObjectRestResponse<BaseOrder> add(@RequestBody AddRentVehicleDTO vo){
RentVehicleBO bo = initRentVehicleBO(vo);
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
orderRentVehicleService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder());
}
@RequestMapping(value = "back-stage/add",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "后台人员为客户下租车订单")
public ObjectRestResponse<BaseOrder> backStagedd(@RequestBody BgAddRentDTO dto){
RentVehicleBO bo = initRentVehicleBO(dto);
bo.setAppUserDTO(userFeign.userDetailById(dto.getAppUserId()).getData());
orderRentVehicleService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder());
}
private RentVehicleBO initRentVehicleBO(@RequestBody AddRentVehicleDTO vo) {
if(null == vo.getEndCompanyId() || vo.getEndCompanyId().equals(0)) { if(null == vo.getEndCompanyId() || vo.getEndCompanyId().equals(0)) {
if(StrUtil.isBlank(vo.getEndAddr())) { if(StrUtil.isBlank(vo.getEndAddr())) {
throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("公司参数不正确")); throw new BaseException(ResultCode.PARAM_ILLEGAL_CODE, Sets.newSet("公司参数不正确"));
...@@ -92,12 +111,10 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -92,12 +111,10 @@ public class OrderRentVehicleController extends CommonBaseController {
setBookStartDate(vo.getBookStartDate()); setBookStartDate(vo.getBookStartDate());
setBookEndDate(vo.getBookEndDate()); setBookEndDate(vo.getBookEndDate());
}}); }});
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())? bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())?
StrUtil.splitTrim(vo.getTickerNos(), ","):null); StrUtil.splitTrim(vo.getTickerNos(), ","):null);
bo.setAccompanyItems(vo.getAccompanyItems()); bo.setAccompanyItems(vo.getAccompanyItems());
orderRentVehicleService.createOrder(bo); return bo;
return ObjectRestResponse.succ(bo.getOrder());
} }
@RequestMapping(value = "list-by-order/{orderId}",method = RequestMethod.GET) @RequestMapping(value = "list-by-order/{orderId}",method = RequestMethod.GET)
......
...@@ -12,7 +12,7 @@ import com.github.wxiaoqi.security.common.rest.BaseController; ...@@ -12,7 +12,7 @@ import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderTourDetailBiz; import com.xxfc.platform.order.biz.OrderTourDetailBiz;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderTourDetail; import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.order.pojo.AddTourDTO; import com.xxfc.platform.order.pojo.order.add.AddTourDTO;
import com.xxfc.platform.order.pojo.order.TourBO; import com.xxfc.platform.order.pojo.order.TourBO;
import com.xxfc.platform.order.pojo.price.TourPriceVO; import com.xxfc.platform.order.pojo.price.TourPriceVO;
import com.xxfc.platform.order.service.OrderTourService; import com.xxfc.platform.order.service.OrderTourService;
......
package com.xxfc.platform.order.rest.background; package com.xxfc.platform.order.rest.background;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO; import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController; import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.DailyMembersOrderStatisticsBiz; import com.xxfc.platform.order.biz.DailyMembersOrderStatisticsBiz;
import com.xxfc.platform.order.biz.DailyTravelOrderStatisticsBiz; import com.xxfc.platform.order.biz.DailyTravelOrderStatisticsBiz;
...@@ -13,13 +15,17 @@ import com.xxfc.platform.order.biz.DailyVehicleOrderStatisticsBiz; ...@@ -13,13 +15,17 @@ import com.xxfc.platform.order.biz.DailyVehicleOrderStatisticsBiz;
import com.xxfc.platform.order.biz.OrderStatisticsBiz; import com.xxfc.platform.order.biz.OrderStatisticsBiz;
import com.xxfc.platform.order.entity.OrderStatistics; import com.xxfc.platform.order.entity.OrderStatistics;
import com.xxfc.platform.order.pojo.HomePageOrderData; import com.xxfc.platform.order.pojo.HomePageOrderData;
import com.xxfc.platform.order.pojo.OrderQuery;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author Administrator * @author Administrator
...@@ -56,7 +62,7 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz ...@@ -56,7 +62,7 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
/** /**
* 数据权限 * 数据权限
*/ */
private final Integer DATA_AUTHORITY=1; private final Integer DATA_AUTHORITY = 1;
@Autowired @Autowired
private DailyVehicleOrderStatisticsBiz vehicleBiz; private DailyVehicleOrderStatisticsBiz vehicleBiz;
...@@ -68,6 +74,7 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz ...@@ -68,6 +74,7 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
@Autowired @Autowired
private DailyMembersOrderStatisticsBiz membersBiz; private DailyMembersOrderStatisticsBiz membersBiz;
@ApiOperation("获取订单统计数据") @ApiOperation("获取订单统计数据")
@GetMapping("/findAll/{type}") @GetMapping("/findAll/{type}")
public ObjectRestResponse findAll(@PathVariable Integer type) { public ObjectRestResponse findAll(@PathVariable Integer type) {
...@@ -83,13 +90,13 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz ...@@ -83,13 +90,13 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
UserDTO user = userDTOObjectRestResponse.getData(); UserDTO user = userDTOObjectRestResponse.getData();
Integer companyId = user.getCompanyId(); Integer companyId = user.getCompanyId();
if (DATA_AUTHORITY.equals(user.getDataAll())){ if (DATA_AUTHORITY.equals(user.getDataAll())) {
companyId=null; companyId = null;
} }
if (TYPE_VEHICLE.equals(type)) { if (TYPE_VEHICLE.equals(type)) {
OrderStatistics vehicle = vehicleBiz.findAll(companyId); OrderStatistics vehicle = vehicleBiz.findAll(companyId);
return ObjectRestResponse.succ(new HomePageOrderData(){{ return ObjectRestResponse.succ(new HomePageOrderData() {{
setTotalOrders(vehicle.getTotalGmv().subtract(vehicle.getTotalReturnGmv())); setTotalOrders(vehicle.getTotalGmv().subtract(vehicle.getTotalReturnGmv()));
setAdditionalIndemnity(vehicle.getTotalCompensation() setAdditionalIndemnity(vehicle.getTotalCompensation()
.add(vehicle.getTotalForfeit()) .add(vehicle.getTotalForfeit())
...@@ -100,14 +107,14 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz ...@@ -100,14 +107,14 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
} }
if (TYPE_TOUR.equals(type)) { if (TYPE_TOUR.equals(type)) {
OrderStatistics tour = TravelBiz.findAll(companyId); OrderStatistics tour = TravelBiz.findAll(companyId);
return ObjectRestResponse.succ(new HomePageOrderData(){{ return ObjectRestResponse.succ(new HomePageOrderData() {{
setTotalOrders(tour.getTotalGmv().subtract(tour.getTotalReturnGmv())); setTotalOrders(tour.getTotalGmv().subtract(tour.getTotalReturnGmv()));
setAdditionalIndemnity(tour.getTotalDefaultMoney()); setAdditionalIndemnity(tour.getTotalDefaultMoney());
}}); }});
} }
if (TYPE_MEMBER.equals(type)) { if (TYPE_MEMBER.equals(type)) {
OrderStatistics member = membersBiz.findAll(companyId); OrderStatistics member = membersBiz.findAll(companyId);
return ObjectRestResponse.succ(new HomePageOrderData(){{ return ObjectRestResponse.succ(new HomePageOrderData() {{
setTotalOrders(member.getTotalGmv()); setTotalOrders(member.getTotalGmv());
}}); }});
...@@ -125,5 +132,18 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz ...@@ -125,5 +132,18 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
} }
@GetMapping("/order")
@ApiOperation(value = "会员统计")
public ObjectRestResponse getMemberOrderStatisticsData(@RequestBody OrderQuery query) {
//获取会员等级信息
List<BaseUserMemberLevel> memberLevels = userFeign.levels();
//获取会员订单统计信息
baseBiz.getMemberOrderStatistics(memberLevels,query);
return ObjectRestResponse.succ();
}
} }
...@@ -64,7 +64,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -64,7 +64,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
* 创建基础订单 * 创建基础订单
* @return * @return
*/ */
public BaseOrder createBaseOrder(Integer orderOrigin) { public BaseOrder createBaseOrder(Integer orderOrigin, Integer appUserId) {
BaseOrder baseOrder = new BaseOrder(); BaseOrder baseOrder = new BaseOrder();
//设置下单来源 //设置下单来源
...@@ -85,13 +85,14 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -85,13 +85,14 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
baseOrder.setVersion(VERSION_INITIAL); baseOrder.setVersion(VERSION_INITIAL);
//设置用户id //设置用户id
baseOrder.setUserId(Integer.valueOf(BaseContextHandler.getUserID())); baseOrder.setUserId(appUserId);
baseOrder.setMemberLevel(getAppUser().getMemberLevel()); baseOrder.setMemberLevel(getAppUser().getMemberLevel());
return baseOrder; return baseOrder;
} }
public void initDetail(Detail detail) { public void initDetail(Detail detail) {
BaseOrder order = createBaseOrder(detail.getOrderOrigin()); Integer appUserId = (null == detail.getAppUserDTO())? Integer.valueOf(BaseContextHandler.getUserID()): detail.getAppUserDTO().getUserid();
BaseOrder order = createBaseOrder(detail.getOrderOrigin(), appUserId);
detail.setOrder(order); detail.setOrder(order);
} }
......
...@@ -261,11 +261,15 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -261,11 +261,15 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
//计算车辆费用 //计算车辆费用
//如果用户存在,并且为会员,并且车辆有优惠价 //如果用户存在,并且为会员,并且车辆有优惠价
//默认折扣默认100
detail.setRebate(100);
if(null != dto && SYS_TRUE.equals(dto.getIsMember()) && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) { if(null != dto && SYS_TRUE.equals(dto.getIsMember()) && !NONE.getCode().equals(dto.getMemberLevel()) && !DISCOUNT_STATUS_NONE.equals(vehicleModel.getRentDiscountStatus())) {
String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice()) String[] prices = StrUtil.isBlank(vehicleModel.getRentDiscountPrice())
?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()} ?new String[]{vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString(),vehicleModel.getPrice().toString()}
:vehicleModel.getRentDiscountPrice().split(","); :vehicleModel.getRentDiscountPrice().split(",");
HandleDiscountDTO handleDiscountDTO = new HandleDiscountDTO(); HandleDiscountDTO handleDiscountDTO = new HandleDiscountDTO();
handleDiscountDTO.setRebate(100);
handleDiscountDTO.setModelAmount(vehicleModel.getPrice());
switch (MemberEnum.getByCode(dto.getMemberLevel())) { switch (MemberEnum.getByCode(dto.getMemberLevel())) {
case NORMAL: case NORMAL:
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, NORMAL); handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, NORMAL);
...@@ -279,6 +283,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -279,6 +283,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, DIAMOND); handleDiscountDTO = handleDiscount(dto, vehicleModel, prices, DIAMOND);
detail.getOrder().setHasMemberRight(SYS_TRUE); detail.getOrder().setHasMemberRight(SYS_TRUE);
break; break;
default:
break;
} }
detail.setRebate(handleDiscountDTO.getRebate()); detail.setRebate(handleDiscountDTO.getRebate());
vehicleOrderItem.setUnitPrice(handleDiscountDTO.getModelAmount()); vehicleOrderItem.setUnitPrice(handleDiscountDTO.getModelAmount());
......
...@@ -38,4 +38,51 @@ ...@@ -38,4 +38,51 @@
<!-- DATE_FORMAT(one_day,'%Y-%c')=DATE_FORMAT(DATE_SUB(NOW(),interval 1 day),'%Y-%c')--> <!-- DATE_FORMAT(one_day,'%Y-%c')=DATE_FORMAT(DATE_SUB(NOW(),interval 1 day),'%Y-%c')-->
<!-- </select>--> <!-- </select>-->
<select id="getMemberOrderStatistics" parameterType="com.xxfc.platform.order.pojo.OrderQuery"
resultMap="order">
SELECT
<if test="type==2">
DATE_FORMAT(date( FROM_UNIXTIME( a.crt_time / 1000 ) ),'%Y-%m') AS period,
</if>
<if test="type==3">
DATE_FORMAT(date( FROM_UNIXTIME( a.crt_time / 1000 ) ),'%Y-%v') AS period,
</if>
date( FROM_UNIXTIME( a.crt_time / 1000 ) ) AS period,
count( a.id ) AS number,
SUM( a.account_amount ) AS amount,
d.member_level AS level
FROM
order_account a
LEFT JOIN base_order b ON a.order_id = b.id
LEFT JOIN order_member_detail d ON d.order_id = b.id
WHERE
a.account_status = 1
AND a.account_type = 101
AND b.type = 3
<if test="startTime != null">
AND a.crt_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND a.crt_time &lt;= #{endTime}
</if>
GROUP BY
<if test="type==2">
DATE_FORMAT(date( FROM_UNIXTIME( a.crt_time / 1000 ) ),'%Y-%m'),
</if>
<if test="type==3">
DATE_FORMAT(date( FROM_UNIXTIME( a.crt_time / 1000 ) ),'%Y-%v'),
</if>
date( FROM_UNIXTIME( a.crt_time / 1000 ) ),
d.member_level
</select>
<resultMap id="order" type="com.xxfc.platform.order.entity.MembersOrder">
<result column="period" property="period"></result>
<collection property="members" ofType="com.xxfc.platform.order.pojo.Member">
<result column="number" property="level"></result>
<result column="amount" property="level"></result>
<result column="level" property="level"></result>
</collection>
</resultMap>
</mapper> </mapper>
\ No newline at end of file
...@@ -83,6 +83,12 @@ ...@@ -83,6 +83,12 @@
<artifactId>jiguang-common</artifactId> <artifactId>jiguang-common</artifactId>
<version>1.1.1</version> <version>1.1.1</version>
</dependency> </dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
......
package com.xxfc.platform.universal.api;
import com.xxfc.platform.universal.api.pojo.Authentication;
import com.xxfc.platform.universal.entity.IdInformation;
/**
* 调用外部接口实现类。调用不同的外部接口,需要编写不同了类实现该类
*/
public interface BaseAuthentication {
Authentication getAuthentication(IdInformation idInformation);
}
package com.xxfc.platform.universal.api.impl;
import com.xxfc.platform.universal.api.BaseAuthentication;
import com.xxfc.platform.universal.api.pojo.Authentication;
import com.xxfc.platform.universal.entity.IdInformation;
public class FQAuthentication implements BaseAuthentication {
@Override
public Authentication getAuthentication(IdInformation idInformation) {
return null;
}
}
package com.xxfc.platform.universal.api.pojo;
public class Authentication {
}
...@@ -71,6 +71,8 @@ public class SmsTemplateDTO { ...@@ -71,6 +71,8 @@ public class SmsTemplateDTO {
public static final int PAY_I= 26; public static final int PAY_I= 26;
//旅游(上车通知)27 //旅游(上车通知)27
public static final int PAY_J= 27; public static final int PAY_J= 27;
//小程序密码通知
public static final int PWD= 28;
......
package com.xxfc.platform.universal.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
public class HttpUtils {
/**
* get
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @return
* @throws Exception
*/
public static HttpResponse doGet(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpGet request = new HttpGet(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
/**
* post form
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param bodys
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
Map<String, String> bodys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (bodys != null) {
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
for (String key : bodys.keySet()) {
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
}
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
request.setEntity(formEntity);
}
return httpClient.execute(request);
}
/**
* Post String
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/**
* Post stream
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/**
* Put String
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/**
* Put stream
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/**
* Delete
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @return
* @throws Exception
*/
public static HttpResponse doDelete(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
StringBuilder sbUrl = new StringBuilder();
sbUrl.append(host);
if (!StringUtils.isBlank(path)) {
sbUrl.append(path);
}
if (null != querys) {
StringBuilder sbQuery = new StringBuilder();
for (Map.Entry<String, String> query : querys.entrySet()) {
if (0 < sbQuery.length()) {
sbQuery.append("&");
}
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
sbQuery.append(query.getValue());
}
if (!StringUtils.isBlank(query.getKey())) {
sbQuery.append(query.getKey());
if (!StringUtils.isBlank(query.getValue())) {
sbQuery.append("=");
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
}
}
}
if (0 < sbQuery.length()) {
sbUrl.append("?").append(sbQuery);
}
}
return sbUrl.toString();
}
private static HttpClient wrapClient(String host) {
HttpClient httpClient = new DefaultHttpClient();
if (host.startsWith("https://")) {
sslClient(httpClient);
}
return httpClient;
}
private static void sslClient(HttpClient httpClient) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] xcs, String str) {
}
public void checkServerTrusted(X509Certificate[] xcs, String str) {
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = httpClient.getConnectionManager();
SchemeRegistry registry = ccm.getSchemeRegistry();
registry.register(new Scheme("https", 443, ssf));
} catch (KeyManagementException ex) {
throw new RuntimeException(ex);
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
}
}
\ No newline at end of file
...@@ -82,6 +82,9 @@ public class AliYunSmsBiz { ...@@ -82,6 +82,9 @@ public class AliYunSmsBiz {
//旅游(上车通知)27 //旅游(上车通知)27
public static final String TEMPLATE_ID_PAY_J= "SMS_173345606"; public static final String TEMPLATE_ID_PAY_J= "SMS_173345606";
//旅游(上车通知)27
public static final String PWD= "SMS_174990497";
//发送模板消息 //发送模板消息
...@@ -166,6 +169,9 @@ public class AliYunSmsBiz { ...@@ -166,6 +169,9 @@ public class AliYunSmsBiz {
case 27 : case 27 :
SmsService.sendTemplateToJson(phoneNumbers,params,TEMPLATE_ID_PAY_J); SmsService.sendTemplateToJson(phoneNumbers,params,TEMPLATE_ID_PAY_J);
break; break;
case 28 :
SmsService.sendTemplateToJson(phoneNumbers,params,PWD);
break;
} }
......
package com.xxfc.platform.universal.biz;
import lombok.Data;
/**
* 用户信息类
* @author Administrator
*/
@Data
public class UserMessage {
private String name;
private String idNumber;
}
...@@ -7,8 +7,10 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign; ...@@ -7,8 +7,10 @@ import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.universal.biz.UserMessage;
import com.xxfc.platform.universal.entity.IdInformation; import com.xxfc.platform.universal.entity.IdInformation;
import com.xxfc.platform.universal.mapper.IdInformationMapper; import com.xxfc.platform.universal.mapper.IdInformationMapper;
import com.xxfc.platform.universal.service.authenticationInterface.UserAuthentication;
import com.xxfc.platform.universal.utils.CertifHttpUtils; import com.xxfc.platform.universal.utils.CertifHttpUtils;
import com.xxfc.platform.universal.utils.Validation; import com.xxfc.platform.universal.utils.Validation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -21,6 +23,7 @@ import org.apache.http.util.EntityUtils; ...@@ -21,6 +23,7 @@ import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
...@@ -31,9 +34,16 @@ import java.text.SimpleDateFormat; ...@@ -31,9 +34,16 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
/**
* 认证业务
* @author Administrator
*/
@Service @Service
@Slf4j @Slf4j
public class CertificationService { public class CertificationService {
@Autowired
private UserAuthentication authentication;
/** /**
* 认证相关的数据 * 认证相关的数据
*/ */
...@@ -209,17 +219,20 @@ public class CertificationService { ...@@ -209,17 +219,20 @@ public class CertificationService {
} }
//map携带身份证和姓名进行认证 //map携带身份证和姓名进行认证
Map<String, String> authMap = new HashMap<>(); // Map<String, String> authMap = new HashMap<>();
authMap.put(idCardName, (String) frontData.get(numberName)); // authMap.put(idCardName, (String) frontData.get(numberName));
authMap.put(cName, (String) frontData.get(cName)); // authMap.put(cName, (String) frontData.get(cName));
//3.调用接口进行认证 // //3.调用接口进行认证
String result = certificate(authMap); //
// boolean result = certificate(authMap);
boolean result = authentication.certificate(new UserMessage(){{
setIdNumber(number);
setName(name);
}} );
log.info("----认证结果result=========" + result); log.info("----认证结果result=========" + result);
//认证返回的参数是否为空 //认证返回的参数是否为空
if (!StringUtils.isBlank(result)) {
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(result); if (result) {
log.info("----certifRet=========" + certifRet);
if (MapUtil.isNotEmpty(map) || certifResultCode.equals(map.get(certifRet))) {
//认证成功后存入保存到数据库 //认证成功后存入保存到数据库
//获得身份证正面记录的身份证号和真实姓名 //获得身份证正面记录的身份证号和真实姓名
//设置姓名 //设置姓名
...@@ -257,9 +270,6 @@ public class CertificationService { ...@@ -257,9 +270,6 @@ public class CertificationService {
// return ObjectRestResponse.succ(objRR.getData()); // return ObjectRestResponse.succ(objRR.getData());
// } // }
} }
}
return ObjectRestResponse.createFailedResult(ResultCode.INCOMPLETE_DATA,"网络异常,请稍后再试"); return ObjectRestResponse.createFailedResult(ResultCode.INCOMPLETE_DATA,"网络异常,请稍后再试");
...@@ -267,7 +277,8 @@ public class CertificationService { ...@@ -267,7 +277,8 @@ public class CertificationService {
//认证 //认证
public String certificate(Map<String, String> querys) { //认证
public boolean certificate(Map<String, String> querys) {
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "APPCODE " + cAppcode); headers.put("Authorization", "APPCODE " + cAppcode);
try { try {
...@@ -280,15 +291,27 @@ public class CertificationService { ...@@ -280,15 +291,27 @@ public class CertificationService {
*/ */
//获取response的body //获取response的body
if (statusCode == 200) { if (statusCode == 200) {
return EntityUtils.toString(response.getEntity()); String result = EntityUtils.toString(response.getEntity());
log.info("----认证结果result=========" + result);
//认证返回的参数是否为空
if (!StringUtils.isBlank(result)) {
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(result);
log.info("----certifRet=========" + certifRet);
if (MapUtil.isNotEmpty(map) || certifResultCode.equals(map.get(certifRet))) {
return true;
}
}
} }
return false;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return null;
} }
//身份证照片解析 //身份证照片解析
public String imageParse(String imageUrl, String type) { public String imageParse(String imageUrl, String type) {
Map<String, String> headers = new HashMap<String, String>(); Map<String, String> headers = new HashMap<String, String>();
...@@ -317,10 +340,7 @@ public class CertificationService { ...@@ -317,10 +340,7 @@ public class CertificationService {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
......
package com.xxfc.platform.universal.service.authenticationInterface;
import com.xxfc.platform.universal.biz.UserMessage;
import java.util.Map;
/**
* 用户认证类
* @author Administrator
*/
public interface UserAuthentication {
/**
* 用户认证方法
* @param message
* @return
*/
boolean certificate(UserMessage message) ;
}
package com.xxfc.platform.universal.service.authenticationInterface.impl;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.xxfc.platform.universal.biz.UserMessage;
import com.xxfc.platform.universal.service.authenticationInterface.UserAuthentication;
import com.xxfc.platform.universal.utils.CertifHttpUtils;
import com.xxfc.platform.universal.utils.HttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.util.EntityUtils;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* 调用北京畅游互联科技有限公司接口
*
* @author Administrator
*/
@Service
@Slf4j
@Primary
public class BJCYAuthentication implements UserAuthentication {
private final String host = "http://aliyunverifyidcard.haoservice.com";
private final String path = "/idcard/VerifyIdcardv2";
private final String method = "GET";
private final String appcode = "ee7710ce92054cae9f6c040f6864e6a7";
private final String tokenHead = "Authorization";
private final String token="APPCODE " + appcode;
private final String cardNo ="cardNo";
private final String realName ="realName";
private final Integer resultCode=0;
private final String ret="error_code";
@Override
public boolean certificate(UserMessage message) {
Map<String, String> headers = new HashMap<String, String>();
headers.put(tokenHead, token);
Map<String, String> querys = new HashMap<String, String>();
querys.put(cardNo, message.getIdNumber());
querys.put(realName, message.getName());
try {
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
StatusLine statusLine = response.getStatusLine();
log.error(response.toString());
int statusCode = statusLine.getStatusCode();
log.error(statusCode+"");
//获取response的body
if (statusCode == 200) {
String result = EntityUtils.toString(response.getEntity());
log.info("----认证结果result=========" + result);
//认证返回的参数是否为空
if (!StringUtils.isBlank(result)) {
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(result);
log.info("----certifRet=========" + map);
if (MapUtil.isNotEmpty(map) || resultCode.equals(map.get(ret))) {
return true;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
package com.xxfc.platform.universal.service.authenticationInterface.impl;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.xxfc.platform.universal.biz.UserMessage;
import com.xxfc.platform.universal.service.authenticationInterface.UserAuthentication;
import com.xxfc.platform.universal.utils.CertifHttpUtils;
import com.xxfc.platform.universal.utils.HttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* 调用四川涪擎认证接口
*
* @author Administrator
*/
@Service
@Slf4j
public class XCFQAuthentication implements UserAuthentication {
private String cAppcode="acea1c8811f748b3a65815f11db357c4";
/**
* 认证相关的数据
*/
private String cHost = "https://idcert.market.alicloudapi.com";
private String cPath = "/idcard";
private String cMethod = "GET";
//响应:认证错误码字段名
private String certifRet = "status";
//响应:认证通过码
private String certifResultCode = "01";
//请求:身份证号字段名
private String idCardName = "idCard";
//请求:用户姓名字段名
private String cName = "name";
@Override
public boolean certificate(UserMessage message) {
//map携带身份证和姓名进行认证
Map<String, String> querys = new HashMap<>();
querys.put(idCardName, message.getIdNumber());
querys.put(cName, message.getName());
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "APPCODE " + cAppcode);
try {
log.info("----querys=========" + querys);
HttpResponse response = HttpUtils.doGet(cHost, cPath, cMethod, headers, querys);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
/**
* 状态码: 200 正常;400 URL无效;401 appCode错误; 403 次数用完; 500 API网管错误
*/
//获取response的body
if (statusCode == 200) {
String result = EntityUtils.toString(response.getEntity());
log.info("----认证结果result=========" + result);
//认证返回的参数是否为空
if (!StringUtils.isBlank(result)) {
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(result);
log.info("----certifRet=========" + certifRet);
if (MapUtil.isNotEmpty(map) || certifResultCode.equals(map.get(certifRet))) {
return true;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
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