Commit c18c73c7 authored by jiaorz's avatar jiaorz

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

parents 7adce3f6 1f241513
...@@ -5,6 +5,8 @@ import lombok.Data; ...@@ -5,6 +5,8 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Set;
/** /**
* 用户信息表 * 用户信息表
...@@ -52,6 +54,11 @@ public class AppUserManageDTO { ...@@ -52,6 +54,11 @@ public class AppUserManageDTO {
*/ */
private Integer source; private Integer source;
/**
* 公司所在的城市数组
*/
private Set<Integer> citySet;
// /** // /**
// * 接收前台时间范围 // * 接收前台时间范围
// */ // */
......
...@@ -13,8 +13,10 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -13,8 +13,10 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.entity.SysRegion; import com.xxfc.platform.vehicle.entity.SysRegion;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import javafx.print.Collation;
import org.apache.commons.beanutils.BeanMap; import org.apache.commons.beanutils.BeanMap;
import org.apache.commons.beanutils.BeanUtilsBean; import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -26,6 +28,7 @@ import tk.mybatis.mapper.entity.Example; ...@@ -26,6 +28,7 @@ import tk.mybatis.mapper.entity.Example;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -59,12 +62,21 @@ public class AppUserManageBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -59,12 +62,21 @@ public class AppUserManageBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
if (pageInfo.getList()==null||pageInfo.getList().size()==0) { if (pageInfo.getList()==null||pageInfo.getList().size()==0) {
return pageInfo; return pageInfo;
} }
List<Integer> Citys = pageInfo.getList().parallelStream().map(AppUserManageVo::getCityCode).collect(Collectors.toList()); return getAppUserManageVoPageInfo(pageInfo);
}
/**
* 获取城市名并保存
* @param pageInfo
* @return
*/
private PageInfo<AppUserManageVo> getAppUserManageVoPageInfo(PageInfo<AppUserManageVo> pageInfo) {
List<Integer> citysCode = pageInfo.getList().parallelStream().map(AppUserManageVo::getCityCode).collect(Collectors.toList());
HashSet<Integer> set = new HashSet<>(); HashSet<Integer> set = new HashSet<>();
set.addAll(Citys); set.addAll(citysCode);
ObjectRestResponse<List<SysRegion>> orr = vehicleFeign.getSysRegionByIds(set); ObjectRestResponse<List<SysRegion>> orr = vehicleFeign.getSysRegionByIds(set);
List<SysRegion> sysRegions = orr.getData(); List<SysRegion> sysRegions = orr.getData();
if (!(sysRegions==null||sysRegions.size()==0)) { if (CollectionUtils.isNotEmpty(sysRegions)) {
HashMap<Long, String> map = new HashMap<>(); HashMap<Long, String> map = new HashMap<>();
for (SysRegion sysRegion : sysRegions) { for (SysRegion sysRegion : sysRegions) {
map.put(sysRegion.getId(),sysRegion.getName()); map.put(sysRegion.getId(),sysRegion.getName());
...@@ -76,6 +88,23 @@ public class AppUserManageBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -76,6 +88,23 @@ public class AppUserManageBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
return pageInfo; return pageInfo;
} }
/**
* 根据用公司账号权限和公司所在城市查询用户情况
* @param appUserManageDTO
* @return
*/
public PageInfo<AppUserManageVo> findAllByQueryAndCity(AppUserManageDTO appUserManageDTO) {
PageHelper.startPage(appUserManageDTO.getPage(), appUserManageDTO.getLimit());
List<AppUserManageVo> appUserManageVos = mapper.selectAppUserManage(appUserManageDTO);
if (CollectionUtils.isEmpty(appUserManageVos)) {
return new PageInfo<AppUserManageVo>();
}
Set<Integer> usSet = appUserManageDTO.getCitySet();
List<AppUserManageVo> results = appUserManageVos.parallelStream().filter(us -> usSet.contains(us.getCityCode())).collect(Collectors.toList());
PageInfo<AppUserManageVo> pageInfo = PageInfo.of(results);
return getAppUserManageVoPageInfo(pageInfo);
}
/** /**
* 禁用账户 * 禁用账户
* @param id * @param id
...@@ -150,4 +179,5 @@ public class AppUserManageBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail ...@@ -150,4 +179,5 @@ public class AppUserManageBiz extends BaseBiz<AppUserDetailMapper, AppUserDetail
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} }
} }
} }
...@@ -41,14 +41,14 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem ...@@ -41,14 +41,14 @@ public class BaseUserMemberBiz extends BaseBiz<BaseUserMemberMapper, BaseUserMem
@Autowired @Autowired
AppUserDetailBiz detailBiz; AppUserDetailBiz detailBiz;
@Autowired // @Autowired
private TaskExecutor taskExecutor; // private TaskExecutor taskExecutor;
//
@Autowired // @Autowired
private UserMemberLevelBiz userMemberLevelBiz; // private UserMemberLevelBiz userMemberLevelBiz;
//
@Autowired // @Autowired
private AppUserLoginBiz appUserLoginBiz; // private AppUserLoginBiz appUserLoginBiz;
//获取用户会员信息 //获取用户会员信息
@Cache(key = "user:member{1}") @Cache(key = "user:member{1}")
......
...@@ -7,13 +7,26 @@ import com.github.wxiaoqi.security.admin.constant.Status; ...@@ -7,13 +7,26 @@ import com.github.wxiaoqi.security.admin.constant.Status;
import com.github.wxiaoqi.security.admin.dto.AppUserManageDTO; import com.github.wxiaoqi.security.admin.dto.AppUserManageDTO;
import com.github.wxiaoqi.security.admin.entity.AppUserLogin; import com.github.wxiaoqi.security.admin.entity.AppUserLogin;
import com.github.wxiaoqi.security.admin.entity.AppUserManage; import com.github.wxiaoqi.security.admin.entity.AppUserManage;
import com.github.wxiaoqi.security.admin.entity.User;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.admin.vo.AppUserManageVo; import com.github.wxiaoqi.security.admin.vo.AppUserManageVo;
import com.github.wxiaoqi.security.admin.vo.AppUserVo; import com.github.wxiaoqi.security.admin.vo.AppUserVo;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController; import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* app用户管理类 * app用户管理类
* @author Administrator * @author Administrator
...@@ -25,26 +38,35 @@ public class AppUsersManageController extends BaseController<AppUserManageBiz,Ap ...@@ -25,26 +38,35 @@ public class AppUsersManageController extends BaseController<AppUserManageBiz,Ap
@Autowired @Autowired
private AppUserLoginBiz appUserLoginBiz; private AppUserLoginBiz appUserLoginBiz;
@Autowired
protected UserAuthConfig userAuthConfig;
@Autowired
private PublicController publicController;
@Autowired
private VehicleFeign vehicleFeign;
/** /**
* 查询所有 * 查询所有
* @return * @return
*/ */
@PostMapping("/findAll") @PostMapping("/findAll")
public ObjectRestResponse<PageInfo<AppUserManageVo>> findAllByQuery(@RequestBody AppUserManageDTO appUserManageDTO){ public ObjectRestResponse<PageInfo<AppUserManageVo>> findAllByQuery(@RequestBody AppUserManageDTO appUserManageDTO, HttpServletRequest request) throws Exception {
return ObjectRestResponse.succ(baseBiz.findAllByQuery(appUserManageDTO)); String token = userAuthConfig.getToken(request);
ObjectRestResponse objectRestResponse = publicController.userinfoByToken(token);
User user = (User) objectRestResponse.getData();
if (user==null){
throw new BaseException("User error!");
}
if (user.getDataAll()==1) {
return ObjectRestResponse.succ(baseBiz.findAllByQuery(appUserManageDTO));
}
ObjectRestResponse<Set<Integer>> setObjectRestResponse = vehicleFeign.corporationCity(user.getDataZone(), user.getDataCompany());
Set<Integer> cityList = setObjectRestResponse.getData();
appUserManageDTO.setCitySet(cityList);
return ObjectRestResponse.succ(baseBiz.findAllByQueryAndCity(appUserManageDTO));
} }
// /**
// * 禁用
// * @param id
// * @return
// */
// @DeleteMapping("/deleteById/{id}/{isDel}")
// public ObjectRestResponse deleteById(@PathVariable Integer id,@PathVariable Integer isDel){
// baseBiz.deleteAppUser(id,isDel);
// return ObjectRestResponse.succ();
// }
/** /**
* 查询一条 * 查询一条
* @param id * @param id
......
...@@ -15,10 +15,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -15,10 +15,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -53,7 +50,11 @@ public class GroupController extends BaseController<GroupBiz, Group> { ...@@ -53,7 +50,11 @@ public class GroupController extends BaseController<GroupBiz, Group> {
return baseBiz.selectByExample(example); return baseBiz.selectByExample(example);
} }
@GetMapping(value = "/list_all")
@ResponseBody
public List<Group> listAll() {
return baseBiz.selectListAll();
}
@RequestMapping(value = "/{id}/user", method = RequestMethod.PUT) @RequestMapping(value = "/{id}/user", method = RequestMethod.PUT)
......
...@@ -93,7 +93,7 @@ public class UserMemberAdminController { ...@@ -93,7 +93,7 @@ public class UserMemberAdminController {
public ObjectRestResponse<Void> saveUserMember(@RequestBody UserMemberSaveDTO userMemberSaveDTO,HttpServletRequest request) { public ObjectRestResponse<Void> saveUserMember(@RequestBody UserMemberSaveDTO userMemberSaveDTO,HttpServletRequest request) {
try { try {
IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request)); IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(userAuthConfig.getToken(request));
baseUserMemberExportBiz.saveUserMember(userMemberSaveDTO,Integer.valueOf(infoFromToken.getId()),infoFromToken.getName()); baseUserMemberExportBiz.saveUserMember(userMemberSaveDTO,Integer.valueOf(infoFromToken.getId()),infoFromToken.getUniqueName());
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} catch (Exception e) { } catch (Exception e) {
throw new BaseException(e); throw new BaseException(e);
......
...@@ -148,20 +148,17 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup ...@@ -148,20 +148,17 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup
} else { } else {
activityPopup.setIsDel(1); activityPopup.setIsDel(1);
} }
updateById(activityPopup);
}
@Override
public int updateSelectiveByIdRe(ActivityPopup activityPopup) {
activityPopup.setUpdTime(BigInteger.valueOf(System.currentTimeMillis()));
return mapper.updateByPrimaryKeySelective(activityPopup);
} }
@Override @Override
public int insertSelectiveRe(ActivityPopup activityPopup) { public int insertSelectiveRe(ActivityPopup activityPopup) {
activityPopup.setCrtTime(BigInteger.valueOf(System.currentTimeMillis())); activityPopup.setCrtTime(BigInteger.valueOf(System.currentTimeMillis()));
activityPopup.setSort(0); if (activityPopup.getSort() == null) {
activityPopup.setTimeType(0); activityPopup.setSort(0);
}
if (activityPopup.getTimeType() == null) {
activityPopup.setTimeType(0);
}
return mapper.insertSelective(activityPopup); return mapper.insertSelective(activityPopup);
} }
} }
...@@ -95,6 +95,9 @@ public class CampsiteShopPageDTO implements Serializable { ...@@ -95,6 +95,9 @@ public class CampsiteShopPageDTO implements Serializable {
@ApiModelProperty(value = "電話") @ApiModelProperty(value = "電話")
private String phone; private String phone;
@ApiModelProperty("地址")
private String address;
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {
......
...@@ -100,4 +100,7 @@ public class CampsiteShopPageVo implements Serializable { ...@@ -100,4 +100,7 @@ public class CampsiteShopPageVo implements Serializable {
@ApiModelProperty(value = "電話") @ApiModelProperty(value = "電話")
private String phone; private String phone;
@ApiModelProperty("地址")
private String address;
} }
...@@ -37,14 +37,14 @@ ...@@ -37,14 +37,14 @@
<!--根据类型查询全部--> <!--根据类型查询全部-->
<select id="findAllCampsiteShopsByType" resultType="com.xxfc.platform.campsite.dto.CampsiteShopPageDTO"> <select id="findAllCampsiteShopsByType" resultType="com.xxfc.platform.campsite.dto.CampsiteShopPageDTO">
select cs.id as `id`,cs.name as `name`,cs.logo as `logo`,cs.url as `url`,cs.province_name as `provinceName`,cs.city_name as `cityName`,cs.service_phone as `phone`, select cs.id as `id`,cs.name as `name`,cs.logo as `logo`,cs.url as `url`,cs.province_name as `provinceName`,cs.city_name as `cityName`,cs.service_phone as `phone`,
cs.longitude as `longitude`,cs.latitude as `latitude`,cs.hot as `hot`,cs.crt_time as `crtTime`,ct.id as `storeId`,ct.name as `storeTypeName` cs.longitude as `longitude`,cs.latitude as `latitude`,`address` as `address`,cs.hot as `hot`,cs.crt_time as `crtTime`,ct.id as `storeId`,ct.name as `storeTypeName`
FROM `campsite_shop_tag` cst FROM `campsite_shop_tag` cst
left JOIN `campsite_shop` cs on cst.shop_id=cs.id left JOIN `campsite_shop` cs on cst.shop_id=cs.id
left JOIN `campsite_tag` ct on cst.tag_id=ct.id left JOIN `campsite_tag` ct on cst.tag_id=ct.id
where cs.sale_state=1 and cs.is_del=0 where cs.sale_state=1 and cs.is_del=0
<if test="typeId!=null"> <if test="typeId!=null">
and cst.tag_id=#{typeId} and cst.tag_id=#{typeId}
</if> </if> order by `crtTime` DESC
</select> </select>
<!--首页查询全部--> <!--首页查询全部-->
......
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.xxfc.platform.order.contant.enumerate.*; import com.xxfc.platform.order.contant.enumerate.*;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
...@@ -10,6 +12,8 @@ import com.xxfc.platform.order.pojo.mq.OrderMQDTO; ...@@ -10,6 +12,8 @@ import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.universal.constant.DictionaryKey; import com.xxfc.platform.universal.constant.DictionaryKey;
import com.xxfc.platform.universal.entity.Dictionary; import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign; import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import org.apache.commons.jexl2.MapContext;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -20,7 +24,10 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -20,7 +24,10 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
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.universal.constant.DictionaryKey.APP_ORDER; import static com.xxfc.platform.universal.constant.DictionaryKey.APP_ORDER;
/** /**
...@@ -69,11 +76,147 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> { ...@@ -69,11 +76,147 @@ public class OrderRefundBiz extends BaseBiz<OrderRefundMapper,OrderRefund> {
public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus) { public void refundTrigger(BaseOrder baseOrder, OrderRentVehicleDetail orvd, BigDecimal residueAmount, BigDecimal originalRefundAmount, BigDecimal refundAmont, String refundDesc, Integer refundStatus) {
//退款子流程: 订单基础,退款描述,退款金额 //退款子流程: 订单基础,退款描述,退款金额
baseOrderBiz.refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, RefundTypeEnum.DEPOSIT.getCode(), refundStatus); refundSubProcess(baseOrder, refundDesc, originalRefundAmount, refundAmont, RefundTypeEnum.DEPOSIT.getCode(), refundStatus);
//设置剩余没有返还的钱 //设置剩余没有返还的钱
orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{ orderRentVehicleBiz.updateSelectiveById(new OrderRentVehicleDetail(){{
setId(orvd.getId()); setId(orvd.getId());
setReturnPayResidue(residueAmount); setReturnPayResidue(residueAmount);
}}); }});
} }
/**
* 租车退款流程(不含押金的通用方法)
* @param baseOrder
* @param startTime
* @param dicParentKey
*/
public void rentRefundProcess(BaseOrder baseOrder, Long startTime, String dicParentKey){
rentRefundProcess(baseOrder, BigDecimal.ZERO, startTime, dicParentKey);
}
/**
* 租车(包括旅游)退款流程(含押金)
* @param baseOrder
* @param depositAmount
* @param timeLag 与开始时间的时间差
* @param dicParentKey
*/
public void rentRefundProcess(BaseOrder baseOrder, BigDecimal depositAmount, Long timeLag, String dicParentKey) {
//计算退款金额
// 1、押金 + 租金(规则扣除)
BigDecimal originalRefundAmount = BigDecimal.ZERO.add(baseOrder.getGoodsAmount().subtract(baseOrder.getCouponAmount()));
StringBuilder refundDescBuilder = new StringBuilder("取消订单退款:");
if(null == depositAmount) {
depositAmount = BigDecimal.ZERO;
}
//商品价格 - 优惠券减免的价格
BigDecimal refundGoodsAmount = calculateRefund(originalRefundAmount, timeLag, dicParentKey, refundDescBuilder);
//退款金额
BigDecimal refundAmount = depositAmount.add(refundGoodsAmount);
originalRefundAmount = depositAmount.add(originalRefundAmount);
//退款子流程: 订单基础,退款描述,退款金额
refundSubProcess(baseOrder, refundDescBuilder.toString(), originalRefundAmount, refundAmount, RefundTypeEnum.ORDER_FUND.getCode(), RefundStatusEnum.ALL.getCode());
}
public BigDecimal calculateRefund(BigDecimal goodsAmount, Long timeLag, String dicParentKey, StringBuilder refundDescBuilder) {
BigDecimal refundGoodsAmount = goodsAmount;
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Integer hourLag = Long.valueOf(timeLag/(1000L * 60L * 60L)).intValue();
Map<String, Dictionary> dictionaryMap = thirdFeign.dictionaryGetAll4Map().getData();
Set<Dictionary> rentRefunds = dictionaryMap.get(dicParentKey).getChildrens();
for(com.xxfc.platform.universal.entity.Dictionary dic : rentRefunds) {
if(StrUtil.isBlank(dic.getName())) {
continue;
}
String[] names = dic.getName().split("\\|");
if(names.length < 2) {
continue;
}
//符合范围
if(IntervalUtil.staticIsInTheInterval(hourLag.toString(), names[0])){
refundGoodsAmount = new BigDecimal((IntervalUtil.evaluate(dic.getDetail(), new MapContext(){{
//ga : goodsAmount
set("ga", goodsAmount);
}})).toString());
refundDescBuilder = refundDescBuilder.insert(0, names[1]+ ",");
break;
}
}
return refundGoodsAmount;
}
/**
* 退款子流程
* @param baseOrder
* @param refundDesc
* @param refundAmount
* @param refundType
* @param refundStatus
*/
public void refundSubProcess(BaseOrder baseOrder, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, Integer refundType, Integer refundStatus) {
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());
}};
orv.setRefundDesc(refundDesc+ refundAmount.toString());
orv.setRefundAmount(refundAmount.multiply(new BigDecimal("100")).intValue());
refundTradeNo = thirdFeign.refund(orv).getData();
}
//记录订单退款记录
Integer flag = addOrderRefund(baseOrder.getId(), refundDesc, originalRefundAmount, refundAmount, refundTradeNo, refundType);
//更新订单的退款状态和退款时间
if(SYS_TRUE.equals(flag) && null != refundStatus) {
baseOrderBiz.updateSelectiveByIdReT(new BaseOrder(){{
setId(baseOrder.getId());
setRefundStatus(refundStatus);
setRefundTime(System.currentTimeMillis());
setVersion(baseOrder.getVersion());
}});
}
}
/**
* 记录订单退款记录
* @param orderId
* @param refundDesc
* @param refundAmount
* @param refundTradeNo
*/
private Integer addOrderRefund(Integer orderId, String refundDesc, BigDecimal originalRefundAmount, BigDecimal refundAmount, String refundTradeNo, Integer refundType) {
//如果返回的流水为空,则当做失败
Integer refundStatus = SYS_TRUE;
if(StrUtil.isBlank(refundTradeNo)) {
refundStatus = SYS_FALSE;
}
//创建订单退款记录
OrderRefund orderRefund = new OrderRefund(){{
setOrderId(orderId);
setRefundTime(System.currentTimeMillis());
setTradeNo(refundTradeNo);
setRefundType(RefundTypeEnum.ORDER_FUND.getCode());
}};
orderRefund.setOriginalRefundAmount(originalRefundAmount);
orderRefund.setDeductAmount(originalRefundAmount.subtract(refundAmount));
orderRefund.setRefundAmount(refundAmount);
orderRefund.setRefundDesc(refundDesc);
orderRefund.setRefundStatus(refundStatus);
orderRefund.setRefundType(refundType);
insertSelective(orderRefund);
return refundStatus;
}
} }
\ No newline at end of file
package com.xxfc.platform.order.biz.inner;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.IntervalUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.*;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.contant.enumerate.RefundStatusEnum;
import com.xxfc.platform.order.contant.enumerate.RefundTypeEnum;
import com.xxfc.platform.order.entity.*;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.tour.feign.TourFeign;
import com.xxfc.platform.universal.dto.SmsTemplateDTO;
import com.xxfc.platform.universal.entity.Dictionary;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderRefundVo;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.jexl2.MapContext;
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.*;
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.universal.constant.DictionaryKey.*;
/**
* 订单退款记录表
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-06-18 11:08:09
*/
@Slf4j
@Service
public class OrderCancelBiz {
@Autowired
BaseOrderBiz baseOrderBiz;
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Autowired
OrderTourDetailBiz orderTourDetailBiz;
@Autowired
OrderRentVehicleBiz orderRentVehicleBiz;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired
OrderMsgBiz orderMsgBiz;
@Autowired
UserFeign userFeign;
@Autowired
VehicleFeign vehicleFeign;
@Autowired
TourFeign tourFeign;
@Autowired
ThirdFeign thirdFeign;
private static Map<Integer, List<Integer>> cancelAble;
static {
cancelAble = new HashMap<Integer, List<Integer>>();
cancelAble.put(OrderTypeEnum.RENT_VEHICLE.getCode(), new LinkedList<Integer>(){{
add(OrderStatusEnum.ORDER_UNPAY.getCode());
add(OrderStatusEnum.ORDER_TOSTART.getCode());
}});
cancelAble.put(OrderTypeEnum.TOUR.getCode(), new LinkedList<Integer>(){{
add(OrderStatusEnum.ORDER_UNPAY.getCode());
add(OrderStatusEnum.ORDER_TOSTART.getCode());
}});
cancelAble.put(OrderTypeEnum.MEMBER.getCode(), new LinkedList<Integer>(){{
add(OrderStatusEnum.ORDER_UNPAY.getCode());
}});
}
/**
* 取消订单
* @param baseOrder
*/
@Transactional
public void cancel(BaseOrder baseOrder) {
OrderRentVehicleDetail orvd = new OrderRentVehicleDetail();
OrderTourDetail otd = new OrderTourDetail();
OrderMemberDetail omd = new OrderMemberDetail();
if(cancelAble.get(baseOrder.getType()).contains(baseOrder.getStatus())) {
BaseOrder updateOrder = new BaseOrder(){{
setId(baseOrder.getId());
setStatus(OrderStatusEnum.ORDER_CANCEL.getCode());
setCancelReason(baseOrder.getCancelReason());
setVersion(baseOrder.getVersion());
}};
BaseOrder hasUpdateOrder = baseOrderBiz.updateSelectiveByIdReT(updateOrder);
//触发退款流程
//判断是否已支付
if(SYS_TRUE.equals(baseOrder.getHasPay())) {
//判断订单类型
if(OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId());
}});
//如果超过出发时间,不能取消订单
//根据时间处理goodsAmount
//获取出发时间 到现在 距离时间
Long timeLag = orvd.getStartTime() - System.currentTimeMillis();
if(timeLag < 0) {
throw new BaseException(ResultCode.FAILED_CODE, new HashSet<String>(){{
add("已超过出发时间,不能取消订单");
}});
}
//退款流程
orderRefundBiz.rentRefundProcess(hasUpdateOrder, orvd.getDeposit(), timeLag, APP_ORDER+ "_"+ RENT_REFUND);
//已付款的取消订单发送消息
try {
AppUserDTO appUserDTO = userFeign.userDetailById(baseOrder.getUserId()).getData();
//处理后台用户提醒短信的发送
orderMsgBiz.handelBgUserMsg4Pay(orvd, baseOrder, appUserDTO, OrderMsgBiz.RENT_CANCEL);
}catch (Exception e) {
log.error(e.getMessage(), e);
}
}else if (OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId());
}});
Long timeLag = otd.getStartTime() - System.currentTimeMillis();
//判断是省内还是省外
String key = TOUR_IN_REFUND;
if(SYS_TRUE.equals(otd.getIsOutside())) {
key = TOUR_REFUND;
}
//退款流程
orderRefundBiz.rentRefundProcess(hasUpdateOrder, timeLag, APP_ORDER+ "_"+ key);
}
}
//处理取消流程
if(OrderTypeEnum.RENT_VEHICLE.getCode().equals(baseOrder.getType())) {
orvd = orderRentVehicleBiz.selectOne(new OrderRentVehicleDetail(){{
setOrderId(baseOrder.getId());
}});
//取消租车预定
//已支付,并且是待出行状态,取消预约
if(OrderStatusEnum.ORDER_TOSTART.equals(baseOrder.getType()) && SYS_TRUE.equals(baseOrder.getHasPay())){
vehicleFeign.unbookVehicle(orvd.getBookRecordId());
}else {
//未支付,拒绝之前的预约
RestResponse<Integer> restResponse = vehicleFeign.rentRejectVehicleBooking(orvd.getBookRecordId());
}
//取消租车免费天数使用
if(null != orvd.getFreeDays() && orvd.getFreeDays() > 0) {
int result = userFeign.memberDays(baseOrder.getUserId(), orvd.getFreeDays(), UserFeign.MEMBER_DAYS_WITHDRAW);
if(result < 0) {
throw new BaseException(ResultCode.FAILED_CODE);
}
}
}else if(OrderTypeEnum.TOUR.getCode().equals(baseOrder.getType())) {
otd = orderTourDetailBiz.selectOne(new OrderTourDetail(){{
setOrderId(baseOrder.getId());
}});
//增加库存
tourFeign.stock(otd.getSpePriceId(), otd.getTotalNumber(), TourFeign.STOCK_PLUS);
}
//发送队列消息
baseOrderBiz.sendOrderMq(orvd, otd, omd, baseOrder, OrderMQDTO.ORDER_CANCEL);
}else {
throw new BaseException(ResultCode.FAILED_CODE);
}
}
}
\ No newline at end of file
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.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 每天2定时统计前一天的数据
*/
@JobHandler(value = "baseOrderStatistics")
@Component
@Slf4j
public class BaseOrderStatisticsJobHandler extends IJobHandler {
@Autowired
private BaseOrderBiz baseOrderBiz;
@Override
public ReturnT<String> execute(String s) throws Exception {
try {
DailyOrderStatistics dailyOrderStatistics= baseOrderBiz.getTotalOrder();
ReturnT returnT = new ReturnT(){{
setCode(100);
setMsg("成功");
}};
return returnT;
} catch (Exception e) {
XxlJobLogger.log(e);
return FAIL;
} finally {
}
}
}
...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException; ...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.inner.OrderCancelBiz;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
...@@ -26,7 +27,7 @@ import static com.xxfc.platform.order.config.RabbitDelayConfig.ORDER_CANCEL_QUE; ...@@ -26,7 +27,7 @@ import static com.xxfc.platform.order.config.RabbitDelayConfig.ORDER_CANCEL_QUE;
public class RabbitConsumer { public class RabbitConsumer {
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; OrderCancelBiz orderCancelBiz;
/** /**
...@@ -42,7 +43,7 @@ public class RabbitConsumer { ...@@ -42,7 +43,7 @@ public class RabbitConsumer {
//通知 MQ 消息已被接收,可以ACK(从队列中删除)了 //通知 MQ 消息已被接收,可以ACK(从队列中删除)了
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
try { try {
baseOrderBiz.cancel(baseOrder); orderCancelBiz.cancel(baseOrder);
}catch (BaseException e) { }catch (BaseException e) {
if(ResultCode.DB_OPERATION_FAIL_CODE == e.getStatus()) { if(ResultCode.DB_OPERATION_FAIL_CODE == e.getStatus()) {
log.info("取消操作被取消;订单id:"+ baseOrder.getId()); log.info("取消操作被取消;订单id:"+ baseOrder.getId());
......
...@@ -22,6 +22,7 @@ import com.xxfc.platform.order.biz.BaseOrderBiz; ...@@ -22,6 +22,7 @@ import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderMemberDetailBiz; import com.xxfc.platform.order.biz.OrderMemberDetailBiz;
import com.xxfc.platform.order.biz.OrderUserLicenseBiz; import com.xxfc.platform.order.biz.OrderUserLicenseBiz;
import com.xxfc.platform.order.biz.OrderVehicalCrosstownBiz; import com.xxfc.platform.order.biz.OrderVehicalCrosstownBiz;
import com.xxfc.platform.order.biz.inner.OrderCancelBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum; import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderUserLicense; import com.xxfc.platform.order.entity.OrderUserLicense;
...@@ -70,21 +71,30 @@ public class BaseOrderController extends CommonBaseController implements UserRes ...@@ -70,21 +71,30 @@ public class BaseOrderController extends CommonBaseController implements UserRes
public static final Integer STATUS_SUCCESS = 1; public static final Integer STATUS_SUCCESS = 1;
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; BaseOrderBiz baseOrderBiz;
@Autowired
OrderMemberDetailBiz orderMemberDetailBiz;
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
OrderVehicalCrosstownBiz orderVehicalCrosstownBiz;
@Autowired
OrderCancelBiz orderCancelBiz;
@Autowired @Autowired
ThirdFeign thirdFeign; ThirdFeign thirdFeign;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
@Resource @Resource
VehicleFeign vehicleFeign; VehicleFeign vehicleFeign;
@Autowired
RabbitProduct rabbitProduct;
@Autowired @Autowired
OrderMemberDetailBiz orderMemberDetailBiz; RabbitProduct rabbitProduct;
@Autowired
OrderUserLicenseBiz orderUserLicenseBiz;
@Autowired
OrderVehicalCrosstownBiz orderVehicalCrosstownBiz;
@Override @Override
public UserFeign getUserFeign() { public UserFeign getUserFeign() {
...@@ -420,7 +430,7 @@ public class BaseOrderController extends CommonBaseController implements UserRes ...@@ -420,7 +430,7 @@ public class BaseOrderController extends CommonBaseController implements UserRes
} }
dbBaseOrder.setCancelReason(cancelOrderDto.getCancelReason()); dbBaseOrder.setCancelReason(cancelOrderDto.getCancelReason());
baseOrderBiz.cancel(dbBaseOrder); orderCancelBiz.cancel(dbBaseOrder);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
......
...@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.common.util.Query; ...@@ -9,6 +9,7 @@ import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageParam; import com.github.wxiaoqi.security.common.vo.PageParam;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.biz.OrderRefundBiz; import com.xxfc.platform.order.biz.OrderRefundBiz;
import com.xxfc.platform.order.biz.inner.OrderCancelBiz;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderRefund; import com.xxfc.platform.order.entity.OrderRefund;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
...@@ -35,6 +36,9 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -35,6 +36,9 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; BaseOrderBiz baseOrderBiz;
@Autowired
OrderRefundBiz orderRefundBiz;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
...@@ -61,7 +65,7 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -61,7 +65,7 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
switch (orderTypeEnum) { switch (orderTypeEnum) {
case RENT_VEHICLE: case RENT_VEHICLE:
orderRefundAmount = baseOrderBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount()) orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
, orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis() , orderPageVO.getOrderRentVehicleDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND , DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND
, refundDescBuilder); , refundDescBuilder);
...@@ -72,7 +76,7 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe ...@@ -72,7 +76,7 @@ public class OrderRefundController extends BaseController<OrderRefundBiz,OrderRe
if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) { if(SYS_TRUE.equals(orderPageVO.getOrderTourDetail().getIsOutside())) {
key = TOUR_REFUND; key = TOUR_REFUND;
} }
orderRefundAmount = baseOrderBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount()) orderRefundAmount = orderRefundBiz.calculateRefund(orderPageVO.getGoodsAmount().subtract(orderPageVO.getCouponAmount())
, orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis() , orderPageVO.getOrderTourDetail().getStartTime() - System.currentTimeMillis()
, DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND , DictionaryKey.APP_ORDER+ "_"+ DictionaryKey.RENT_REFUND
, refundDescBuilder); , refundDescBuilder);
......
package com.xxfc.platform.vehicle.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* 用车调度申请
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-25 10:13:57
*/
@Data
@Table(name = "vehicle_dispatch_info")
public class VehicleDispatchInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
@Column(name = "account_id")
@ApiModelProperty(value = "账号id")
private Integer accountId;
@Column(name = "account_name")
@ApiModelProperty(value = "账号名称")
private String accountName;
@Column(name = "company_id")
@ApiModelProperty(value = "申请分公司id")
private Integer companyId;
@Column(name = "mode_id")
@ApiModelProperty(value = "车型id")
private Integer modeId;
@Column(name = "user")
@ApiModelProperty(value = "使用人")
private String user;
@Column(name = "user_tel")
@ApiModelProperty(value = "使用人电话")
private String userTel;
@Column(name = "start_time")
@ApiModelProperty(value = "用车开始时间" )
private Long startTime;
@Column(name = "end_time")
@ApiModelProperty(value = "用车结束时间")
private Long endTime;
@Column(name = "wish_ret_company")
@ApiModelProperty(value = "期望还车公司")
private Integer wishRetCompany;
@Column(name = "book_type")
@ApiModelProperty(value = "用途(枚举类)")
private Integer bookType;
@Column(name = "book_remark")
@ApiModelProperty(value = "用途备注")
private String bookRemark;
@Column(name = "reason")
@ApiModelProperty(value = "拒绝原因")
private String reason;
@Column(name = "status")
@ApiModelProperty(value = "状态:0-申请中;1-已通过;2-拒绝")
private Integer status;
@Column(name = "record_ids")
@ApiModelProperty(value = "预约ids(逗号隔开)")
private String recordIds;
@Column(name = "status_time")
@ApiModelProperty(value = "通过审核时间")
private Long statusTime;
@Column(name = "crt_time")
@ApiModelProperty(value = "创建时间")
private Long crtTime;
@Column(name = "upd_time")
@ApiModelProperty(value = "更新时间")
private Long updTime;
@Column(name = "isdel")
@ApiModelProperty(value = "删除状态 0:有效 1:删除")
private Integer isdel;
}
...@@ -92,4 +92,14 @@ public interface VehicleFeign { ...@@ -92,4 +92,14 @@ public interface VehicleFeign {
*/ */
@PostMapping("/sysRegion/getSysRegionByIds") @PostMapping("/sysRegion/getSysRegionByIds")
ObjectRestResponse<List<SysRegion>> getSysRegionByIds(@RequestBody Set<Integer> ids); ObjectRestResponse<List<SysRegion>> getSysRegionByIds(@RequestBody Set<Integer> ids);
/**
* 获取公司所在的城市
* @param zoneList
* @param companyList
* @return
*/
@GetMapping("/city/corporationCity")
ObjectRestResponse<Set<Integer>> corporationCity( @RequestParam(value = "zoneList") String zoneList,
@RequestParam(value = "companyList") String companyList);
} }
package com.xxfc.platform.vehicle.pojo.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class VehicleDispatchInfoDto extends PageParam {
@ApiModelProperty(value = "分公司")
private List<Integer> companyList;
@ApiModelProperty(value = "状态")
private Integer status;
@ApiModelProperty(value = "预定月份")
private String dispatchMonth;
}
package com.xxfc.platform.vehicle.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 用车调度预约记录
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-25 10:13:57
*/
@Data
public class VehiclDispatchRecordVo {
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "提车地点(公司)")
private Integer liftCompany;
@ApiModelProperty(value = "提车地点(公司)名称")
private String liftCompanyName;
@ApiModelProperty(value = "提车分公司联系人")
private String liftCompanyLeader;
@ApiModelProperty(value = "提车分公司联系人电话")
private String liftCompanyLeaderTel;
@ApiModelProperty(value = "实际开始日期(提车时间)")
private Date actualStartDate;
@ApiModelProperty(value = "还车地点(公司)")
private Integer retCompany;
@ApiModelProperty(value = "还车地点(公司)名称")
private String retCompanyName;
@ApiModelProperty(value = "还车分公司联系人")
private String retCompanyLeader;
@ApiModelProperty(value = "还车分公司联系人电话")
private String retCompanyLeaderTel;
@ApiModelProperty(value = "实际结束日期(还车时间)")
private Date actualEndDate;
}
package com.xxfc.platform.vehicle.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 用车调度申请
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-25 10:13:57
*/
@Data
public class VehicleDispatchInfoVo{
@ApiModelProperty("主键id")
private Integer id;
@ApiModelProperty(value = "账号id")
private Integer accountId;
@ApiModelProperty(value = "账号名称")
private String accountName;
@ApiModelProperty(value = "申请分公司id")
private Integer companyId;
@ApiModelProperty(value = "申请分公司名称")
private String companyName;
@ApiModelProperty(value = "车型id")
private Integer modeId;
@ApiModelProperty(value = "使用人")
private String user;
@ApiModelProperty(value = "使用人电话")
private String userTel;
@ApiModelProperty(value = "用车开始时间" )
private Long startTime;
@ApiModelProperty(value = "用车结束时间")
private Long endTime;
@ApiModelProperty(value = "期望还车公司")
private Integer wishRetCompany;
@ApiModelProperty(value = "期望还车公司名称")
private String wishRetCompanyName;
@ApiModelProperty(value = "用途(枚举类)")
private Integer bookType;
@ApiModelProperty(value = "用途备注")
private String bookRemark;
@ApiModelProperty(value = "拒绝原因")
private String reason;
@ApiModelProperty(value = "状态:0-申请中;1-已通过;2-拒绝")
private Integer status;
@ApiModelProperty(value = "预约ids(逗号隔开)")
private String recordIds;
@ApiModelProperty(value = "通过审核时间")
private Long statusTime;
@ApiModelProperty(value = "创建时间")
private Long crtTime;
@ApiModelProperty(value = "更新时间")
private Long updTime;
@ApiModelProperty(value = "删除状态 0:有效 1:删除")
private Integer isdel;
@ApiModelProperty(value = "调度申请用车详情")
List<VehiclDispatchRecordVo> dispatchRecords;
}
...@@ -42,6 +42,7 @@ import java.util.ArrayList; ...@@ -42,6 +42,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -69,6 +70,9 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany ...@@ -69,6 +70,9 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
@Value("${branchCompanyPic.baseUploadPath}") @Value("${branchCompanyPic.baseUploadPath}")
private String baseUploadPath ; private String baseUploadPath ;
@Autowired
private VehicleBiz vehicleBiz;
/** /**
* 按主键获取公司 * 按主键获取公司
* @param id * @param id
...@@ -320,4 +324,21 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany ...@@ -320,4 +324,21 @@ public class BranchCompanyBiz extends BaseBiz<BranchCompanyMapper, BranchCompany
} }
/**
* 通过片区片区和分公司id获取对应的城市信息
* @param zoneList
* @param companyList
* @return
*/
public Set<Integer> getCity(String zoneList, String companyList) {
List<Integer> list = vehicleBiz.dataCompany(zoneList, companyList);
Example exa =new Example(BranchCompany.class);
Example.Criteria criteria = exa.createCriteria();
criteria.andIn("id",list);
List<BranchCompany> result = mapper.selectByExample(exa);
return result.parallelStream().map(BranchCompany::getAddrCity).collect(Collectors.toSet());
}
} }
package com.xxfc.platform.vehicle.biz;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.entity.VehicleDispatchInfo;
import com.xxfc.platform.vehicle.mapper.VehicleDispatchInfoMapper;
import com.xxfc.platform.vehicle.pojo.dto.VehicleDispatchInfoDto;
import com.xxfc.platform.vehicle.pojo.vo.VehiclDispatchRecordVo;
import com.xxfc.platform.vehicle.pojo.vo.VehicleDispatchInfoVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*车辆调度
*/
@Service
@Slf4j
public class VehicleDispatchInfoBiz extends BaseBiz<VehicleDispatchInfoMapper,VehicleDispatchInfo> {
@Autowired
UserFeign userFeign;
@Autowired
private UserAuthConfig userAuthConfig;
@Autowired
VehicleBiz vehicleBiz;
//提交调度申请表单
public ObjectRestResponse addDisspatchInfo(VehicleDispatchInfo vehicleDispatchInfo){
if (vehicleDispatchInfo==null){
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
}
insertSelective(vehicleDispatchInfo);
return ObjectRestResponse.succ();
}
//获取申请列表
public ObjectRestResponse getInfoList(VehicleDispatchInfoDto dispatchInfoDto, HttpServletRequest request){
UserDTO userDTO = userFeign.userinfoByToken(userAuthConfig.getToken(request)).getData();
List<VehicleDispatchInfoVo> list=new ArrayList<>();
Integer pageSize=dispatchInfoDto.getPage()==null?1:dispatchInfoDto.getPage();
Integer pageNo=dispatchInfoDto.getPage()==null?10:dispatchInfoDto.getLimit();
if (userDTO != null) {
List<Integer> companyList=new ArrayList<>();
if (userDTO.getDataAll() == 1) {
companyList=dispatchInfoDto.getCompanyList();
}else {
companyList = vehicleBiz.dataCompany(userDTO.getDataZone(), userDTO.getDataCompany());
}
dispatchInfoDto.setCompanyList(companyList);
list=mapper.getInfoList(dispatchInfoDto);
if (list.size()>0){
for (VehicleDispatchInfoVo vehicleDispatchInfoVo:list){
String recordIds=vehicleDispatchInfoVo.getRecordIds();
if (StringUtils.isBlank(recordIds)){
continue;
}
String[] ids=recordIds.split(",");
List<VehiclDispatchRecordVo> recordVos= mapper.getRecordList(Arrays.asList(ids));
if (recordVos.size()>0) {
vehicleDispatchInfoVo.setDispatchRecords(recordVos);
}
}
}
}
PageHelper.startPage(pageNo,pageSize);
PageInfo<VehicleDispatchInfoVo> pageInfo = new PageInfo<>(list);
return ObjectRestResponse.succ(PageDataVO.pageInfo(pageInfo));
}
}
package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleDispatchInfo;
import com.xxfc.platform.vehicle.pojo.dto.VehicleDispatchInfoDto;
import com.xxfc.platform.vehicle.pojo.vo.VehiclDispatchRecordVo;
import com.xxfc.platform.vehicle.pojo.vo.VehicleDispatchInfoVo;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface VehicleDispatchInfoMapper extends Mapper<VehicleDispatchInfo> {
//获取调度申请列表
List<VehicleDispatchInfoVo> getInfoList(VehicleDispatchInfoDto vehicleDispatchInfoDto);
//获取调度申请用车详情列表
List<VehiclDispatchRecordVo> getRecordList(@Param("recordIds")List<String> recordIds);
}
\ No newline at end of file
...@@ -100,7 +100,7 @@ public class SysRegionController extends BaseController<SysRegionBiz> { ...@@ -100,7 +100,7 @@ public class SysRegionController extends BaseController<SysRegionBiz> {
* @return * @return
*/ */
@PostMapping("/getSysRegionByIds") @PostMapping("/getSysRegionByIds")
ObjectRestResponse<List<SysRegion>> getSysRegionByIds(@RequestBody Set<Integer> ids){ public ObjectRestResponse<List<SysRegion>> getSysRegionByIds(@RequestBody Set<Integer> ids){
Example exam = Example.builder(SysRegion.class) Example exam = Example.builder(SysRegion.class)
.where(WeekendSqls.<SysRegion>custom() .where(WeekendSqls.<SysRegion>custom()
.andIn(SysRegion::getId,ids) .andIn(SysRegion::getId,ids)
......
package com.xxfc.platform.vehicle.rest;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
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.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Maps;
import com.xxfc.platform.vehicle.biz.*;
import com.xxfc.platform.vehicle.common.BaseController;
import com.xxfc.platform.vehicle.common.CustomIllegalParamException;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.constant.BookType;
import com.xxfc.platform.vehicle.constant.ResCode.ResCode;
import com.xxfc.platform.vehicle.constant.VehicleBookRecordStatus;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleBookInfo;
import com.xxfc.platform.vehicle.entity.VehicleBookRecord;
import com.xxfc.platform.vehicle.entity.VehicleDispatchInfo;
import com.xxfc.platform.vehicle.pojo.*;
import com.xxfc.platform.vehicle.pojo.dto.VehicleDispatchInfoDto;
import com.xxfc.platform.vehicle.pojo.dto.VehiclePlanDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP;
import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP_NAME;
@RestController
@RequestMapping("dispatch")
@Slf4j
@IgnoreClientToken
@Api(value="用车调度申请controller",tags={"用车调度申请接口"})
public class VehicleDispatchController extends BaseController<VehicleDispatchInfoBiz> {
@GetMapping("page")
@ApiModelProperty("获取申请列表")
public ObjectRestResponse page(@RequestBody VehicleDispatchInfoDto dispatchInfoDto, HttpServletRequest request){
return baseBiz.getInfoList(dispatchInfoDto,request);
}
@PostMapping("edit")
@ApiModelProperty("获取申请列表")
public ObjectRestResponse edit(@RequestBody VehicleDispatchInfo dispatchInfo){
return baseBiz.addDisspatchInfo(dispatchInfo);
}
}
package com.xxfc.platform.vehicle.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.biz.BranchCompanyBiz;
import com.xxfc.platform.vehicle.biz.VehicleBiz;
import com.xxfc.platform.vehicle.common.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Set;
/**
* 获取公司所在的城市
*
* @author Administrator
*/
@Slf4j
@RestController
@RequestMapping("/city")
public class CityController extends BaseController<VehicleBiz> {
@Autowired
private BranchCompanyBiz branchCompanyBiz;
/**
* 获取公司所在的城市
*
* @param zoneList
* @param companyList
* @return
*/
@GetMapping("/corporationCity")
public ObjectRestResponse<Set<Integer>> corporationCity(
@RequestParam("zoneList") String zoneList,
@RequestParam("companyList") String companyList) {
return ObjectRestResponse.succ(branchCompanyBiz.getCity(zoneList,companyList));
}
}
<?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.vehicle.mapper.VehicleDispatchInfoMapper" >
<!-- 获取调度申请列表-->
<select id="getInfoList" parameterType="com.xxfc.platform.vehicle.pojo.dto.VehicleDispatchInfoDto"
resultType="com.xxfc.platform.vehicle.pojo.vo.VehicleDispatchInfoVo">
SELECT
DISTINCT
i.id,
i.company_id as companyId,
c.`name` as companyName,
i.mode_id as modeId,
i.`user`,
i.user_tel as userTel,
i.start_time as startTime,
i.end_time as endTime,
i.wish_ret_company as wishRetCompany,
c1.`name` as wishRetCompanyName,
i.book_type as bookType,
i.book_remark as bookRemark,
i.reason,
i.`status`,
i.record_ids as recordIds,
i.status_time as statusTime,
i.crt_time as crtTime,
i.upd_time as updTime
FROM vehicle_dispatch_info i
LEFT JOIN branch_company c ON i.company_id=c.id
LEFT JOIN branch_company c1 ON i.company_id=c1.id
<where>
i.is_del=0
<if test="companyList != null">
and i.company_id in (
<trim suffixOverrides=",">
<foreach collection="companyList" item="companyId">
#{companyId},
</foreach>
</trim>
)
</if>
<if test="status !=null">
and i.status = #{status}
</if>
</where>
order by i.crt_time desc
</select>
<!-- 获取调度申请用车详情列表-->
<select id="getRecordList" resultType="com.xxfc.platform.vehicle.pojo.vo.VehiclDispatchRecordVo">
SELECT
DISTINCT
r.id,
r.lift_company as liftCompany,
c.`name` as liftCompanyName,
c.leader as liftCompanyLeader,
c.leader_contact_info as liftCompanyLeaderTel,
r.actual_start_date as actualStartDate,
r.ret_company as retCompany,
c1.`name` as retCompanyName,
c1.leader as retCompanyLeader,
c1.leader_contact_info as retCompanyLeaderTel,
r.actual_end_date as actualEndDate
FROM vehicle_book_record r
LEFT JOIN branch_company c ON r.lift_company=c.id
LEFT JOIN branch_company c1 ON r.ret_company=c1.id
<where>
r.id in (
<trim suffixOverrides=",">
<foreach collection="recordIds" item="id">
#{id},
</foreach>
</trim>
)
</where>
order by i.actual_start_date
</select>
</mapper>
\ No newline at end of file
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