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;
}
......@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.dto.UserMemberDTO;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
......@@ -27,6 +28,7 @@ import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleUserLicense;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
......@@ -40,6 +42,7 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant.*;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
......@@ -47,15 +50,13 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TR
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
/**
*
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-15 21:30:33
*/
@Service
@Slf4j
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> {
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
......@@ -99,108 +100,178 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
@Autowired
ActivityFeign activityFeign;
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap){
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap) {
return mapper.pageByParm(paramMap);
}
public List<OrderListVo> listOrder(Map<String, Object> paramMap){
public List<OrderListVo> listOrder(Map<String, Object> paramMap) {
return mapper.listOrder(paramMap);
}
public List<OrderPageVO> getRentVehicle (Map<String, Object> paramMap) {
public List<OrderPageVO> getRentVehicle(Map<String, Object> paramMap) {
return mapper.getRentVehicle(paramMap);
}
public List<OrderPageVO> getTourList (Map<String, Object> paramMap) {
public List<OrderPageVO> getTourList(Map<String, Object> paramMap) {
return mapper.getTourList(paramMap);
}
/**
* 获取订单详情
*
* @param no
* @return
*/
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no) {
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no, UserDTO userDTO) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if(orderPageVo == null) {
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(3501, "订单不存在");
}
if(orderPageVo.getOrderRentVehicleDetail() != null) {
if(orderPageVo.getStatus() == 4) { //未交车
List<VehicleUserLicense> vehicleUserLicenses = Lists.newArrayList();
if(orderPageVo.getStatus() <= 3 && orderPageVo.getStatus() != 2 && orderPageVo.getStatus() != -1) {
return ObjectRestResponse.createFailedResult(3501, "订单不存在");
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
boolean flag = getTodayTime(orderPageVo.getOrderRentVehicleDetail().getStartTime());
if(!flag) {
return ObjectRestResponse.createFailedResult(3501, "今日不是交车日期");
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (!companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getStartCompanyId()) && !companyIds.contains(orderPageVo.getOrderRentVehicleDetail().getEndCompanyId())) {
return ObjectRestResponse.createFailedResult(2563, "您无权限查看此订单!");
}
if(userDTO.getCompanyId() == orderPageVo.getOrderRentVehicleDetail().getEndCompanyId()) {
orderPageVo.setUserCompanyStatus(true);
}
String myDriverIds = orderPageVo.getOrderRentVehicleDetail().getMyDriverIds();
if(StringUtils.isNotBlank(myDriverIds)) {
if(myDriverIds.contains(",")) {
String[] ids = myDriverIds.split(",");
try{
//目前暂定一个驾驶人,后期需要更改再此更改
RestResponse<VehicleUserLicense> restResponse = vehicleFeign.getOne(Integer.parseInt(ids[0]));
log.info(restResponse.getMessage());
if(restResponse.getData() != null) {
vehicleUserLicenses.add(restResponse.getData());
}
}catch (Exception e) {
e.printStackTrace();
}
} else {
try {
vehicleUserLicenses.add(vehicleFeign.getOne(Integer.parseInt(myDriverIds.trim())).getData());
}catch (Exception e){
e.printStackTrace();
}
}
}
orderPageVo.setVehicleUserLicenses(vehicleUserLicenses);
} else if(orderPageVo.getStatus() >= 5) {//出行中 已交车
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstowns = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if(orderVehicleCrosstowns != null && orderVehicleCrosstowns.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstowns.get(0).getUserLicenseId()).getData();
if(orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
orderVehicleCrosstownDto.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
if (orderPageVo.getStatus() == 4) { //未交车
boolean flag = getTodayTime(orderPageVo.getOrderRentVehicleDetail().getStartTime());
if (!flag) {
return ObjectRestResponse.createFailedResult(3501, "今日不是交车日期");
}
} else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车
getDriverInfo(orderPageVo);
getUserLicense(orderPageVo);
}
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderPageVo.getOrderRentVehicleDetail().getVehicleId());
if (restResponse.getData() != null) {
orderPageVo.setVehicalNumberPlat(restResponse.getData().getNumberPlate());
}
} else if (orderPageVo.getOrderTourDetail() != null) {
List<Integer> ids = Lists.newArrayList();
if (orderPageVo.getOrderTourDetail().getTourUserIds().contains(",")) {
String[] strings = orderPageVo.getOrderTourDetail().getTourUserIds().split(",");
for (int i = 0; i < strings.length; i++) {
ids.add(Integer.parseInt(StringUtils.isNotBlank(strings[i]) ? strings[i] : "0"));
}
} else {
ids.add(Integer.parseInt(orderPageVo.getOrderTourDetail().getTourUserIds()));
}
orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
List<AppUserVo> list = userFeign.getByUserIds(ids).getData();
orderPageVo.getOrderTourDetail().setUserVoList(list == null || list.size() <= 0 ? null : list);
}
//设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
orderPageVo.setIllegalReserve(illegalReserve);
orderPageVo.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(orderPageVo.getId());
}}));
return ObjectRestResponse.succ(orderPageVo);
}
public void getUserLicense(OrderPageVO orderPageVo) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setOrderId(orderPageVo.getId());
orderVehicleCrosstownDto.setOrderNo(orderPageVo.getNo());
List<OrderVehicleCrosstownDto> orderVehicleCrosstowns = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (orderVehicleCrosstowns != null && orderVehicleCrosstowns.size() > 0) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderVehicleCrosstowns.get(0).getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
orderVehicleCrosstownDto.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
}
}
orderPageVo.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
}
public void getDriverInfo(OrderPageVO orderPageVo) {
List<VehicleUserLicense> vehicleUserLicenses = Lists.newArrayList();
String myDriverIds = orderPageVo.getOrderRentVehicleDetail().getMyDriverIds();
if (StringUtils.isNotBlank(myDriverIds)) {
if (myDriverIds.contains(",")) {
String[] ids = myDriverIds.split(",");
try {
//目前暂定一个驾驶人,后期需要更改再此更改
RestResponse<VehicleUserLicense> restResponse = vehicleFeign.getOne(Integer.parseInt(ids[0]));
log.info(restResponse.getMessage());
if (restResponse.getData() != null) {
vehicleUserLicenses.add(restResponse.getData());
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
vehicleUserLicenses.add(vehicleFeign.getOne(Integer.parseInt(myDriverIds.trim())).getData());
} catch (Exception e) {
e.printStackTrace();
}
}
}
orderPageVo.setVehicleUserLicenses(vehicleUserLicenses);
}
public ObjectRestResponse<OrderPageVO> getOrderDetail(String no) {
OrderPageVO orderPageVo = mapper.getOrderDetail(no);
if (orderPageVo == null) {
return ObjectRestResponse.createFailedResult(3501, "订单不存在");
}
if (orderPageVo.getOrderRentVehicleDetail() != null) {
if (orderPageVo.getStatus() == 4) { //未交车
boolean flag = getTodayTime(orderPageVo.getOrderRentVehicleDetail().getStartTime());
if (!flag) {
return ObjectRestResponse.createFailedResult(3501, "今日不是交车日期");
}
getDriverInfo(orderPageVo);
} else if (orderPageVo.getStatus() >= 5 || orderPageVo.getStatus() == -1) {//出行中 已交车
getDriverInfo(orderPageVo);
getUserLicense(orderPageVo);
}
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderPageVo.getOrderRentVehicleDetail().getVehicleId());
if(restResponse.getData() != null) {
if (restResponse.getData() != null) {
orderPageVo.setVehicalNumberPlat(restResponse.getData().getNumberPlate());
}
} else if(orderPageVo.getOrderTourDetail() != null) {
} else if (orderPageVo.getOrderTourDetail() != null) {
List<Integer> ids = Lists.newArrayList();
if(orderPageVo.getOrderTourDetail().getTourUserIds().contains(",")) {
if (orderPageVo.getOrderTourDetail().getTourUserIds().contains(",")) {
String[] strings = orderPageVo.getOrderTourDetail().getTourUserIds().split(",");
for (int i = 0; i < strings.length; i++) {
ids.add(Integer.parseInt(StringUtils.isNotBlank(strings[i])? strings[i] : "0"));
ids.add(Integer.parseInt(StringUtils.isNotBlank(strings[i]) ? strings[i] : "0"));
}
} else {
ids.add(Integer.parseInt(orderPageVo.getOrderTourDetail().getTourUserIds()));
}
List<AppUserVo> list = userFeign.getByUserIds(ids).getData();
orderPageVo.getOrderTourDetail().setUserVoList(list == null|| list.size() <= 0 ? null : list);
orderPageVo.getOrderTourDetail().setUserVoList(list == null || list.size() <= 0 ? null : list);
}
//设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER+ "_"+ DictionaryKey.ILLEGAL_RESERVE).getDetail());
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
orderPageVo.setIllegalReserve(illegalReserve);
orderPageVo.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(orderPageVo.getId());
}}));
return ObjectRestResponse.succ(orderPageVo);
}
/**
* 支付回调处理
*
* @param orderNo
* @param tradeNo
*/
......@@ -224,10 +295,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
}};
//如果是会员订单,则触发会员效益
if(OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
//直接设置订单完成
updateOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
omd = orderMemberDetailBiz.selectOne(new OrderMemberDetail(){{
omd = orderMemberDetailBiz.selectOne(new OrderMemberDetail() {{
setOrderId(baseOrder.getId());
}});
......@@ -242,31 +313,31 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
userMemberDTO.setDiscount(omd.getRebate());
ObjectRestResponse orr = userFeign.buyMember(userMemberDTO);
log.info("orr.getStatus() : " + orr.getStatus() );
}else if(OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
log.info("orr.getStatus() : " + orr.getStatus());
} else if (OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail() {{
setOrderId(baseOrder.getId());
}});
//车辆预定审核通过
//确认免费天数
if(orvd.getFreeDays() > 0) {
if (orvd.getFreeDays() > 0) {
userFeign.memberDays(baseOrder.getUserId(), orvd.getFreeDays(), UserFeign.MEMBER_DAYS_CONFIRM);
}
}else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
} else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
updateOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
otd = orderTourDetailBiz.selectOne(new OrderTourDetail() {{
setOrderId(baseOrder.getId());
}});
//站点总人数添加
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
tourFeign.updateTourGoodPersonNum(otd.getVerificationId(), TourFeign.TOTAL_PERSON, otd.getTotalNumber());
}
try {
this.updateSelectiveByIdRe(updateOrder);
}finally {
} finally {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
//处理App用户提醒短信的发送
......@@ -275,7 +346,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
//处理后台用户提醒短信的发送
orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_PAY);
sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_PAY);
if(OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
if (OrderTypeEnum.MEMBER.getCode().equals(baseOrder.getType())) {
sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_FINISH);
}
}
......@@ -292,7 +363,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
orderMQDTO.setOrderMemberDetail(omd);
//获取item
orderMQDTO.setItems(orderItemBiz.selectList(new OrderItem(){{
orderMQDTO.setItems(orderItemBiz.selectList(new OrderItem() {{
setOrderId(baseOrder.getId());
}}));
......@@ -301,6 +372,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
/**
* 更新(不成功抛异常)
*
* @param baseOrder
* @return
*/
......@@ -310,16 +382,17 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
/**
* 更新(不成功抛异常)
*
* @param baseOrder
* @return
*/
public BaseOrder updateSelectiveByIdReT(BaseOrder baseOrder, boolean needVersion) {
if(needVersion) {
if (needVersion) {
baseOrder.setVersion(selectById(baseOrder.getId()).getVersion());
}
if(updateSelectiveByIdRe(baseOrder) > 0) {
if (updateSelectiveByIdRe(baseOrder) > 0) {
return selectById(baseOrder.getId());
}else {
} else {
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
}
}
......@@ -339,7 +412,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
public boolean getTodayTime(Long time) {
Long startTime = getDayStart();
if(time >= startTime && time <= startTime + 24 * 60 * 60 * 1000 - 1) {
if (time >= startTime && time <= startTime + 24 * 60 * 60 * 1000 - 1) {
return true;
}
return false;
......@@ -347,7 +420,7 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
public static Long getDayStart() {
long current = System.currentTimeMillis();
long zero = current/(1000*3600*24)*(1000*3600*24) - TimeZone.getDefault().getRawOffset();
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
return zero;
}
......@@ -367,21 +440,10 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
default:
break;
}
}catch (Exception e){
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
public boolean getTotalOrder() {
mapper.getTotalOrder();
return false;
}
// @Scheduled(cron = "0 0 2 * * ? ")
// private void countDailyOrdersRegularly(){
// DailyOrderStatistics dailyOrderStatistics= mapper.getTotalOrder();
// }
}
\ No newline at end of file
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()));
}
......
......@@ -2,6 +2,8 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
......@@ -17,18 +19,26 @@ import com.xxfc.platform.order.mapper.OrderVehicaleCrosstownMapper;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
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 com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.VehicleArrivalVo;
import com.xxfc.platform.vehicle.pojo.VehicleDepartureVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.HashedMap;
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 java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
@Service
@Slf4j
......@@ -39,7 +49,8 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
ThirdFeign thirdFeign;
@Autowired
UserInfoBiz userInfoBiz;
@Autowired
......@@ -55,52 +66,109 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
@Autowired
BaseOrderBiz baseOrderBiz;
public OrderVehicleCrosstown get(Integer id){
public OrderVehicleCrosstown get(Integer id) {
return selectById(id);
}
public List<OrderVehicleCrosstownDto> selectByOrderId(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
List<OrderVehicleCrosstownDto> list = mapper.selectByOrderId(orderVehicleCrosstownDto);
for(OrderVehicleCrosstownDto value : list) {
if (value.getOrperaterId() != null) {
ObjectRestResponse<AppUserDTO> objectRestResponse = userFeign.userDetailById(value.getOrperaterId());
if(objectRestResponse.getData() != null) {
value.setUsername(objectRestResponse.getData().getNickname());
}
for (OrderVehicleCrosstownDto value : list) {
updateCrossRecord(value);
List<DepositRefundRecord> depositRefundRecords = orderDepositRefundRecordBiz.selectByCrossId(value.getId());
value.setDepositRefundRecord(depositRefundRecords == null || depositRefundRecords.size() <= 0 ? null : depositRefundRecords);
}
return list;
}
public OrderVehicleCrosstownDto getByOrderId(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
List<OrderVehicleCrosstownDto> list = mapper.selectByOrderId(orderVehicleCrosstownDto);
return list != null && list.size() > 0 ? list.get(0) : null;
}
public void updateCrossRecord(OrderVehicleCrosstownDto value) {
if (value.getOrperaterId() != null) {
ObjectRestResponse<AppUserDTO> objectRestResponse = userFeign.userDetailById(value.getOrperaterId());
if (objectRestResponse.getData() != null) {
value.setUsername(objectRestResponse.getData().getNickname());
}
if(value.getUserLicenseId() != null) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(value.getUserLicenseId()).getData();
if(orderUserLicenses != null && orderUserLicenses.size() > 0) {
value.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
value.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
value.setLicenseName(orderUserLicenses.get(0).getLicenseName());
value.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
}
}
if (value.getUserLicenseId() != null) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(value.getUserLicenseId()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
value.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
value.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
value.setLicenseName(orderUserLicenses.get(0).getLicenseName());
value.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
}
}
}
public ObjectRestResponse selectByOrderNo(String no) {
ObjectRestResponse<OrderPageVO> objectRestResponse = baseOrderBiz.getOrderDetail(no);
if (objectRestResponse.getData() == null) {
return ObjectRestResponse.createFailedResult(2379, "订单不存在");
}
return list;
OrderPageVO orderPageVO = objectRestResponse.getData();
Map<String, Object> map = new HashedMap<>();
if (orderPageVO.getStatus() == OrderStatusEnum.ORDER_FINISH.getCode()) {//订单已完成
map.put("no", orderPageVO.getNo());
map.put("type", CrosstownTypeEnum.ARRIVE.getCode());
} else if (orderPageVO.getStatus() == OrderStatusEnum.ORDER_FIXED_LOSS.getCode()) {//订单定损中
map.put("no", orderPageVO.getNo());
map.put("type", CrosstownTypeEnum.FIXED_LOSS.getCode());
} else if (orderPageVO.getStatus() == OrderStatusEnum.ORDER_WAIT.getCode()) {//订单出行中
map.put("no", orderPageVO.getNo());
map.put("type", CrosstownTypeEnum.DEPARTURE.getCode());
} else {
return ObjectRestResponse.succ();
}
OrderVehicleCrosstownDto orderVehicleCrosstownDto = mapper.selectByOrderNo(map);
updateCrossRecord(orderVehicleCrosstownDto);
List<DepositRefundRecord> list = orderDepositRefundRecordBiz.selectByCrossId(orderVehicleCrosstownDto.getId());
orderVehicleCrosstownDto.setDepositRefundRecord(list == null || list.size() <= 0 ? null : list);
return ObjectRestResponse.succ(orderVehicleCrosstownDto);
}
@Transactional
@Transactional(rollbackFor = Exception.class)
public ObjectRestResponse<OrderVehicleCrosstownDto> add(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
log.info("添加的参数:orderVehicaleCrosstown = {}", orderVehicleCrosstownDto);
UserDTO userDTO = userInfoBiz.getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.createFailedResult(508, "token is null or invalid");
}
if (orderVehicleCrosstownDto == null || orderVehicleCrosstownDto.getOrderId() == null ) {
if (orderVehicleCrosstownDto == null || orderVehicleCrosstownDto.getOrderId() == null) {
return ObjectRestResponse.createFailedResult(500, "参数为空!");
}
orderVehicleCrosstownDto.setOrperaterId(userDTO.getId());
BaseOrder baseOrder = baseOrderBiz.selectById(orderVehicleCrosstownDto.getOrderId());
if(baseOrder == null) {
return ObjectRestResponse.createFailedResult(500,"订单不存在!");
if (baseOrder == null) {
return ObjectRestResponse.createFailedResult(500, "订单不存在!");
}
OrderRentVehicleDetail orderRentVehicleDetail = orderRentVehicleBiz.selectById(baseOrder.getDetailId());
if(baseOrder.getStatus() != -1) {
Vehicle vehicle = null;
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
log.info("获取车辆信息返回消息:{}", restResponse.getMessage());
if (restResponse.getData() != null) {
vehicle = restResponse.getData();
}
if (vehicle == null) {
return ObjectRestResponse.createFailedResult(500, "订单车辆不存在!");
}
//判断车辆公里数
if (orderVehicleCrosstownDto.getMileage() == null || orderVehicleCrosstownDto.getMileage() < vehicle.getMileageLastUpdate()) {
return ObjectRestResponse.createFailedResult(500, "请输入车辆仪表盘实际公里数!");
}
}
//调用车辆管理的出车还车
//出车
if(orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) { //交车
if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.DEPARTURE.getCode()) { //交车
VehicleDepartureVo vehicleDepartureVo = new VehicleDepartureVo();
vehicleDepartureVo.setVehicleId(orderRentVehicleDetail.getVehicleId());
vehicleDepartureVo.setDepartureBranchCompanyId(orderRentVehicleDetail.getStartCompanyId());
......@@ -112,37 +180,63 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
vehicleDepartureVo.setUserTel(userDTO.getTelPhone());
vehicleDepartureVo.setCheckMan(orderVehicleCrosstownDto.getLicenseName());
vehicleDepartureVo.setCheckManTel(orderVehicleCrosstownDto.getLicensePhone());
vehicleFeign.departureBySmall(vehicleDepartureVo);
} else if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.ARRIVE.getCode()) { //还车
try {
vehicleFeign.departureBySmall(vehicleDepartureVo);
} catch (Exception e) {
e.printStackTrace();
return ObjectRestResponse.createFailedResult(500, e.getMessage());
}
} else if (orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.ARRIVE.getCode() || orderVehicleCrosstownDto.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()) { //还车
VehicleArrivalVo vehicleArrivalVo = new VehicleArrivalVo();
vehicleArrivalVo.setVehicleId(orderRentVehicleDetail.getVehicleId());
vehicleArrivalVo.setArrivalBranchCompanyId(userDTO.getCompanyId());
vehicleArrivalVo.setMileage(orderVehicleCrosstownDto.getMileage());
vehicleArrivalVo.setRecycleMan(userDTO.getName());
vehicleArrivalVo.setRecycleManTel(userDTO.getTelPhone());
vehicleFeign.arrivalBySmall(vehicleArrivalVo);
try {
vehicleFeign.arrivalBySmall(vehicleArrivalVo);
} catch (Exception e) {
e.printStackTrace();
return ObjectRestResponse.createFailedResult(500, e.getMessage());
}
}
Double cost = 0.0;
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getDedDetail())) {
JSONArray jsonArray = JSONArray.parseArray(orderVehicleCrosstownDto.getDedDetail());
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = JSONObject.parseObject(jsonArray.get(i).toString());
if(jsonObject!= null) {
cost += Double.parseDouble(jsonObject.getString("cost"));
}
}
}
BigDecimal amount = new BigDecimal(cost.toString()).divide(new BigDecimal("1"), 2, BigDecimal.ROUND_UP);
orderVehicleCrosstownDto.setDeductionCost(amount);
//扣除费用和备用金
orderVehicleCrosstownDto.setRestDeposit(orderRentVehicleDetail.getDeposit().subtract(getAmount()).subtract(amount));
//出车成功后修改订单状态
List<OrderVehicleCrosstownDto> oldValue = orderVehicleCrosstownBiz.selectByOrderId(orderVehicleCrosstownDto);
if (oldValue .size() == 1) {
if (oldValue.size() == 1) {
BeanUtil.copyProperties(orderVehicleCrosstownDto, oldValue.get(0), CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
getOrderLicense(orderVehicleCrosstownDto);
handleOrderStatus(baseOrder, orderRentVehicleDetail, oldValue.get(0));
updateSelectiveByIdRe(oldValue.get(0));
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
if(restResponse.getData() != null) {
orderVehicleCrosstownDto.setVehicleNumberPlat(restResponse.getData().getNumberPlate());
RestResponse<Vehicle> response = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
if (response.getData() != null) {
orderVehicleCrosstownDto.setVehicleNumberPlat(response.getData().getNumberPlate());
}
return ObjectRestResponse.succ(oldValue.get(0));
} else if(oldValue .size() <= 0) {
} else if (oldValue.size() <= 0) {
getOrderLicense(orderVehicleCrosstownDto);
orderVehicleCrosstownBiz.insertSelective(orderVehicleCrosstownDto);
orderVehicleCrosstownBiz.insertSelective(orderVehicleCrosstownDto);
OrderVehicleCrosstown orderVehicleCrosstown = orderVehicleCrosstownBiz.selectOne(orderVehicleCrosstownDto);
handleOrderStatus(baseOrder, orderRentVehicleDetail, orderVehicleCrosstown);
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
if(restResponse.getData() != null) {
orderVehicleCrosstownDto.setVehicleNumberPlat(restResponse.getData().getNumberPlate());
RestResponse<Vehicle> response = vehicleFeign.findById(orderRentVehicleDetail.getVehicleId());
if (response.getData() != null) {
orderVehicleCrosstownDto.setVehicleNumberPlat(response.getData().getNumberPlate());
}
return ObjectRestResponse.succ(orderVehicleCrosstownDto);
}
......@@ -152,16 +246,16 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
private void handleOrderStatus(BaseOrder baseOrder, OrderRentVehicleDetail orderRentVehicleDetail, OrderVehicleCrosstown orderVehicleCrosstown) {
//交车完成 设置订单状态为出行中
BigDecimal totalAmount = new BigDecimal(0);
ObjectRestResponse<OrderPageVO> objectRestResponse = baseOrderBiz.getOrderDetail(baseOrder.getNo());
if(objectRestResponse.getData() != null && objectRestResponse.getData().getOrderRentVehicleDetail() != null) {
totalAmount = objectRestResponse.getData().getOrderRentVehicleDetail().getDeposit();
}
ObjectRestResponse<OrderPageVO> objectRestResponse = baseOrderBiz.getOrderDetail(baseOrder.getNo());
if (objectRestResponse.getData() != null && objectRestResponse.getData().getOrderRentVehicleDetail() != null) {
//总押金-保留金
totalAmount = objectRestResponse.getData().getOrderRentVehicleDetail().getDeposit().subtract(getAmount());
}
if (baseOrder.getStatus() == OrderStatusEnum.ORDER_TOSTART.getCode()) {//交车
//判断是否是今日交车
baseOrder.setStatus(OrderStatusEnum.ORDER_WAIT.getCode());
baseOrderBiz.updateSelectiveById(baseOrder);
} else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_WAIT.getCode()) { //还车
if(orderVehicleCrosstown.getType() == CrosstownTypeEnum.ARRIVE.getCode()) {//不定损直接还车
if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.ARRIVE.getCode()) {//不定损直接还车
//添加非定损记录
DepositRefundRecord depositRefundRecord = new DepositRefundRecord();
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
......@@ -172,7 +266,7 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
baseOrder.setStatus(OrderStatusEnum.ORDER_FINISH.getCode());
baseOrderBiz.updateSelectiveById(baseOrder);
baseOrderBiz.sendOrderMq(orderRentVehicleDetail, null, null, baseOrder, OrderMQDTO.ORDER_FINISH);
} else if(orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()){ //定损还车,添加定损记录
} else if (orderVehicleCrosstown.getType() == CrosstownTypeEnum.FIXED_LOSS.getCode()) { //定损还车,添加定损记录
//添加定损记录
DepositRefundRecord depositRefundRecord = new DepositRefundRecord();
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
......@@ -185,13 +279,18 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
} else if (baseOrder.getStatus() == OrderStatusEnum.ORDER_FIXED_LOSS.getCode()) {//定损后还车
DepositRefundRecord depositRefundRecord = orderDepositRefundRecordBiz.findByCrossIdAndStatus(orderVehicleCrosstown.getId(), DepositRefundStatus.FIXLOSSREFUND.getCode());
if(depositRefundRecord != null) {
depositRefundRecord.setIscomplete(true); //发起退款显示
depositRefundRecord.setAmount(orderVehicleCrosstown.getDeductionCost());
depositRefundRecord.setRestAmount(orderVehicleCrosstown.getRestDeposit());
depositRefundRecord.setTotalAmount(totalAmount);
depositRefundRecord.setCrosstownId(orderVehicleCrosstown.getId());
if (depositRefundRecord != null) {
DepositRefundRecord newValue = new DepositRefundRecord();
BeanUtil.copyProperties(depositRefundRecord, newValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
depositRefundRecord.setIsshow(false);
orderDepositRefundRecordBiz.updateSelectiveByIdRe(depositRefundRecord);
newValue.setIscomplete(true); //发起退款显示
newValue.setAmount(orderVehicleCrosstown.getDeductionCost());
newValue.setRestAmount(orderVehicleCrosstown.getRestDeposit());
newValue.setTotalAmount(totalAmount);
newValue.setCrosstownId(orderVehicleCrosstown.getId());
newValue.setId(null);
orderDepositRefundRecordBiz.insertSelectiveRe(newValue);
} else {
throw new BaseException("定损记录不存在!请联系客服");
}
......@@ -202,14 +301,23 @@ public class OrderVehicleCrosstownBiz extends BaseBiz<OrderVehicaleCrosstownMapp
}
public void getOrderLicense(OrderVehicleCrosstownDto orderVehicleCrosstownDto) {
OrderUserLicense orderUserLicense = new OrderUserLicense();
orderUserLicense.setLicenseIdCard(orderVehicleCrosstownDto.getLicenseIdCard());
orderUserLicense.setLicenseImg(orderVehicleCrosstownDto.getLicenseImg());
orderUserLicense.setLicenseName(orderVehicleCrosstownDto.getLicenseName());
orderUserLicense.setLicensePhone(orderVehicleCrosstownDto.getLicensePhone());
if(orderUserLicense != null) {
Integer id = orderUserLicenseBiz.add(orderUserLicense).getData().getId();
orderVehicleCrosstownDto.setUserLicenseId(id + "");
if (StringUtils.isNotBlank(orderVehicleCrosstownDto.getLicenseIdCard())) {
OrderUserLicense orderUserLicense = new OrderUserLicense();
orderUserLicense.setLicenseIdCard(orderVehicleCrosstownDto.getLicenseIdCard());
orderUserLicense.setLicenseImg(orderVehicleCrosstownDto.getLicenseImg());
orderUserLicense.setLicenseName(orderVehicleCrosstownDto.getLicenseName());
orderUserLicense.setLicensePhone(orderVehicleCrosstownDto.getLicensePhone());
if (orderUserLicense != null) {
Integer id = orderUserLicenseBiz.add(orderUserLicense).getData().getId();
orderVehicleCrosstownDto.setUserLicenseId(id + "");
}
}
}
public BigDecimal getAmount() {
//设置保留金
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
BigDecimal illegalReserve = new BigDecimal(dictionaryMap.get(APP_ORDER + "_" + DictionaryKey.ILLEGAL_RESERVE).getDetail());
return illegalReserve;
}
}
......@@ -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);
}
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
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.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderUserLicenseBiz;
import com.xxfc.platform.order.entity.OrderUserLicense;
import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.OrderVehicleCrosstownDto;
import com.xxfc.platform.order.pojo.order.QueryOrderDTO;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@Controller
@RequestMapping("baseOrder")
@Api(value = "订单后台相关", tags = {"订单后台相关"})
@Slf4j
public class BackStageOrderController extends CommonBaseController implements UserRestInterface {
public static final Integer STATUS_SUCCESS = 1;
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
UserFeign userFeign;
@Resource
VehicleFeign vehicleFeign;
@Override
public UserFeign getUserFeign() {
return userFeign;
}
@RequestMapping(value = "/getOrderList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "获取后台订单列表")
@IgnoreClientToken
@CrossOrigin
public ObjectRestResponse<PageDataVO<OrderListVo>> selectByUser(BaseOrderController.QueryOrderList dto) {
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(new Date().getTime());
}
}
if (StringUtils.isNotBlank(dto.getPhone())) {
AppUserLogin appUserLogin = userFeign.one(dto.getPhone());
if (appUserLogin != null) {
dto.setUserId(appUserLogin.getId());
}
}
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
dto.setCompanyIds(companyIds);
Query query = new Query(dto);
PageDataVO pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.listOrder(query.getSuper()));
List<OrderListVo> list = pageDataVO.getData();
List<Integer> userIds = list.stream().map(OrderListVo::getUserId).distinct().collect(Collectors.toList());
if (userIds != null && userIds.size() > 0) {
ObjectRestResponse<List<AppUserVo>> objectRestResponse = userFeign.getByUserIds(userIds);
log.info("获取用户信息:objectRestResponse = {}", objectRestResponse.getData());
Map<String, AppUserVo> appUserVoMap = objectRestResponse.getData() == null ? new HashMap<String, AppUserVo>()
: objectRestResponse.getData().parallelStream().collect(Collectors.toMap(v -> v.getUserid().toString(), v -> v));
for (OrderListVo orderPageVO : list) {
AppUserVo appUserVo = appUserVoMap.get(orderPageVO.getUserId().toString());
if (null != appUserVo) {
orderPageVO.setTelephone(appUserVo.getUsername());
orderPageVO.setUsername(appUserVo.getNickname());
}
if (orderPageVO.getOrderRentVehicleDetail() != null && orderPageVO.getOrderRentVehicleDetail().getVehicleId() != null) {
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderPageVO.getOrderRentVehicleDetail().getVehicleId());
log.info("获取车辆信息返回消息:{}", restResponse.getMessage());
if (restResponse.getData() != null) {
orderPageVO.setVehicleNumberPlat(restResponse.getData().getNumberPlate());
}
if (StringUtils.isNotBlank(orderPageVO.getOrderRentVehicleDetail().getMyDriverIds())) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderPageVO.getOrderRentVehicleDetail().getMyDriverIds()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
orderVehicleCrosstownDto.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
orderPageVO.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
}
}
}
if (orderPageVO.getOrderRentVehicleDetail() != null && orderPageVO.getOrderRentVehicleDetail().getStartCompanyId() != null && orderPageVO.getOrderRentVehicleDetail().getEndCompanyId() != null) {
ObjectRestResponse<CompanyDetail> startResponse = vehicleFeign.getCompanyDetail(orderPageVO.getOrderRentVehicleDetail().getStartCompanyId());
if (startResponse.getData() != null) {
orderPageVO.setStartCompanyName(startResponse.getData().getName());
}
ObjectRestResponse<CompanyDetail> restResponse = vehicleFeign.getCompanyDetail(orderPageVO.getOrderRentVehicleDetail().getEndCompanyId());
if (restResponse.getData() != null) {
orderPageVO.setEndCompanyName(restResponse.getData().getName());
}
}
//旅游
if (orderPageVO.getOrderTourDetail() != null && orderPageVO.getOrderTourDetail().getStartCompanyId() != null) {
ObjectRestResponse<CompanyDetail> startResponse = vehicleFeign.getCompanyDetail(orderPageVO.getOrderTourDetail().getStartCompanyId());
if (startResponse.getData() != null) {
orderPageVO.setStartCompanyName(startResponse.getData().getName());
}
List<Integer> tourUserIds = Arrays.asList(orderPageVO.getOrderTourDetail().getTourUserIds().split(",")).parallelStream().map(s -> Integer.valueOf(s)).collect(Collectors.toList());
ObjectRestResponse<List<AppUserVo>> users = userFeign.getByUserIds(tourUserIds);
if (users.getData() != null) {
orderPageVO.getOrderTourDetail().setUserVoList(users.getData() == null? users.getData() : new ArrayList<>());
}
}
}
}
return new ObjectRestResponse<>().data(pageDataVO);
}
@RequestMapping(value = "/getVehicleList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "交还车租车订单列表")
@IgnoreClientToken
public ObjectRestResponse<List<OrderPageVO>> getVehicleList(BaseOrderController.QueryOrderList dto) {
log.info("交还车租车订单列表请求参数:dto = {}", dto);
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(new Date().getTime());
}
}
Query query = new Query(dto);
PageDataVO<OrderPageVO> pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.getRentVehicle(query.getSuper()));
for (OrderPageVO orderPageVO : pageDataVO.getData()) {
if (orderPageVO.getOrderRentVehicleDetail() != null && orderPageVO.getOrderRentVehicleDetail().getVehicleId() != null) {
ObjectRestResponse<Vehicle> restResponse = vehicleFeign.get(orderPageVO.getOrderRentVehicleDetail().getVehicleId());
log.info("获取车辆信息返回消息:{}", restResponse.getMessage());
if (restResponse.getData() != null) {
orderPageVO.setVehicalNumberPlat(restResponse.getData().getNumberPlate());
}
}
}
return new ObjectRestResponse<>().data(pageDataVO);
}
@RequestMapping(value = "/getTourList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "交还车旅游订单列表")
@IgnoreClientToken
public ObjectRestResponse<List<OrderPageVO>> getTourList(BaseOrderController.QueryOrderList dto) {
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(dto.getStartTime());
}
}
Query query = new Query(dto);
PageDataVO pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.getTourList(query.getSuper()));
return new ObjectRestResponse<>().data(pageDataVO);
}
@GetMapping(value = "/orderDetail")
@ApiOperation(value = "交还车获取订单详情,带驾驶人信息")
@IgnoreClientToken
@ResponseBody
public ObjectRestResponse<OrderPageVO> getOrderDetail(String orderNo) {
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>());
}
if (StringUtils.isBlank(orderNo)) {
return ObjectRestResponse.paramIsEmpty();
}
return baseOrderBiz.getOrderDetail(orderNo, userDTO);
}
@ApiOperation("结合后台人员所属公司查询订单详情")
@RequestMapping(value = "/company/{no}", method = RequestMethod.GET)
@IgnoreClientToken
@ResponseBody
public ObjectRestResponse<OrderPageVO> companyGet(@PathVariable String no) {
//查询列表数据
if (StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
}
Query query = initCompanyQuery(no);
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
if (page.getData().isEmpty()) {
throw new BaseException(ResultCode.NOTEXIST_CODE);
}
return new ObjectRestResponse<>().data(page.getData().get(0));
}
private Query initCompanyQuery(String no) {
BackStageOrderController.QueryOrderDetailDTO qodd = new BackStageOrderController.QueryOrderDetailDTO();
//查询公司id
UserDTO userDto = userFeign.userinfoByToken(BaseContextHandler.getToken()).getData();
qodd.setCrtCompanyId(userDto.getCompanyId());
qodd.setNo(no);
qodd.setLimit(1);
qodd.setPage(1);
Query query = new Query(qodd);
return query;
}
/**
* 订单查询类
*/
@Data
public class QueryOrderDetailDTO extends QueryOrderDTO {
private String no;
}
}
......@@ -3,11 +3,9 @@ package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
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.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
......@@ -19,26 +17,25 @@ import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderItemBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.biz.OrderUserLicenseBiz;
import com.xxfc.platform.order.biz.OrderVehicleCrosstownBiz;
import com.xxfc.platform.order.biz.inner.OrderCancelBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderUserLicense;
import com.xxfc.platform.order.entity.OrderItem;
import com.xxfc.platform.order.mqhandler.RabbitProduct;
import com.xxfc.platform.order.pojo.order.*;
import com.xxfc.platform.order.pojo.order.CancelOrderDTO;
import com.xxfc.platform.order.pojo.order.OrderAboutParamDTO;
import com.xxfc.platform.order.pojo.order.OrderPageVO;
import com.xxfc.platform.order.pojo.order.QueryOrderDTO;
import com.xxfc.platform.order.pojo.pay.NotifyUrlDTO;
import com.xxfc.platform.order.pojo.pay.OrderPayDTO;
import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderPayVo;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.BranchCompany;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
......@@ -55,8 +52,8 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
......@@ -76,9 +73,6 @@ public class BaseOrderController extends CommonBaseController implements UserRes
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
OrderVehicleCrosstownBiz orderVehicleCrosstownBiz;
@Autowired
OrderCancelBiz orderCancelBiz;
......@@ -94,6 +88,8 @@ public class BaseOrderController extends CommonBaseController implements UserRes
@Autowired
RabbitProduct rabbitProduct;
@Autowired
OrderItemBiz orderItemBiz;
@Override
public UserFeign getUserFeign() {
......@@ -159,137 +155,6 @@ public class BaseOrderController extends CommonBaseController implements UserRes
return new ObjectRestResponse<>().data(pages);
}
@RequestMapping(value = "/getOrderList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "获取后台订单列表")
@IgnoreClientToken
@CrossOrigin
public ObjectRestResponse<PageDataVO<OrderListVo>> selectByUser(QueryOrderList dto) {
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(new Date().getTime());
}
}
if (StringUtils.isNotBlank(dto.getPhone())) {
AppUserLogin appUserLogin = userFeign.one(dto.getPhone());
if (appUserLogin != null) {
dto.setUserId(appUserLogin.getId());
}
}
UserDTO userDTO = getAdminUserInfo();
if (userDTO == null) {
return ObjectRestResponse.succ(new PageDataVO<>());
}
List<BranchCompany> branchCompanies = vehicleFeign.companyAll(userDTO.getDataAll(), userDTO.getDataCompany(), userDTO.getDataZone());
List<Integer> companyIds = branchCompanies.stream().map(BranchCompany::getId).collect(Collectors.toList());
dto.setCompanyIds(companyIds);
Query query = new Query(dto);
PageDataVO pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.listOrder(query.getSuper()));
List<OrderListVo> list = pageDataVO.getData();
List<Integer> userIds = list.stream().map(OrderListVo::getUserId).distinct().collect(Collectors.toList());
if (userIds != null && userIds.size() > 0) {
ObjectRestResponse<List<AppUserVo>> objectRestResponse = userFeign.getByUserIds(userIds);
log.info("获取用户信息:objectRestResponse = {}", objectRestResponse.getData());
Map<String, AppUserVo> appUserVoMap = objectRestResponse.getData() == null ? new HashMap<String, AppUserVo>()
: objectRestResponse.getData().parallelStream().collect(Collectors.toMap(v -> v.getUserid().toString(), v -> v));
for (OrderListVo orderPageVO : list) {
AppUserVo appUserVo = appUserVoMap.get(orderPageVO.getUserId().toString());
if (null != appUserVo) {
orderPageVO.setTelephone(appUserVo.getUsername());
orderPageVO.setUsername(appUserVo.getNickname());
}
if (orderPageVO.getOrderRentVehicleDetail() != null && orderPageVO.getOrderRentVehicleDetail().getVehicleId() != null) {
RestResponse<Vehicle> restResponse = vehicleFeign.findById(orderPageVO.getOrderRentVehicleDetail().getVehicleId());
log.info("获取车辆信息返回消息:{}", restResponse.getMessage());
if (restResponse.getData() != null) {
orderPageVO.setVehicleNumberPlat(restResponse.getData().getNumberPlate());
}
if (StringUtils.isNotBlank(orderPageVO.getOrderRentVehicleDetail().getMyDriverIds())) {
List<OrderUserLicense> orderUserLicenses = orderUserLicenseBiz.selectByIds(orderPageVO.getOrderRentVehicleDetail().getMyDriverIds()).getData();
if (orderUserLicenses != null && orderUserLicenses.size() > 0) {
OrderVehicleCrosstownDto orderVehicleCrosstownDto = new OrderVehicleCrosstownDto();
orderVehicleCrosstownDto.setLicenseIdCard(orderUserLicenses.get(0).getLicenseIdCard());
orderVehicleCrosstownDto.setLicenseImg(orderUserLicenses.get(0).getLicenseImg());
orderVehicleCrosstownDto.setLicenseName(orderUserLicenses.get(0).getLicenseName());
orderVehicleCrosstownDto.setLicensePhone(orderUserLicenses.get(0).getLicensePhone());
orderPageVO.setOrderVehicleCrosstownDto(orderVehicleCrosstownDto);
}
}
}
if (orderPageVO.getOrderRentVehicleDetail() != null && orderPageVO.getOrderRentVehicleDetail().getStartCompanyId() != null && orderPageVO.getOrderRentVehicleDetail().getEndCompanyId() != null) {
ObjectRestResponse<CompanyDetail> startResponse = vehicleFeign.getCompanyDetail(orderPageVO.getOrderRentVehicleDetail().getStartCompanyId());
if (startResponse.getData() != null) {
orderPageVO.setStartCompanyName(startResponse.getData().getName());
}
ObjectRestResponse<CompanyDetail> restResponse = vehicleFeign.getCompanyDetail(orderPageVO.getOrderRentVehicleDetail().getEndCompanyId());
if (restResponse.getData() != null) {
orderPageVO.setEndCompanyName(restResponse.getData().getName());
}
}
//旅游
if (orderPageVO.getOrderTourDetail() != null && orderPageVO.getOrderTourDetail().getStartCompanyId() != null) {
ObjectRestResponse<CompanyDetail> startResponse = vehicleFeign.getCompanyDetail(orderPageVO.getOrderTourDetail().getStartCompanyId());
if (startResponse.getData() != null) {
orderPageVO.setStartCompanyName(startResponse.getData().getName());
}
List<Integer> tourUserIds = Arrays.asList(orderPageVO.getOrderTourDetail().getTourUserIds().split(",")).parallelStream().map(s -> Integer.valueOf(s)).collect(Collectors.toList());
ObjectRestResponse<List<AppUserVo>> users = userFeign.getByUserIds(tourUserIds);
if (users.getData() != null) {
orderPageVO.getOrderTourDetail().setUserVoList(users.getData() == null? users.getData() : new ArrayList<>());
}
}
}
}
return new ObjectRestResponse<>().data(pageDataVO);
}
@RequestMapping(value = "/getVehicleList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "交还车租车订单列表")
@IgnoreClientToken
public ObjectRestResponse<List<OrderPageVO>> getVehicleList(QueryOrderList dto) {
log.info("请求参数:dto = {}", dto);
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(new Date().getTime());
}
}
Query query = new Query(dto);
PageDataVO<OrderPageVO> pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.getRentVehicle(query.getSuper()));
for (OrderPageVO orderPageVO : pageDataVO.getData()) {
if (orderPageVO.getOrderRentVehicleDetail() != null && orderPageVO.getOrderRentVehicleDetail().getVehicleId() != null) {
ObjectRestResponse<Vehicle> restResponse = vehicleFeign.get(orderPageVO.getOrderRentVehicleDetail().getVehicleId());
log.info("获取车辆信息返回消息:{}", restResponse.getMessage());
if (restResponse.getData() != null) {
orderPageVO.setVehicalNumberPlat(restResponse.getData().getNumberPlate());
}
}
}
return new ObjectRestResponse<>().data(pageDataVO);
}
@RequestMapping(value = "/getTourList", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "交还车旅游订单列表")
@IgnoreClientToken
public ObjectRestResponse<List<OrderPageVO>> getTourList(QueryOrderList dto) {
if (dto.getStartTime() != null) {
if (dto.getEndTime() == null) {
dto.setEndTime(dto.getStartTime());
}
}
Query query = new Query(dto);
PageDataVO pageDataVO = PageDataVO.pageInfo(query, () -> baseOrderBiz.getTourList(query.getSuper()));
return new ObjectRestResponse<>().data(pageDataVO);
}
@ApiOperation("订单详情")
@RequestMapping(value = "/{no}", method = RequestMethod.GET)
@IgnoreClientToken
......@@ -305,36 +170,10 @@ public class BaseOrderController extends CommonBaseController implements UserRes
throw new BaseException(ResultCode.NOTEXIST_CODE);
}
log.info("no:" + no + ",时间戳:" + System.currentTimeMillis());
return new ObjectRestResponse<>().data(page.getData().get(0));
}
@GetMapping(value = "/orderDetail")
@ApiOperation(value = "交还车获取订单详情,带驾驶人信息")
@IgnoreClientToken
@ResponseBody
public ObjectRestResponse<OrderPageVO> getOrderDetail(String orderNo) {
if (StringUtils.isBlank(orderNo)) {
return ObjectRestResponse.paramIsEmpty();
}
return baseOrderBiz.getOrderDetail(orderNo);
}
@ApiOperation("结合后台人员所属公司查询订单详情")
@RequestMapping(value = "/company/{no}", method = RequestMethod.GET)
@IgnoreClientToken
@ResponseBody
public ObjectRestResponse<OrderPageVO> companyGet(@PathVariable String no) {
//查询列表数据
if (StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
}
Query query = initCompanyQuery(no);
PageDataVO<OrderPageVO> page = PageDataVO.pageInfo(query, () -> baseOrderBiz.pageByParm(query.getSuper()));
if (page.getData().isEmpty()) {
throw new BaseException(ResultCode.NOTEXIST_CODE);
}
OrderPageVO orderPageVO = page.getData().get(0);
orderPageVO.setItems(orderItemBiz.selectList(new OrderItem(){{
setOrderId(orderPageVO.getId());
}}));
return new ObjectRestResponse<>().data(page.getData().get(0));
}
......@@ -348,18 +187,6 @@ public class BaseOrderController extends CommonBaseController implements UserRes
return query;
}
private Query initCompanyQuery(String no) {
QueryOrderDetailDTO qodd = new QueryOrderDetailDTO();
//查询公司id
UserDTO userDto = userFeign.userinfoByToken(BaseContextHandler.getToken()).getData();
qodd.setCrtCompanyId(userDto.getCompanyId());
qodd.setNo(no);
qodd.setLimit(1);
qodd.setPage(1);
Query query = new Query(qodd);
return query;
}
@RequestMapping(value = "/pay", method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "订单支付")
......
......@@ -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