Commit 9b9d5b28 authored by jiaorz's avatar jiaorz

新增押金记录,修改租车核销

parents 2b138687 e3fc6720
......@@ -12,7 +12,6 @@ import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.SignatureException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -50,7 +49,6 @@ public class ServiceAuthUtil{
@Scheduled(cron = "0/30 * * * * ?")
public void refreshAllowedClient() {
log.debug("refresh allowedClient.....");
BaseResponse resp = serviceAuthFeign.getAllowedClient(serviceAuthConfig.getClientId(), serviceAuthConfig.getClientSecret());
if (resp.getStatus() == 200) {
ObjectRestResponse<List<String>> allowedClient = (ObjectRestResponse<List<String>>) resp;
......
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.ace.cache.parser.impl;
import com.ace.cache.constants.CacheScope;
import com.ace.cache.parser.IKeyGenerator;
import com.ace.cache.parser.IUserKeyGenerator;
import com.ace.cache.utils.ReflectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service
public class DefaultKeyGenerator extends IKeyGenerator {
@Autowired(
required = false
)
private IUserKeyGenerator userKeyGenerator;
public DefaultKeyGenerator() {
}
public String buildKey(String key, CacheScope scope, Class<?>[] parameterTypes, Object[] arguments) {
boolean isFirst = true;
if (key.indexOf("{") > 0) {
key = key.replace("{", ":{");
Pattern pattern = Pattern.compile("\\d+\\.?[\\w]*");
Matcher matcher = pattern.matcher(key);
while(matcher.find()) {
String tmp = matcher.group();
String[] express = matcher.group().split("\\.");
String i = express[0];
int index = Integer.parseInt(i) - 1;
Object value = arguments[index];
if (parameterTypes[index].isAssignableFrom(List.class)) {
List result = (List)arguments[index];
if(null != result) {
value = result.get(0);
}
}
if (value == null || value.equals("null")) {
value = "";
}
if (express.length > 1) {
String field = express[1];
value = ReflectionUtils.getFieldValue(value, field);
}
if (isFirst) {
key = key.replace("{" + tmp + "}", value.toString());
} else {
key = key.replace("{" + tmp + "}", "_" + value.toString());
}
}
}
return key;
}
public IUserKeyGenerator getUserKeyGenerator() {
return this.userKeyGenerator;
}
}
......@@ -3,20 +3,15 @@ package com.github.wxiaoqi.security.admin.biz;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.entity.AppUserDetail;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.mapper.AppUserDetailMapper;
import com.github.wxiaoqi.security.admin.rpc.service.AppPermissionService;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.im.utils.StringUtil;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
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 java.time.Instant;
import java.util.Collection;
import java.util.HashMap;
......@@ -36,8 +31,6 @@ import java.util.stream.Collectors;
public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail> {
@Autowired
AppUserLoginBiz userLoginBiz;
@Override
......@@ -104,20 +97,16 @@ public class AppUserDetailBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
entity.setUpdatetime(Instant.now().toEpochMilli() / 1000L);
super.updateSelectiveById(entity);
}
Integer userid=entity.getUserid();
AppUserLogin appUserLogin=new AppUserLogin();
appUserLogin.setWxOpenid(userVo.getWxOpenid());
appUserLogin.setUnionid(userVo.getUnionid());
appUserLogin.setOpenid(userVo.getOpenid());
appUserLogin.setId(userid);
appUserLogin.setUsername(userVo.getUsername());
userLoginBiz.bindOpenid(appUserLogin);
} catch (Exception e) {
e.printStackTrace();
}
}
//更新用户信息
public Map<Integer, AppUserDetail> findUserIdAndUserDetailMapByMemberIds(List<Integer> memberIds) {
......
......@@ -11,6 +11,7 @@ import com.github.wxiaoqi.security.admin.vo.InviteMemberVo;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.aop.framework.AopContext;
......@@ -33,6 +34,7 @@ import java.util.stream.Collectors;
* @date 2019-07-03 16:36:44
*/
@Service
@Slf4j
public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRelation> {
@Autowired
......@@ -56,6 +58,10 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
* @param parentId
*/
public void bindRelation(Integer userId,Integer parentId,Integer type){
if (userId==parentId){
log.info("----userId==="+userId+"----parentId===="+parentId+"----自己不能成为自己的上线");
return;
}
AppUserRelation relation=getMyBiz().getRelationByUserId(parentId);
if(relation==null){
relation=new AppUserRelation();
......@@ -265,9 +271,14 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
}
public void deleteByMemberIds(Collection<Integer> userIds) {
Example example = new Example(AppUserRelation.class);
Example example = new Example(AppUserRelation.class);
Example.Criteria criteria = example.createCriteria();
criteria.andIn("userId",userIds);
criteria.andIn("parentId",userIds);
mapper.deleteByExample(example);
Example example2 = new Example(AppUserRelation.class);
Example.Criteria criteria1 = example2.createCriteria();
criteria1.andIn("userId",userIds);
mapper.deleteByExample(example2);
}
}
\ No newline at end of file
......@@ -174,6 +174,16 @@ public class AppUserController extends CommonBaseController {
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
}
userDetailBiz.updUuserInfoById(userVo);
Integer userid=userVo.getUserid();
if (userid!=null){
AppUserLogin appUserLogin=new AppUserLogin();
appUserLogin.setWxOpenid(userVo.getWxOpenid());
appUserLogin.setUnionid(userVo.getUnionid());
appUserLogin.setOpenid(userVo.getOpenid());
appUserLogin.setId(userid);
appUserLogin.setUsername(userVo.getUsername());
appUserLoginBiz.bindOpenid(appUserLogin);
}
return ObjectRestResponse.succ();
}
......
......@@ -16,9 +16,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -26,6 +24,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.List;
/**
......@@ -72,19 +71,20 @@ public class UserMemberAdminController {
@ApiOperation("会员excel模板下载")
@GetMapping(value = "/app/unauth/user/excel_model/dowload",produces = "application/vnd.ms-excel")
public ResponseEntity<byte[]> dowloadUserMemberExcelModel(HttpServletResponse response){
// 重置response
response.reset();
response.setCharacterEncoding("utf-8");
// response.setContentType("application/vnd.ms-excel");
@GetMapping(value = "/app/unauth/user/excel_model/dowload")
public ResponseEntity<byte[]> dowloadUserMemberExcelModel(){
response.addHeader("Content-Disposition", "attachment;filename=usermember.xlsx");
HttpHeaders headers = new HttpHeaders();
// headers.add("Content-Disposition","attachment;filename=usermember.xlsx");
// headers.add("Content-Type","application/vnd.ms-excel");
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
headers.setContentDisposition(ContentDisposition.builder("attachment").filename("usermember.xlsx", Charset.forName("UTF-8")).build());
InputStream inputStream = AdminBootstrap.class.getClassLoader().getResourceAsStream("file/usermember.xlsx");
try {
response.setContentLength(inputStream.available());
headers.setContentLength(Long.valueOf(inputStream.available()));
byte[] bytes = IOUtils.toByteArray(inputStream);
return ResponseEntity.ok(bytes);
inputStream.close();
return new ResponseEntity<>(bytes,headers,HttpStatus.OK);
} catch (IOException e) {
e.printStackTrace();
}
......
package com.github.wxiaoqi.security.api.vo.config;
import feign.Logger;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
......@@ -22,22 +20,20 @@ public class HeaderConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (requestAttributes instanceof ServletRequestAttributes){
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
if (requestAttributes instanceof ServletRequestAttributes) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = servletRequestAttributes.getRequest();
//请求头设置
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames!=null){
while (headerNames.hasMoreElements()){
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
if("Authorization".equals(headerName)) {
template.header(headerName,headerValue);
if ("Authorization".equals(headerName) || "authorization".equals(headerName)) {
template.header("Authorization", headerValue);
}
}
}
}
}
}
......@@ -27,38 +27,43 @@ import java.util.Map;
* @date 2019-06-03 15:57:13
*/
@Service
public class CofigBiz extends BaseBiz<CofigMapper,Cofig> {
public class CofigBiz extends BaseBiz<CofigMapper, Cofig> {
public List<Cofig> getConfigByType(List<Integer> list){
return mapper.getAllByType(list);
public List<Cofig> getConfigByType(List<Integer> list) {
Example example = new Example(Cofig.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("isDel", 0);
criteria.andIn("type", list);
return mapper.selectByExample(example);
}
/**
* 修改配置
*
* @param cofig
* @return
*/
@CacheClear(pre = "app:withdrawrule{1.type}")
public int updateConfig(Cofig cofig) {
EntityUtils.setUpdatedInfo(cofig);
return mapper.updateByPrimaryKeySelective(cofig);
return mapper.updateByPrimaryKeySelective(cofig);
}
@Cache(key = "app:withdrawrule:88")
public WithDrawRuleVo getWithDrawRule(){
public WithDrawRuleVo getWithDrawRule() {
WithDrawRuleVo withDrawRuleVo = new WithDrawRuleVo();
Example example = new Example(Cofig.class);
Example example = new Example(Cofig.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("type",88);
criteria.andEqualTo("type", 88);
List<Cofig> cofigs = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(cofigs)){
if (CollectionUtils.isEmpty(cofigs)) {
return withDrawRuleVo;
}
Cofig cofig = cofigs.get(0);
withDrawRuleVo = JSON.parseObject(cofig.getParams(),WithDrawRuleVo.class);
withDrawRuleVo.setDescription(cofig.getValue());
return withDrawRuleVo;
withDrawRuleVo = JSON.parseObject(cofig.getParams(), WithDrawRuleVo.class);
withDrawRuleVo.setDescription(cofig.getValue());
return withDrawRuleVo;
}
public void updateConfigStatus(int id) {
......@@ -72,10 +77,10 @@ public class CofigBiz extends BaseBiz<CofigMapper,Cofig> {
Query query = new Query(params);
Example example = new Example(Cofig.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("isDel",0);
criteria.andEqualTo("isDel", 0);
PageDataVO<Cofig> cofigPage = PageDataVO.pageInfo(query.getPage(), query.getLimit(), () -> mapper.selectByExample(example));
return new TableResultResponse<>(cofigPage.getTotalCount(),cofigPage.getData()) ;
return new TableResultResponse<>(cofigPage.getTotalCount(), cofigPage.getData());
}
}
\ No newline at end of file
......@@ -12,6 +12,7 @@ public enum ItemTypeEnum {
TOUR_CHILD(202, "旅游儿童"),
TOUR_INSURE(203, "旅游保险"),
MEMBER(301, "会员"),
ACCOMPANY(104, "随车物品"),
;
/**
* 编码
......
package com.xxfc.platform.order.entity;
import lombok.Data;
import javax.persistence.Column;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
@Data
public class DailyOrderStatistics {
@Column(name = "one_day")
private System oneDay;
@Column(name = "total_orders")
private BigInteger totalOrders;
@Column(name = "actual_total_income")
private BigDecimal actualTotalIncome;
}
package com.xxfc.platform.order.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.joda.time.DateTime;
import org.springframework.format.annotation.DateTimeFormat;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.code.IdentityDialect;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
/**
* 每日租车订单统计
* @author Administrator
*/
@Data
@Table(name = "daily_vehicle_order_statistics")
public class DailyVehicleOrderStatistics {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
/**
* 日期
*/
@Column(name = "one_day")
private String oneDay;
/**
* 成交总金额
*/
@Column(name = "gmv")
private BigDecimal gmv;
/**
* 预交押金总额
*/
@Column(name = "security_deposit")
private BigDecimal securityDeposit;
/**
* 退还押金总额
*/
@Column(name = "refund_security_deposit")
private BigDecimal refundSecurityDeposit;
/**
* 赔偿总额
*/
@Column(name = "compensation")
private BigDecimal compensation;
/**
* 违章总额
*/
@Column(name = "forfeit")
private BigDecimal violationMoney;
/**
* 取消订单总额
*/
@Column(name = "penal_sum")
private BigDecimal penalSum;
/**
* 延期总额
*/
@Column(name = "postpone")
private BigDecimal postpone;
/**
* 创建时间
*/
@Column(name = "crt_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date crtTime;
}
......@@ -57,4 +57,12 @@ public class DepositRefundRecord {
* 是否完成
*/
private Boolean iscomplete;
/**
* 违章记录
*/
@Transient
OrderViolation orderViolation;
@Transient
Long rentDepositAutoRefundTime;
}
\ No newline at end of file
......@@ -4,6 +4,9 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import com.xxfc.platform.order.contant.enumerate.ItemTypeEnum;
import com.xxfc.platform.vehicle.constant.AccompanyingItemType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -50,10 +53,10 @@ public class OrderItem implements Serializable {
private String name;
/**
* item 类型 1--租车车型 2--车损免赔 3--司机费用 4--旅游项目 5--旅游保险 6--会员
* item 类型 ,详见{@link ItemTypeEnum}
*/
@Column(name = "type")
@ApiModelProperty(value = "item 类型 1--租车车型 2--车损免赔 3--司机费用 4--旅游项目 5--旅游保险 6--会员")
@ApiModelProperty(value = "item 类型 1--租车车型 2--车损免赔 3--司机费用 4--旅游项目 5--旅游保险 6--会员 7--随车物品")
private Integer type;
/**
......@@ -126,6 +129,10 @@ public class OrderItem implements Serializable {
@ApiModelProperty(value = "订单id")
private Integer orderId;
@Column(name = "detail")
@ApiModelProperty(value = "描述、详情")
private String detail;
public Integer getCalculateNum() {
return buyNum - cutNum;
......
package com.xxfc.platform.order.pojo;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem;
import com.xxfc.platform.vehicle.constant.AccompanyingItemType;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -8,6 +11,8 @@ import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class AddRentVehicleDTO extends AddOrderCommonDTO{
......@@ -100,6 +105,12 @@ public class AddRentVehicleDTO extends AddOrderCommonDTO{
@ApiModelProperty(value = "优惠卷卷号")
private String tickerNos;
@ApiModelProperty(value = "随车物品")
private List<String> accompanyStrs;
@ApiModelProperty(value = "随车物品", hidden = true)
private List<OrderAccompanyDTO> accompanyItems;
public void setStartTime(Long startTime) {
this.startTime = startTime;
this.bookStartDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startTime), ZoneOffset.ofHours(8)));
......@@ -109,4 +120,20 @@ public class AddRentVehicleDTO extends AddOrderCommonDTO{
this.endTime = endTime;
this.bookEndDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endTime), ZoneOffset.ofHours(8)));
}
public void setAccompanyStrs(List<String> accompanyStrs) {
this.accompanyStrs = accompanyStrs;
if(null != accompanyStrs) {
this.accompanyItems = this.accompanyStrs.parallelStream().map(str -> {
String[] strs = str.split(",");
if(strs.length < 2) {
return null;
}
OrderAccompanyDTO item = new OrderAccompanyDTO();
item.setId(Integer.valueOf(strs[0]));
item.setNum(Integer.valueOf(strs[1]));
return item;
}).collect(Collectors.toList());
}
}
}
package com.xxfc.platform.order.pojo;
public class DepositeRefundRecordVo {
}
package com.xxfc.platform.order.pojo;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OrderAccompanyDTO {
/**
* 物品id
*/
private Integer id;
/**
* 物品名称
*/
private String name;
/**
* 物品数量
*/
private Integer num;
/**
* 物品单位
*/
private String unit;
/**
* 物品单价
*/
private BigDecimal unitPrice;
/**
* 物品总价
*/
private BigDecimal totalAmount;
}
......@@ -24,4 +24,7 @@ public class OrderAboutParamDTO {
@ApiModelProperty(value = "免赔费用")
private BigDecimal damageSafe;
// @ApiModelProperty(value = "违章保留金")
// private BigDecimal ;
}
\ No newline at end of file
package com.xxfc.platform.order.pojo.order;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderMemberDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderTourDetail;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Data
public class OrderPageVO extends BaseOrder {
......@@ -24,8 +20,19 @@ public class OrderPageVO extends BaseOrder {
List<VehicleUserLicense> vehicleUserLicenses;
/**
* 用户名
*/
private String username;
/**
* 是否是用户匹配公司
*/
private boolean userCompanyStatus = false;
/**
* 车牌
*/
private String vehicalNumberPlat;
private String qrcodeStr;
......@@ -35,8 +42,13 @@ public class OrderPageVO extends BaseOrder {
*/
private BigDecimal illegalReserve;
/**
* 出交车记录
*/
private OrderVehicleCrosstownDto orderVehicleCrosstownDto;
private List<OrderItem> items;
public void setQrcodeStr(String prefix) {
this.qrcodeStr = prefix+ "?"+ TYPE+ getType()+ "&"+ NO+ getNo();
}
......
package com.xxfc.platform.order.pojo.order;
import com.xxfc.platform.order.entity.DepositRefundRecord;
import com.xxfc.platform.order.entity.OrderVehicleCrosstown;
import lombok.Data;
import java.util.List;
@Data
public class OrderVehicleCrosstownDto extends OrderVehicleCrosstown {
String userLicenses;
......@@ -30,5 +33,5 @@ public class OrderVehicleCrosstownDto extends OrderVehicleCrosstown {
private String username;
List<DepositRefundRecord> depositRefundRecord;
}
......@@ -6,6 +6,7 @@ import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.pojo.BookVehicleVO;
import io.swagger.annotations.ApiModelProperty;
......@@ -38,4 +39,7 @@ public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail
* 订单子项
*/
List<OrderItem> items;
@ApiModelProperty(value = "随车物品", hidden = true)
private List<OrderAccompanyDTO> accompanyItems;
}
package com.xxfc.platform.order.biz;
import com.alibaba.fastjson.JSON;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.order.entity.DailyVehicleOrderStatistics;
import com.xxfc.platform.order.mapper.DailyVehicleOrderStatisticsMapper;
import com.xxfc.platform.order.pojo.DedDetailDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderStatisticsMapper, DailyVehicleOrderStatistics> {
private final Integer TYPE_DEFERRED = 1;
private final Integer TYPE_DAMAGE = 2;
@Transactional(rollbackFor = Exception.class)
public boolean getTotalOrder() {
try {
HashMap<String, Object> resultMap = new HashMap<>();
// 获取每日租车订单成交金和押金总额
Map<String, BigDecimal> gmvAndMarginTotal = mapper.getGmvAndMarginTotal();
resultMap.putAll(gmvAndMarginTotal);
// 获取车辆
BigDecimal penalSum = mapper.getPenalSum();
resultMap.put("penalSum", penalSum);
// 获取订单退还押金总额
BigDecimal refundSecurityDeposit = mapper.getRefundSecurityDeposit();
resultMap.put("refundSecurityDeposit", refundSecurityDeposit);
// 获取违章查询总和
BigDecimal violationMoney = mapper.getViolationMoney();
resultMap.put("violationMoney", violationMoney);
// 获取赔偿和延期JSON字符串
List<String> compensationAndPostpone = mapper.getCompensationAndPostpone();
// 获取赔偿和延期JSON字符串转换为map
Map<String, BigDecimal> cpMap = getCompensationAndPostponeMap(compensationAndPostpone);
resultMap.putAll(cpMap);
DailyVehicleOrderStatistics orderStatistics = new DailyVehicleOrderStatistics();
BeanUtils.copyProperties(orderStatistics, resultMap);
super.insertSelective(orderStatistics);
return true;
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}
/**
* 获取赔偿总额和延期总额
*/
private Map<String, BigDecimal> getCompensationAndPostponeMap(List<String> compensationAndPostpone) {
if (CollectionUtils.isNotEmpty(compensationAndPostpone)) {
List<DedDetailDTO> sumDedDetailDTOs = new ArrayList<>();
for (String value : compensationAndPostpone) {
List<DedDetailDTO> dedDetailDTOS = JSON.parseArray(value, DedDetailDTO.class);
sumDedDetailDTOs.addAll(dedDetailDTOS);
}
// 获取赔偿金额总和
BigDecimal compensation = get(sumDedDetailDTOs, TYPE_DAMAGE);
// 获取延期金额总和
BigDecimal postpone = get(sumDedDetailDTOs, TYPE_DEFERRED);
Map<String, BigDecimal> resultMap = new HashMap<>();
resultMap.put("compensation", compensation);
resultMap.put("postpone", postpone);
return resultMap;
}
return new HashMap<String, BigDecimal>();
}
/**
* 根据type获取对应的金额总和
*
* @param sumDedDetailDTOs
* @param TYPE_DAMAGE
* @return
*/
private BigDecimal get(List<DedDetailDTO> sumDedDetailDTOs, Integer TYPE_DAMAGE) {
if (CollectionUtils.isNotEmpty(sumDedDetailDTOs)) {
BigDecimal aggregateAmount = sumDedDetailDTOs.stream()
.filter(d -> TYPE_DAMAGE.equals(d.getType()))
.map(DedDetailDTO::getCost)
.reduce(BigDecimal.ZERO, BigDecimal::add);
return aggregateAmount;
}
return null;
}
// @Scheduled(cron = "0 0 2 * * ? ")
// private void countDailyOrdersRegularly(){
// DailyOrderStatistics dailyOrderStatistics= mapper.getTotalOrder();
// }
}
package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.order.contant.enumerate.CrosstownTypeEnum;
import com.xxfc.platform.order.contant.enumerate.DepositRefundStatus;
import com.xxfc.platform.order.entity.DepositRefundRecord;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.mapper.DepositRefundRecordMapper;
import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service
@Transactional
@Slf4j
public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapper, DepositRefundRecord> {
@Autowired
ThirdFeign thirdFeign;
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderVehicleCrosstownBiz orderVehicleCrosstownBiz;
@Autowired
OrderViolationBiz orderViolationBiz;
/**
* 添加正常记录
*/
@Transactional
public void saveNormalRecord(DepositRefundRecord depositRefundRecord) {
depositRefundRecord.setStatus(DepositRefundStatus.INITIATEREFUND.getCode());
depositRefundRecord.setIscomplete(true);
......@@ -25,6 +50,7 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
depositRefundRecord.setIscomplete(false);
insertSelectiveRe(depositRefundRecord);
depositRefundRecord.setStatus(DepositRefundStatus.VIOLATIONARRIVAL.getCode());
depositRefundRecord.setRestAmount(getAmount());
insertSelectiveRe(depositRefundRecord);
}
......@@ -32,6 +58,7 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
* 添加定损记录
* @param depositRefundRecord
*/
@Transactional
public void saveFixLossRecord(DepositRefundRecord depositRefundRecord) {
depositRefundRecord.setStatus(DepositRefundStatus.FIXLOSS.getCode());
depositRefundRecord.setIscomplete(true);
......@@ -42,6 +69,7 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
depositRefundRecord.setStatus(DepositRefundStatus.FIXLOSSREFUNDARRIVAL.getCode());
insertSelectiveRe(depositRefundRecord);
depositRefundRecord.setStatus(DepositRefundStatus.VIOLATIONARRIVAL.getCode());
depositRefundRecord.setRestAmount(getAmount());
insertSelectiveRe(depositRefundRecord);
}
......@@ -52,4 +80,74 @@ public class OrderDepositRefundRecordBiz extends BaseBiz<DepositRefundRecordMapp
return mapper.findByCrossIdAndStatus(map);
}
public List<DepositRefundRecord> selectByCrossId(Integer cross) {
List<DepositRefundRecord> list = mapper.selectByCrossId(cross);
for(DepositRefundRecord depositRefundRecord : list) {
if(depositRefundRecord.getIscomplete() == true && depositRefundRecord.getStatus() == DepositRefundStatus.VIOLATIONARRIVAL.getCode()) {//查询违章记录
OrderVehicleCrosstown orderVehicleCrosstown = orderVehicleCrosstownBiz.selectById(depositRefundRecord.getCrosstownId());
if(orderVehicleCrosstown != null) {
BaseOrder baseOrder = baseOrderBiz.selectById(orderVehicleCrosstown.getOrderId());
if(baseOrder != null) {
OrderViolation orderViolation = orderViolationBiz.getOneByDetailId(baseOrder.getDetailId());
depositRefundRecord.setOrderViolation(orderViolation);
}
}
}
if(depositRefundRecord.getStatus() == DepositRefundStatus.VIOLATIONARRIVAL.getCode()) {
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Integer rentDepositAutoRefundTime = new Integer(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.RENT_DEPOSIT_AUTO_REFUND_TIME).getDetail());
depositRefundRecord.setRentDepositAutoRefundTime(depositRefundRecord.getCrtTime() + (rentDepositAutoRefundTime == null?0:rentDepositAutoRefundTime*60*60*1000));
}
}
return list;
}
public void saveViolationDeposit(OrderViolation orderViolation) {
log.info("添加违章押金记录:orderViolation = {}", orderViolation.toString());
String logInfo = "";
OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(orderViolation.getDetailId());
if(orderRentVehicleDetail != null) {
OrderVehicleCrosstownDto orderVehicleCrosstown = new OrderVehicleCrosstownDto();
orderVehicleCrosstown.setOrderId(orderRentVehicleDetail.getOrderId());
orderVehicleCrosstown.setType(CrosstownTypeEnum.ARRIVE.getCode());
OrderVehicleCrosstownDto orderVehicleCrosstownDto = orderVehicleCrosstownBiz.getByOrderId(orderVehicleCrosstown);
if(orderVehicleCrosstownDto != null) {
insertDeposit(orderVehicleCrosstownDto, orderViolation, logInfo);
} else {
orderVehicleCrosstown.setType(CrosstownTypeEnum.FIXED_LOSS.getCode());
OrderVehicleCrosstownDto depositCross = orderVehicleCrosstownBiz.getByOrderId(orderVehicleCrosstown);
insertDeposit(depositCross, orderViolation, logInfo);
logInfo = "还车记录不存在";
}
} else {
logInfo = "订单详情不存在";
}
log.info("添加违章押金记录失败:" + logInfo);
}
public BigDecimal getAmount() {
//设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
return illegalReserve;
}
public void insertDeposit(OrderVehicleCrosstownDto orderVehicleCrosstownDto, OrderViolation orderViolation, String logInfo) {
DepositRefundRecord depositRefundRecord = findByCrossIdAndStatus(orderVehicleCrosstownDto.getId(), DepositRefundStatus.VIOLATIONARRIVAL.getCode());
if(depositRefundRecord != null) {
DepositRefundRecord newValue = new DepositRefundRecord();
BeanUtil.copyProperties(depositRefundRecord, newValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
newValue.setAmount(orderViolation.getPrice());
newValue.setRestAmount(depositRefundRecord.getTotalAmount().subtract(orderViolation.getPrice()));//减去违章金之后的押金
newValue.setIscomplete(true);
newValue.setId(null);
insertSelectiveRe(newValue);
depositRefundRecord.setIsshow(false);
updateSelectiveByIdRe(depositRefundRecord);
} else {
logInfo = "押金记录不存在";
}
}
}
package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
......@@ -196,10 +197,9 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
String refundTradeNo = null;
//0 小于 退款金额
if(BigDecimal.ZERO.compareTo(refundAmount) < 0) {
OrderRefundVo orv = new OrderRefundVo(){{
setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
setOrderNo(baseOrder.getNo());
}};
OrderRefundVo orv = new OrderRefundVo();
orv.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
orv.setOrderNo(baseOrder.getNo());
orv.setRefundDesc(refundDesc+ refundAmount.toString());
orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
refundTradeNo = thirdFeign.refund(orv).getData();
......@@ -209,13 +209,13 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType);
//更新订单的退款状态和退款时间
BaseOrder updateBaseOrder = new BaseOrder();
updateBaseOrder.setId(baseOrder.getId());
updateBaseOrder.setRefundStatus(refundStatus);
updateBaseOrder.setRefundTime(System.currentTimeMillis());
updateBaseOrder.setVersion(baseOrder.getVersion());
if(SYS_TRUE.equals(flag) && null != refundStatus) {
baseOrderBiz.updateSelectiveByIdReT(new BaseOrder(){{
setId(baseOrder.getId());
setRefundStatus(refundStatus);
setRefundTime(System.currentTimeMillis());
setVersion(baseOrder.getVersion());
}});
BeanUtil.copyProperties(baseOrderBiz.updateSelectiveByIdReT(updateBaseOrder), baseOrder);
}
}
......
......@@ -28,11 +28,11 @@ public class OrderUserLicenseBiz extends BaseBiz<OrderUserLicenseMapper, OrderUs
}
OrderUserLicense oldValue = mapper.selectByLicenseIdCard(orderUserLicense.getLicenseIdCard());
if(oldValue == null) {
mapper.insertSelective(orderUserLicense);
insertSelective(orderUserLicense);
return ObjectRestResponse.succ(mapper.selectByLicenseIdCard(orderUserLicense.getLicenseIdCard()));
}
BeanUtil.copyProperties(orderUserLicense, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
mapper.updateByPrimaryKeySelective(oldValue);
updateSelectiveByIdRe(oldValue);
return ObjectRestResponse.succ(mapper.selectByLicenseIdCard(oldValue.getLicenseIdCard()));
}
......
......@@ -7,7 +7,6 @@ import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderViolation;
import com.xxfc.platform.order.mapper.OrderRentVehicleDetailMapper;
import com.xxfc.platform.order.mapper.OrderViolationMapper;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.RedisKey;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
......@@ -24,14 +23,15 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import tk.mybatis.mapper.common.Mapper;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**订单违章记录biz
/**
* 订单违章记录biz
*
* @author Administrator
*/
@Service
......@@ -41,14 +41,16 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
private OrderRentVehicleDetailMapper detailMapper;
@Value("order.violation.upload")
private String ovUpload;
private String ovUpload;
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
@Autowired
private RedisTemplate redisTemplate;
/**
* 保存违章记录
*
* @param orderViolation
*/
@Transactional(rollbackFor = Exception.class)
......@@ -59,10 +61,10 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
Map<String, Object> status = mapper.getOrderAndVehicleStatus(orderViolation.getDetailId());
Integer orderStatus = (Integer) status.get("status");
Integer refundStatus = (Integer) status.get("refundStatus");
if (orderStatus>=6||(refundStatus<=2&&refundStatus!=1)) {
mapper.insertSelective(orderViolation);
if (orderStatus >= 6 || (refundStatus <= 2 && refundStatus != 1)) {
insertSelective(orderViolation);
detailMapper.updateByPrimaryKeySelective(orderRentVehicleDetail);
}else {
} else {
throw new BaseException("The operation cannot be changed at this time");
}
......@@ -70,6 +72,7 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
/**
* 修改违章记录
*
* @param orderViolation
*/
@Transactional(rollbackFor = Exception.class)
......@@ -77,9 +80,9 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
Map<String, Object> status = mapper.getOrderAndVehicleStatus(orderViolation.getDetailId());
Integer orderStatus = (Integer) status.get("status");
Integer refundStatus = (Integer) status.get("refundStatus");
if (orderStatus>=6||(refundStatus<=2&&refundStatus!=1)) {
mapper.updateByPrimaryKeySelective(orderViolation);
}else {
if (orderStatus >= 6 || (refundStatus <= 2 && refundStatus != 1)) {
updateSelectiveByIdRe(orderViolation);
} else {
throw new BaseException("The operation cannot be changed at this time");
}
......@@ -87,14 +90,14 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
public ObjectRestResponse uploadViolation(MultipartFile file) throws IOException {
DateTime now = DateTime.now();
String dirPathToday = File.separator + now.toString(DEFAULT_DATE_TIME_FORMATTER);
String dirPathToday = File.separator + now.toString(DEFAULT_DATE_TIME_FORMATTER);
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX + now.toString(DEFAULT_DATE_TIME_FORMATTER);
Long no = redisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1L)){
redisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
if (no.equals(1L)) {
redisTemplate.expire(redisNoKey, 1, TimeUnit.DAYS);
}
String fileName = file.getOriginalFilename();
String realFileRelPath = dirPathToday + File.separator+no+fileName.substring(fileName.lastIndexOf("."));
String realFileRelPath = dirPathToday + File.separator + no + fileName.substring(fileName.lastIndexOf("."));
String filePath = ovUpload + realFileRelPath;
......@@ -105,18 +108,26 @@ public class OrderViolationBiz extends BaseBiz<OrderViolationMapper, OrderViolat
/**
* 下载行驶证图片
*
* @param realFileRelPath
* @return
* @throws Exception
*/
public ResponseEntity<byte[]> downloadViolation(String realFileRelPath) throws Exception{
public ResponseEntity<byte[]> downloadViolation(String realFileRelPath) throws Exception {
String filePath = ovUpload + realFileRelPath;
File file = new File(filePath);//新建一个文件
HttpHeaders headers = new HttpHeaders();//http头信息
String downloadFileName = new String(file.getName());//设置编码
headers.setContentDispositionFormData("attachment", downloadFileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
/**
* 根据订单详情查询违章记录
*/
public OrderViolation getOneByDetailId(Integer detailId) {
return mapper.getOneByDetailId(detailId);
}
}
......@@ -44,7 +44,7 @@ public class FeignHeadConfiguration {
log.debug("添加自定义请求头key:" + name + ",value:" + value);
requestTemplate.header(name, value);
} else {
log.debug("FeignHeadConfiguration", "非自定义请求头key:" + name + ",value:" + value + "不需要添加!");
//log.debug("FeignHeadConfiguration", "非自定义请求头key:" + name + ",value:" + value + "不需要添加!");
}
}
} else {
......
......@@ -57,7 +57,8 @@ public class WebConfiguration implements WebMvcConfigurer {
"/baseOrder/**",
"/orderTour/**",
"/orderMember/**",
"/orderRefund/**"
"/orderRefund/**",
"/orderVehicle/**"
};
Collections.addAll(list, urls);
return list;
......
package com.xxfc.platform.order.jobhandler;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.entity.DailyOrderStatistics;
import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.biz.DailyVehicleOrderStatisticsBiz;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
......@@ -14,22 +13,23 @@ import org.springframework.stereotype.Component;
/**
* 每天2定时统计前一天的数据
*/
@JobHandler(value = "baseOrderStatistics")
@JobHandler(value = "baseOrderStatisticsHandler")
@Component
@Slf4j
public class BaseOrderStatisticsJobHandler extends IJobHandler {
@Autowired
private BaseOrderBiz baseOrderBiz;
private DailyVehicleOrderStatisticsBiz statisticsBiz;
@Override
public ReturnT<String> execute(String s) throws Exception {
try {
baseOrderBiz.getTotalOrder();
ReturnT returnT = new ReturnT(){{
setCode(100);
setMsg("成功");
}};
XxlJobLogger.log("-----定时器进入---baseOrderStatisticsHandler---");
// log.info("-----定时器进入---baseOrderStatisticsHandler---");
statisticsBiz.getTotalOrder();
ReturnT returnT = new ReturnT();
returnT.setCode(100);
returnT.setMsg("成功");
return returnT;
} catch (Exception e) {
XxlJobLogger.log(e);
......
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.DailyOrderStatistics;
import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import tk.mybatis.mapper.common.Mapper;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
......@@ -28,5 +28,4 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> {
public OrderPageVO getOrderDetail(String no);
DailyOrderStatistics getTotalOrder();
}
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.DailyVehicleOrderStatistics;
import tk.mybatis.mapper.common.Mapper;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 每日统计数据
* @author Administrator
*/
public interface DailyVehicleOrderStatisticsMapper extends Mapper<DailyVehicleOrderStatistics> {
Map<String, BigDecimal> getGmvAndMarginTotal();
List<String> getCompensationAndPostpone();
BigDecimal getPenalSum();
BigDecimal getRefundSecurityDeposit();
BigDecimal getViolationMoney();
}
......@@ -3,8 +3,10 @@ package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.DepositRefundRecord;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface DepositRefundRecordMapper extends Mapper<DepositRefundRecord> {
DepositRefundRecord findByCrossIdAndStatus(Map<String, Object> map);
List<DepositRefundRecord> selectByCrossId(Integer crossId);
}
\ No newline at end of file
......@@ -5,9 +5,10 @@ import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
public interface OrderVehicaleCrosstownMapper extends Mapper<OrderVehicleCrosstown> {
List<OrderVehicleCrosstownDto> selectByOrderId(OrderVehicleCrosstownDto orderVehicleCrosstownDto);
OrderVehicleCrosstownDto selectByOrderNo(Map<String, Object> map);
}
\ No newline at end of file
......@@ -12,4 +12,6 @@ import java.util.Map;
public interface OrderViolationMapper extends Mapper<OrderViolation> {
Map<String,Object> getOrderAndVehicleStatus(@Param("vId") Integer detailId);
OrderViolation getOneByDetailId(Integer detailId);
}
......@@ -61,6 +61,7 @@ public class OrderRentVehicleController extends CommonBaseController {
bo.setAppUserDTO(userFeign.userDetailByToken(BaseContextHandler.getToken()).getData());
bo.setTickerNo(StrUtil.isNotBlank(vo.getTickerNos())?
StrUtil.splitTrim(vo.getTickerNos(), ","):null);
bo.setAccompanyItems(vo.getAccompanyItems());
orderRentVehicleService.createOrder(bo);
return ObjectRestResponse.succ(bo.getOrder());
}
......
......@@ -10,7 +10,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.List;
......@@ -32,7 +31,6 @@ public class OrderVehicleCrosstownController {
@PostMapping(value = "/add")
@ApiOperation(value = "添加交还车记录")
@Transactional
public ObjectRestResponse<OrderVehicleCrosstownDto> add(@RequestBody OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
return orderVehicleCrosstownBiz.add(orderVehicleCrosstownDto);
......@@ -52,4 +50,13 @@ public class OrderVehicleCrosstownController {
}
return ObjectRestResponse.succ(orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto));
}
@GetMapping(value = "/getByOrderNo")
@ApiOperation(value = "根据订单号返回交车和押金记录")
public ObjectRestResponse getByOrderNo(String no) {
if (no == null) {
return ObjectRestResponse.createFailedResult(500, "参数orderId为空");
}
return ObjectRestResponse.succ(orderVehicleCrosstownBiz.selectByOrderNo(no));
}
}
......@@ -3,12 +3,15 @@ package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.OrderDepositRefundRecordBiz;
import com.xxfc.platform.order.biz.OrderViolationBiz;
import com.xxfc.platform.order.entity.OrderViolation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Assert;
......@@ -19,7 +22,6 @@ import tk.mybatis.mapper.weekend.WeekendSqls;
import javax.servlet.http.HttpServletRequest;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
/**
......@@ -29,25 +31,21 @@ import java.util.List;
*/
@RestController
@RequestMapping("orderViolation")
public class OrderViolationController extends BaseController<OrderViolationBiz, OrderViolation> {
@Slf4j
public class OrderViolationController extends BaseController<OrderViolationBiz, OrderViolation> implements UserRestInterface {
@Autowired
private UserFeign userFeign;
@Autowired
OrderDepositRefundRecordBiz orderDepositRefundRecordBiz;
@Override
public UserFeign getUserFeign() {
return userFeign;
}
private Long MAX_DRIVING_LICENSE_SIZE = 1024 * 1024 * 50L;
private final String FILE_TYPE="JPG";
/**
* 获取操作用户信息
*/
private UserDTO getUserDTO() {
ObjectRestResponse<UserDTO> orrUserDTO = userFeign.userinfoByToken(request.getHeader("Authorization"));
if (orrUserDTO == null || orrUserDTO.getData() == null || orrUserDTO.getData().getId() == null) {
throw new BaseException("This user does not exist");
}
UserDTO userDTOD = orrUserDTO.getData();
return userDTOD;
}
/**
* 保存违章记录
......@@ -58,9 +56,8 @@ public class OrderViolationController extends BaseController<OrderViolationBiz,
*/
@PostMapping("/saveOrderViolation")
public ObjectRestResponse saveOrderViolation(@RequestBody OrderViolation orderViolation, HttpServletRequest request) {
UserDTO userDTOD = getUserDTO();
log.info("保存违章记录:orderViolation = {}", orderViolation.toString());
UserDTO userDTOD = getAdminUserInfo();
if (orderViolation.getId()==null) {
orderViolation.setIsDel(0);
orderViolation.setCrtHost(request.getRemoteHost());
......
......@@ -3,6 +3,7 @@ package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
......@@ -23,16 +24,19 @@ import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.entity.OrderTemplate;
import com.xxfc.platform.order.pojo.OrderAccompanyDTO;
import com.xxfc.platform.order.pojo.order.RentVehicleBO;
import com.xxfc.platform.order.pojo.price.RentVehiclePriceVO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import com.xxfc.platform.vehicle.pojo.RentVehicleBookDTO;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -40,15 +44,13 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.admin.constant.enumerate.MemberEnum.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
import static com.xxfc.platform.order.contant.enumerate.ItemTypeEnum.*;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service
......@@ -154,9 +156,30 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
activityFeign.use(bo.getAppUserDTO().getUserid(), bo.getTickerNo(), bo.getOrder().getNo(), channel, amount, ActivityFeign.TYPE_USE);
}
//插入随声物品item
Map<String, AccompanyingItemVo> accompanyingItemMap = vehicleFeign.listAccompanyingItem().getData()
.parallelStream().collect(Collectors.toMap(en -> en.getId().toString(), en -> en));
if(null == bo.getAccompanyItems()) {
bo.setAccompanyItems(new ArrayList<OrderAccompanyDTO>());
}
for(OrderAccompanyDTO oad : bo.getAccompanyItems()) {
AccompanyingItemVo aiv = accompanyingItemMap.get(oad.getId());
oad.setName(aiv.getName());
oad.setUnit(aiv.getUnit());
oad.setUnitPrice(aiv.getPrice());
oad.setNum(aiv.getNumber());
oad.setTotalAmount(oad.getUnitPrice().multiply(new BigDecimal(oad.getNum().toString())));
}
//获取可用车辆
acquireVehicle(bo);
OrderItem accompanyItem = orderItemBiz.initOrderItem(BigDecimal.ZERO, 1, "随车物品", null, ACCOMPANY);
accompanyItem.setRealAmount(BigDecimal.ZERO);
accompanyItem.setDetail(JSONUtil.toJsonStr(bo.getAccompanyItems()));
accompanyItem.setOrderId(bo.getOrder().getId());
orderItemBiz.insertSelective(accompanyItem);
super.handleDetail(bo);
//发送定时取消订单(数据字典设置--5分钟)
......@@ -178,7 +201,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
BigDecimal vehicleAmount = BigDecimal.ZERO;
BigDecimal driverAmount = BigDecimal.ZERO;
BigDecimal damageSafeAmount = BigDecimal.ZERO;
BigDecimal modelAmount = BigDecimal.ZERO;
// BigDecimal modelAmount = BigDecimal.ZERO;
BigDecimal couponAmount = BigDecimal.ZERO;
Integer vehicleDayNum = 0;
Integer freeDayNum = 0;
......@@ -243,8 +266,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
}
detail.setRebate(handleDiscountDTO.getRebate());
vehicleOrderItem.setUnitPrice(handleDiscountDTO.getModelAmount());
}else {
modelAmount = vehicleModel.getPrice();
}
//如果有使用会员权益或者优惠券,则设置订单已优惠
......@@ -300,7 +321,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount);
rvp.setDamageSafeAmount(damageSafeAmount);
rvp.setModelAmount(modelAmount);
rvp.setModelAmount(vehicleOrderItem.getUnitPrice());
rvp.setVehicleDayNum(vehicleDayNum);
//设置收费明细
......@@ -382,6 +403,9 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rentVehicleBookDTO.setUserName(BaseContextHandler.getName());
rentVehicleBookDTO.setLiftCompany(detail.getStartCompanyId());
rentVehicleBookDTO.setLiftAddr(detail.getStartAddr());
if(null != detail.getAccompanyItems()) {
rentVehicleBookDTO.setSelectedAccItem(detail.getAccompanyItems().parallelStream().collect(Collectors.toMap(OrderAccompanyDTO::getId, OrderAccompanyDTO::getNum)));
}
ObjectRestResponse<VehicleBookRecord> orr = vehicleFeign.rentApplyVehicle(rentVehicleBookDTO);
if(!CommonConstants.SYS_JSON_TRUE.equals(orr.getStatus())) {
throw new BaseException(orr.getMessage(), orr.getStatus());
......
......@@ -172,7 +172,11 @@
<if test="userId != null">
and b.user_id = #{userId}
</if>
<if test="status != null">
<if test="status != null and status == -1">
AND b.status in (6,-1)
and b.refund_status in (0,2)
</if>
<if test="status != null and status != -1">
and b.status = #{status}
</if>
<if test="no != null">
......@@ -181,13 +185,19 @@
<if test="startTime != null and status == 4">
and r.start_time between #{startTime} and #{endTime}
</if>
<if test="startTime != null and status == 5">
and r.start_time between #{startTime} and #{endTime}
<if test="startTime != null and (status == 5 || status == 6 || status == -1)">
and r.end_time between #{startTime} and #{endTime}
</if>
<if test="startCompanyId != null">
and r.start_company_id = #{startCompanyId}
</if>
order by b.crt_time desc
<if test="status == 4">
order by r.start_time
</if>
<if test="status == 5 || status == -1">
order by r.end_time
</if>
</select>
<select id="getTourList" parameterType="Map" resultMap="orderPageMap">
......@@ -219,33 +229,5 @@
where no = #{no}
</select>
<select id="getTotalOrder" resultType="com.xxfc.platform.order.entity.DailyOrderStatistics">
select
date_format(pay_time,'%Y-%c-%d') as oneDay,
sum(1) as totalOrders,
sum(pay_time)as actualTotalIncome
from
base_order
where
date(pay_time)=date(now())-1
group by
date_format(pay_time,'%d')
</select>
<!-- <select id="getTotalOrder" resultType="com.xxfc.platform.order.entity.DailyOrderStatistics">-->
<!-- select-->
<!-- date_format(refund_time,'%Y-%c-%d') as oneDay,-->
<!-- sum(1) as totalOrders,-->
<!-- sum(refund_time)as actualTotalIncome-->
<!-- from-->
<!-- base_order-->
<!-- where-->
<!-- date(refund_time)=date(now())-1-->
<!-- group by-->
<!-- date_format(refund_time,'%d')-->
<!-- </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.order.mapper.DailyVehicleOrderStatisticsMapper">
<!-- 获取每日租车订单成交金和押金总额-->
<select id="getGmvAndMarginTotal" resultType="HashMap">
select
COALESCE(date_format(FROM_UNIXTIME(b.pay_time/1000),'%Y-%c-%d'),date(DATE_SUB(now(),interval 1 day))) as oneDay,
IFNULL(SUM(b.real_amount-v.deposit),0) as gmv,
IFNULL(SUM(v.deposit),0) as marginTotal
from
base_order b
left join
order_rent_vehicle_detail v
on
b.id=v.order_id
where
b.type=1
AND
date(FROM_UNIXTIME(b.pay_time/1000))=date(DATE_SUB(now(),interval 1 day))
</select>
<!-- 退还押金总额-->
<select id="getRefundSecurityDeposit" resultType="BigDecimal">
SELECT
IFNULL(SUM(r.refund_amount),0) as refundSecurityDeposit
FROM
base_order o
left join
order_refund r
on
o.id=r.order_id
WHERE
o.type=1
and
r.refund_status=1
and
r.refund_type >1
and
date(FROM_UNIXTIME(r.refund_time/1000))=date(DATE_SUB(now(),interval 1 day))
</select>
<!-- 取消订单扣除款项总和-->
<select id="getPenalSum" resultType="BigDecimal">
SELECT
IFNULL(SUM(r.deduct_amount),0) as penalSum
FROM
base_order o
left join
order_refund r
on
o.id=r.order_id
WHERE
o.type=1
and
r.refund_status=1
and
r.refund_type =1
and
date(FROM_UNIXTIME(r.refund_time/1000))=date(DATE_SUB(now(),interval 1 day))
</select>
<!-- 获取赔偿和延期JSON字符串-->
<select id="getCompensationAndPostpone" resultType="List">
SELECT
ded_detail
FROM
order_refund r
LEFT JOIN
order_vehicle_crosstown c
on
r.order_id = c.order_id
WHERE
r.refund_status=1
and
r.refund_type = 3
and
c.type=2
and
date(FROM_UNIXTIME(refund_time/1000))=date(DATE_SUB(now(),interval 1 day))
</select>
<select id="getViolationMoney" resultType="BigDecimal">
SELECT
v.price
FROM
order_refund r
left JOIN
base_order o
on
o.id=r.order_id
LEFT JOIN
order_rent_vehicle_detail d
on
o.id = d.order_id
left join
order_violation v
on
d.id = v.detail_id
WHERE
r.refund_status=1
and
r.refund_type = 4
and
date(FROM_UNIXTIME(r.refund_time/1000))=date(DATE_SUB(now(),interval 1 day))
</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.order.mapper.DepositRefundRecordMapper" >
<mapper namespace="com.xxfc.platform.order.mapper.DepositRefundRecordMapper">
<select id="findByCrossIdAndStatus" resultType="com.xxfc.platform.order.entity.DepositRefundRecord" parameterType="java.util.Map">
<select id="findByCrossIdAndStatus" resultType="com.xxfc.platform.order.entity.DepositRefundRecord"
parameterType="java.util.Map">
select * from deposit_refund_record
where status = #{status} and crosstown_id = #{crossId} and isshow = 1
</select>
<select id="selectByCrossId" resultType="com.xxfc.platform.order.entity.DepositRefundRecord"
parameterType="java.lang.Integer">
select * from deposit_refund_record
where crosstown_id = #{crossId} and isshow = 1
order by status
</select>
</mapper>
\ No newline at end of file
......@@ -27,7 +27,12 @@
<result column="rest_deposit" jdbcType="INTEGER" property="restDeposit"/>
<result column="user_license_id" jdbcType="VARCHAR" property="userLicenseId"/>
</resultMap>
<resultMap id="orderMap" type="com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto">
<result column="id" javaType="java.lang.Integer" property="id"/>
<association column="id" property="depositRefundRecord"
select="com.xxfc.platform.order.mapper.DepositRefundRecordMapper.selectByCrossId"
javaType="com.xxfc.platform.order.entity.DepositRefundRecord"/>
</resultMap>
<select id="selectByOrderId" parameterType="com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto" resultType="com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto">
select *
from order_vehicle_crosstown
......@@ -46,4 +51,10 @@
</if>
</where>
</select>
<select id="selectByOrderNo" parameterType="java.util.Map" resultType="com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto">
select *
from order_vehicle_crosstown
where order_no = #{no} and type = #{type}
</select>
</mapper>
\ No newline at end of file
......@@ -14,4 +14,9 @@
where
v.id=#{vId}
</select>
<select id="getOneByDetailId" resultType="com.xxfc.platform.order.entity.OrderViolation" parameterType="java.lang.Integer">
select * from order_violation
where detail_id = #{detailId}
</select>
</mapper>
\ No newline at end of file
......@@ -192,7 +192,6 @@ public class TourGoodBiz extends BaseBiz<TourGoodMapper, TourGood> {
List<GoodSpePriceDTO> priceDTOList=dto.getPriceDTOS();
List<Integer> prices=new ArrayList<>();
if(siteDTOList.size()>0){
List<Integer> priceIds=new ArrayList<>();
for (GoodSpePriceDTO priceDTO:priceDTOList){
Integer priceId=priceDTO.getId();
TourGoodSpePrice spePrice=new TourGoodSpePrice();
......@@ -228,12 +227,11 @@ public class TourGoodBiz extends BaseBiz<TourGoodMapper, TourGood> {
priceId=spePrice.getId();
}else {
speBiz.updateSelectiveById(spePrice);
priceIds.add(priceId);
}
prices.add(priceId);
}
if(priceIds.size()>0){
speBiz.delGoodSpe(goodId,priceIds);
if(prices.size()>0){
speBiz.delGoodSpe(goodId,prices);
}
}
if(sites.size()>0){
......
......@@ -32,6 +32,39 @@ public class SmsTemplateDTO {
//取消订单
public static final int CANCEL = 8;
//租车(通用)
public static final int PAY_A = 10;
//租车(使用会员权益)
public static final int PAY_B = 11;
//租车内部通知(客服)
public static final int PAY_C = 12;
//租车内部通知(出车人)
public static final int PAY_D = 13;
//租车内部通知(收车人)
public static final int PAY_E = 14;
//旅游(通用)
public static final int PAY_F = 15;
//会员购买(通用)
public static final int PAY_G = 16;
//取消租车(通用)
public static final int CANCEL_A = 17;
//取消租车(使用会员权益)
public static final int CANCEL_B = 18;
//取消租车(通用扣违约金)
public static final int CANCEL_C = 19;
//取消租车(会员权益&扣违)
public static final int CANCEL_D = 20;
//取消租车(出车人)
public static final int CANCEL_E = 21;
//租车押金退还
public static final int FINISH_A = 22;
//违章押金退还
public static final int FINISH_B = 23;
//类型:1-租车订单通知(普通用户),2-租车订单短信(会员权益),3-旅游订单短信,4-加入会员通知
private Integer type;
//手机号码(多个短信逗号隔开)
......
......@@ -23,10 +23,45 @@ public class CCPRestSmsBiz{
public static final String TEMPLATE_ID_DIFFERENT_TAAKE_CAR = "458621";
// 租/还车公司不同(发给还车公司负责人,订单出车后发))(相同不发)7
public static final String TEMPLATE_ID_ALSO_CAR = "458620";
//取消订单8
//取消订单9
public static final String TEMPLATE_ID_CANCEL = "458627";
//租车(通用)10
public static final String TEMPLATE_ID_PAY_A = "460759";
//租车(使用会员权益)11
public static final String TEMPLATE_ID_PAY_B = "460760";
//租车内部通知(客服)12
public static final String TEMPLATE_ID_PAY_C = "460763";
//租车内部通知(出车人)13
public static final String TEMPLATE_ID_PAY_D = "460762";
//租车内部通知(收车人)14
public static final String TEMPLATE_ID_PAY_E = "460764";
//旅游(通用)15
public static final String TEMPLATE_ID_PAY_F = "460765";
//会员购买(通用)16
public static final String TEMPLATE_ID_PAY_G = "460766";
//取消租车(通用)17
public static final String TEMPLATE_ID_CANCEL_A= "460767";
//取消租车(使用会员权益)18
public static final String TEMPLATE_ID_CANCEL_B = "460768";
//取消租车(通用扣违约金)19
public static final String TEMPLATE_ID_CANCEL_C = "460769";
//取消租车(会员权益&扣违 20
public static final String TEMPLATE_ID_CANCEL_D = "460770";
//取消租车(出车人)21
public static final String TEMPLATE_ID_CANCEL_E = "460771";
//租车押金退还 22
public static final String TEMPLATE_ID_FINISH_A = "460772";
//违章押金退还 23
public static final String TEMPLATE_ID_FINISH_B = "460773";
//发送模板消息
public void sendTemplateSMS(Integer type,String phoneNumbers,String[]params){
switch (type){
......@@ -54,6 +89,49 @@ public class CCPRestSmsBiz{
case 8 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL);
break;
case 10 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_A);
break;
case 11:
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_B);
break;
case 12 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_C);
break;
case 13 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_D);
break;
case 14 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_E);
break;
case 15 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_F);
break;
case 16 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_PAY_G);
break;
case 17 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL_A);
break;
case 18 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL_B);
break;
case 19 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL_C);
break;
case 20 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL_D);
break;
case 21 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_CANCEL_E);
break;
case 22 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_FINISH_A);
break;
case 23 :
CCPRestSmsUtils.sendTemplateSMS(phoneNumbers,params,TEMPLATE_ID_FINISH_B);
break;
}
}
......
......@@ -16,15 +16,13 @@ import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -208,8 +206,8 @@ public class TrafficViolationsService {
* 定时修改车牌类型
* @throws SQLException
*/
@Scheduled(cron = "0 0 0 0/7 * ?")
public void updateLicensePlateType() throws SQLException {
// @Scheduled(cron = "0 0 0 0/7 * ?")
private void updateLicensePlateType() throws SQLException {
List<LicensePlateType> licensePlateTypes = licensePlateTypeBiz.selectListAll();
licensePlateTypeBiz.updateLicensePlateType(licensePlateTypes);
}
......
......@@ -85,6 +85,8 @@ public class RedisKey {
// 随车物品相关key
public static final String ACCOMPANYING_ITEM_CACHE_ALL ="cache:accompanyItem:all";
public static final String ACCOMPANYING_ITEM_CACHE_ALL_APP =ACCOMPANYING_ITEM_CACHE_ALL+ ":app";
/**
* 服务器上传文件序号
......
......@@ -5,6 +5,7 @@ import com.github.wxiaoqi.security.common.vo.GoodDataVO;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
......@@ -20,7 +21,7 @@ public interface VehicleFeign {
@GetMapping(value = "/vehicleModel/{id}")
public ObjectRestResponse<VehicleModel> get(@PathVariable(value = "id") int id);
@GetMapping(value = "/vehicleInfo/{id}")
@GetMapping(value = "/vehicleInfo/app/unauth/{id}")
public ObjectRestResponse<Vehicle> get(@PathVariable(value = "id") String id);
@RequestMapping(value = "/vehicleInfo/findById", method = RequestMethod.GET)
......@@ -98,7 +99,7 @@ public interface VehicleFeign {
* @return
*/
@PostMapping("/sysRegion/getSysRegion")
ObjectRestResponse<List<SysRegion>> getSysRegion(Set<Integer> idSet);
ObjectRestResponse<List<SysRegion>> getSysRegion(@RequestBody Set<Integer> idSet);
/**
* 获取公司所在的城市
......@@ -109,4 +110,8 @@ public interface VehicleFeign {
@GetMapping("/city/corporationCity")
ObjectRestResponse<Set<Integer>> corporationCity( @RequestParam(value = "zoneList") String zoneList,
@RequestParam(value = "companyList") String companyList);
@GetMapping("/accompanyingItem/app/unauth/items")
public RestResponse<List<AccompanyingItemVo>> listAccompanyingItem();
}
......@@ -67,7 +67,7 @@ public class BookVehicleVO {
* 随车物品id以及数量 List<Map<id,数量>>
*/
@ApiModelProperty("随车物品id以及数量 List<Map<id,数量>>")
Map<Integer,Integer> selectedAccItem;
Map<Integer,Integer> selectedAccItem;
/**
* 提车阶段里程数
......
......@@ -4,6 +4,9 @@ import com.github.wxiaoqi.security.common.vo.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class RentVehicleBookDTO extends PageParam {
//根据车型、时间、距离,门店,预定车辆
......@@ -47,4 +50,10 @@ public class RentVehicleBookDTO extends PageParam {
@ApiModelProperty("订单号")
private String orderNo;
/**
* 随车物品id以及数量 List<Map<id,数量>>
*/
@ApiModelProperty("随车物品id以及数量 List<Map<id,数量>>")
Map<Integer,Integer> selectedAccItem;
}
\ No newline at end of file
package com.xxfc.platform.vehicle.pojo;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xxfc.platform.vehicle.entity.VehicleDepartureLog;
import lombok.Data;
@Data
......@@ -40,4 +43,10 @@ public class VehicleDepartureLogVo {
String arrivalRemark;
public VehicleDepartureLog getVehicleDeparture(VehicleDepartureLogVo vehicleDepartureLogVo) {
VehicleDepartureLog departureLog = new VehicleDepartureLog();
BeanUtil.copyProperties(vehicleDepartureLogVo, departureLog, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
return departureLog;
}
}
......@@ -2,23 +2,30 @@ package com.xxfc.platform.vehicle.biz;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.RedisKey;
import com.xxfc.platform.vehicle.entity.AccompanyingItem;
import com.xxfc.platform.vehicle.mapper.AccompanyingItemMapper;
import com.xxfc.platform.vehicle.pojo.AddOrUpdateAccompanyingItem;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.pojo.QueryAccompanyItemVo;
import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
......@@ -29,7 +36,13 @@ import java.util.stream.Collectors;
@Slf4j
public class AccompanyingItemBiz extends BaseBiz<AccompanyingItemMapper, AccompanyingItem> {
@Autowired
private RedisTemplate redisTemplate;
@Resource(name = "redisTemplate")
HashOperations itemHashOperations;
private static final String ACCOMPANY_ITEM="accompany:item";
@Cache(key = RedisKey.ACCOMPANYING_ITEM_CACHE_ALL)
public List<AccompanyingItem> getAll(){
......@@ -75,6 +88,7 @@ public class AccompanyingItemBiz extends BaseBiz<AccompanyingItemMapper, Accompa
accompanyingItem.setId(null);
BeanUtils.copyProperties(accompanyingItem,addOrUpdateAccompanyingItem);
Integer effected = mapper.insertSelective(accompanyingItem);
redisTemplate.delete(ACCOMPANY_ITEM);
return RestResponse.suc();
}
......@@ -83,21 +97,40 @@ public class AccompanyingItemBiz extends BaseBiz<AccompanyingItemMapper, Accompa
AccompanyingItem accompanyingItem = new AccompanyingItem();
BeanUtils.copyProperties(accompanyingItem,addOrUpdateAccompanyingItem);
Integer effected = mapper.updateByPrimaryKeySelective(accompanyingItem);
redisTemplate.delete(ACCOMPANY_ITEM);
return RestResponse.suc();
}
@CacheClear(key= RedisKey.ACCOMPANYING_ITEM_CACHE_ALL)
public RestResponse<Integer> del(Integer id){
Integer effected = mapper.deleteByPrimaryKey(id);
redisTemplate.delete(ACCOMPANY_ITEM);
return RestResponse.suc();
}
public List<AccompanyingItemVo> listAllItem(){
public List<AccompanyingItemVo> listAllItem(List<Integer> types){
String typeKey = null;
if (CollectionUtils.isNotEmpty(types)){
typeKey = types.stream().sorted(Integer::compareTo).map(String::valueOf).reduce("",(x, y)-> x+":"+y);
String itemJson = (String) itemHashOperations.get(ACCOMPANY_ITEM,typeKey);
if (!StringUtils.isEmpty(itemJson)){
return JSON.parseObject(itemJson,new TypeReference<List<AccompanyingItemVo>>(){});
}
}
if (CollectionUtils.isEmpty(types)){
typeKey= "all";
String itemJson = (String) itemHashOperations.get(ACCOMPANY_ITEM, typeKey);
if (!StringUtils.isEmpty(itemJson)){
return JSON.parseObject(itemJson,new TypeReference<List<AccompanyingItemVo>>(){});
}
}
List<AccompanyingItemVo> accompanyingItemVos = new ArrayList<>();
Example example = new Example(AccompanyingItem.class);
Example.Criteria criteria = example.createCriteria();
if (CollectionUtils.isNotEmpty(types)){
criteria.andIn("type",types);
}
criteria.andEqualTo("isDel",0);
List<AccompanyingItem> accompanyingItems = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(accompanyingItems)){
......@@ -109,7 +142,7 @@ public class AccompanyingItemBiz extends BaseBiz<AccompanyingItemMapper, Accompa
org.springframework.beans.BeanUtils.copyProperties(item, accompanyingItemVo);
return accompanyingItemVo;
}).sorted(Comparator.comparing(AccompanyingItemVo::getType).thenComparing(AccompanyingItemVo::getRank)).collect(Collectors.toList());
itemHashOperations.put(ACCOMPANY_ITEM,typeKey,JSON.toJSONString(accompanyingItemVoList));
return accompanyingItemVoList;
}
......
package com.xxfc.platform.vehicle.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.constant.VehicleActiveType;
......@@ -8,10 +10,7 @@ import com.xxfc.platform.vehicle.constant.VehicleDepartureState;
import com.xxfc.platform.vehicle.constant.VehicleStatus;
import com.xxfc.platform.vehicle.entity.*;
import com.xxfc.platform.vehicle.mapper.*;
import com.xxfc.platform.vehicle.pojo.VehicleArrivalVo;
import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo;
import com.xxfc.platform.vehicle.pojo.VehicleUpkeepEndVo;
import com.xxfc.platform.vehicle.pojo.VehicleUpkeepVo;
import com.xxfc.platform.vehicle.pojo.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -85,17 +84,28 @@ public class VehicleActiveService {
if(departureVo.getBookRecordId() != null) {
updateBookRecordStatus(departureVo.getBookRecordId());
}
VehicleDepartureLogVo vehicleDepartureLogVo = vehicleDepartureLogMapper.selectByBookRecordId(departureVo.getBookRecordId());
if(vehicleDepartureLogVo != null) {
BeanUtil.copyProperties(departureVo, vehicleDepartureLogVo, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
VehicleDepartureLog departureLog = vehicleDepartureLogVo.getVehicleDeparture(vehicleDepartureLogVo);
departureLog.setDepartureTime(new Date());
departureLog.setUpdateTime(new Date());
departureLog.setState(VehicleDepartureState.DEPARTURE.getCode());
departureLog.setDepartureRemark(departureVo.getRemark());
vehicleDepartureLogMapper.updateByPrimaryKeySelective(departureLog);
} else {
// 出车记录
VehicleDepartureLog departureLog = new VehicleDepartureLog();
BeanUtils.copyProperties(departureVo, departureLog);
departureLog.setDepartureTime(new Date());
departureLog.setCreateTime(new Date());
departureLog.setMileageStart(departureVo.getMileage());
departureLog.setState(VehicleDepartureState.DEPARTURE.getCode());
departureLog.setBookRecordId(departureVo.getBookRecordId());
departureLog.setDepartureRemark(departureVo.getRemark());
vehicleDepartureLogMapper.insert(departureLog);
}
// 出车记录
VehicleDepartureLog departureLog = new VehicleDepartureLog();
BeanUtils.copyProperties(departureVo, departureLog);
departureLog.setDepartureTime(new Date());
departureLog.setCreateTime(new Date());
departureLog.setMileageStart(departureVo.getMileage());
departureLog.setState(VehicleDepartureState.DEPARTURE.getCode());
departureLog.setBookRecordId(departureVo.getBookRecordId());
departureLog.setDepartureRemark(departureLog.getDepartureRemark());
vehicleDepartureLogMapper.insert(departureLog);
// 车辆活动日志
VehicleActiveLog activeLog = new VehicleActiveLog();
......@@ -108,10 +118,6 @@ public class VehicleActiveService {
throw new BaseException(ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getDesc(),
ResCode.VEHICLE_BOOKED_RECORD_MILEAGE_CHANGED.getCode());
}
}
@Transactional
......@@ -158,19 +164,18 @@ public class VehicleActiveService {
throw new BaseException(ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getDesc(),
ResCode.VEHICLE_DEPARTURE_VEHICLE_UNDEPARTURE.getCode());
}
departureLog.setMileageEnd(arrivalVo.getMileage());
departureLog.setRecycleMan(arrivalVo.getRecycleMan());
departureLog.setRecycleManTel(arrivalVo.getRecycleManTel());
departureLog.setArrivalBranchCompanyId(arrivalVo.getArrivalBranchCompanyId());
departureLog.setUpdateTime(new Date());
departureLog.setArrivalTime(new Date());
departureLog.setState(VehicleDepartureState.END.getCode());
departureLog.setIllegalPic(arrivalVo.getIllegalPic());
departureLog.setIllegalAmount(arrivalVo.getIllegalAmount());
departureLog.setArrivalPic(arrivalVo.getArrivalPic());
departureLog.setArrivalRemark(arrivalVo.getRemark());
vehicleDepartureLogMapper.updateByPrimaryKeySelective(departureLog);
departureLog.setMileageEnd(arrivalVo.getMileage());
departureLog.setRecycleMan(arrivalVo.getRecycleMan());
departureLog.setRecycleManTel(arrivalVo.getRecycleManTel());
departureLog.setArrivalBranchCompanyId(arrivalVo.getArrivalBranchCompanyId());
departureLog.setUpdateTime(new Date());
departureLog.setArrivalTime(new Date());
departureLog.setState(VehicleDepartureState.END.getCode());
departureLog.setIllegalPic(arrivalVo.getIllegalPic());
departureLog.setIllegalAmount(arrivalVo.getIllegalAmount());
departureLog.setArrivalPic(arrivalVo.getArrivalPic());
departureLog.setArrivalRemark(arrivalVo.getRemark());
vehicleDepartureLogMapper.updateByPrimaryKeySelective(departureLog);
// 车辆活动日志
VehicleActiveLog activeLog = vehicleActiveLogMapper.selectLastByVehicleId(arrivalVo.getVehicleId());
if (activeLog == null) {
......
......@@ -16,6 +16,7 @@ import com.xxfc.platform.vehicle.pojo.vo.AccompanyingItemVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.List;
/**
......@@ -75,7 +76,13 @@ public class AccompanyingItemController extends BaseController<AccompanyingItemB
@GetMapping("/app/unauth/items")
public RestResponse<List<AccompanyingItemVo>> listAccompanyingItemVo(){
List<AccompanyingItemVo> accompanyingItemVos = baseBiz.listAllItem();
List<AccompanyingItemVo> accompanyingItemVos = baseBiz.listAllItem(Collections.EMPTY_LIST);
return RestResponse.codeAndData(RestResponse.SUC_CODE,accompanyingItemVos);
}
@GetMapping("/app/unauth/type_items")
public RestResponse<List<AccompanyingItemVo>> listAccompanyingItemVoByTypes(@RequestParam(value = "type",required = false) List<Integer> type){
List<AccompanyingItemVo> accompanyingItemVos = baseBiz.listAllItem(type);
return RestResponse.codeAndData(RestResponse.SUC_CODE,accompanyingItemVos);
}
}
......@@ -79,7 +79,7 @@ public class VehicleController extends BaseController<VehicleBiz> {
public static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@RequestMapping(value = "/app/unauth/{id}", method = RequestMethod.GET)
public RestResponse<Vehicle> get(@PathVariable String id) {
return RestResponse.data(baseBiz.get(id));
}
......
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