From e4f50565f585ac3bb7355fe7b9da794bb855113f Mon Sep 17 00:00:00 2001
From: 曾富康 <1067864236@qq.com>
Date: 星期一, 22 六月 2026 16:28:35 +0800
Subject: [PATCH] 新增需求
---
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java | 38
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EnterpriseConfigServiceImpl.java | 23
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java | 11
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java | 14
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java | 20
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml | 4
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java | 2
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EnterpriseConfig.java | 90 ++
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java | 39
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml | 13
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_add.html | 21
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java | 2
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js | 23
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml | 6
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js | 13
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java | 8
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java | 2
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java | 80 +
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml | 7
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 45 +
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java | 2
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverProfileAuditServiceImpl.java | 14
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 24
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java | 141 +++
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java | 14
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EnterpriseConfigMapper.java | 21
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig_info.js | 99 ++
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js | 1
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java | 14
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java | 40 +
MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java | 2
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEnterpriseConfigService.java | 21
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_edit.html | 22
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html | 7
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java | 69 +
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java | 56 +
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java | 4
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java | 12
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java | 11
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 38
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java | 14
ManagementYKDTravel/guns-admin/src/test/sql/sys_menu_entry_config.sql | 67 +
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ServerCarModelController.java | 21
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java | 12
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverProfileAuditService.java | 10
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java | 4
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EnterpriseConfigMapper.xml | 29
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_immediately.html | 1
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig.js | 206 +++++
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java | 332 ++++++++
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverMapper.xml | 5
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html | 12
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverProfileAuditMapper.xml | 187 ++++
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig.html | 45 +
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html | 12
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 183 +++
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/EnterpriseConfigController.java | 141 +++
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java | 8
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java | 12
59 files changed, 2,294 insertions(+), 80 deletions(-)
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index 33080fa..b95385c 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -908,6 +908,30 @@
}
}
+ @ResponseBody
+ // 快捷叫车在乘客上车后,由接单司机补充目的地。
+ @PostMapping("/api/order/privateCar/setDestination")
+ @ApiOperation(value = "快车快捷叫车设置目的地", tags = {"司机端-服务中"}, notes = "")
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
+ @ApiImplicitParam(value = "终点经度", name = "endLon", required = true, dataType = "double"),
+ @ApiImplicitParam(value = "终点纬度", name = "endLat", required = true, dataType = "double"),
+ @ApiImplicitParam(value = "终点地址", name = "endAddress", required = true, dataType = "string"),
+ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+ })
+ public ResultUtil setPrivateCarDestination(Integer orderId, Double endLon, Double endLat, String endAddress, HttpServletRequest request){
+ try {
+ Integer uid = driverService.getUserIdFormRedis(request);
+ if(null == uid){
+ return ResultUtil.tokenErr();
+ }
+ return orderPrivateCarService.setDestination(orderId, uid, endLon, endLat, endAddress);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
index ad3db4a..1b592de 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
@@ -78,6 +78,7 @@
<result column="oldState" property="oldState"/>
<result column="telX" property="telX"/>
<result column="bindId" property="bindId"/>
+ <result column="callType" property="callType"/>
<result column="splitAllocation" property="splitAllocation"/>
</resultMap>
@@ -95,6 +96,7 @@
state as state,
orderType as reservation,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
totalPeopleNum as peopleNumber,
driverId as driverId
@@ -116,6 +118,7 @@
state as state,
orderType as reservation,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
totalPeopleNum as peopleNumber,
driverId as driverId
@@ -137,6 +140,7 @@
state as state,
orderType as reservation,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
totalPeopleNum as peopleNumber,
driverId as driverId
@@ -168,6 +172,7 @@
state as state,
orderType as reservation,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
totalPeopleNum as peopleNumber,
driverId as driverId
@@ -198,6 +203,7 @@
state as state,
orderType as reservation,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
totalPeopleNum as peopleNumber,
driverId as driverId
@@ -219,6 +225,7 @@
state as state,
orderType as reservation,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
totalPeopleNum as peopleNumber,
driverId as driverId
@@ -254,6 +261,7 @@
state as state,
peopleNum as peopleNumber,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
orderType as reservation,
orderMoney as orderMoney,
@@ -296,6 +304,7 @@
orderType as orderType,
isReassign as isReassign,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
spellSuccess,
peopleNum as peopleNumber,
companyId as companyId
@@ -328,6 +337,7 @@
a.telX as telX,
a.peopleNum as peopleNumber,
a.rideType as rideType,
+ CAST(IFNULL(a.callType, 1) AS SIGNED) as callType,
a.spellSuccess as spellSuccess,
a.bindId as bindId,
(
@@ -377,6 +387,7 @@
a.telX as telX,
a.peopleNum as peopleNumber,
a.rideType as rideType,
+ CAST(IFNULL(a.callType, 1) AS SIGNED) as callType,
a.bindId as bindId,
(
(select count(id) from t_order_private_car where userId = b.id and state in (8, 9)) +
@@ -667,4 +678,4 @@
select * from t_order_private_car where (state in (8, 9) and telX != '' and telX is not null and (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(endServiceTime)) > 1800) or (state = 10 and telX != '' and telX is not null)
</select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
index 8bf6da1..a802132 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
@@ -402,6 +402,12 @@
@TableField("rideType")
private Integer rideType;
+ /**
+ * 叫车方式(1=普通叫车,2=快捷叫车)
+ */
+ @TableField("callType")
+ private Integer callType;
+
@TableField("pid")
private Integer pid;
@@ -641,6 +647,14 @@
this.rideType = rideType;
}
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
+ }
+
public Integer getPid() {
return pid;
}
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
index e01325c..c0f1e96 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
@@ -74,6 +74,8 @@
*/
ResultUtil process(Integer orderId, Integer state, Double lon, Double lat, String address) throws Exception;
+ ResultUtil setDestination(Integer orderId, Integer uid, Double endLon, Double endLat, String endAddress) throws Exception;
+
/**
* 确认费用操作
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index ea7e4ae..2ebe385 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -559,7 +559,7 @@
orderPrivateCar.setCancelType(2);
this.updateById(orderPrivateCar);
- // TODO: 2020/6/5 推送状态
+ // 待处理:2020/6/5 推送状态
OrderPrivateCar finalOrderPrivateCar = orderPrivateCar;
new Thread(new Runnable() {
@Override
@@ -591,6 +591,42 @@
return ResultUtil.success();
}
+ @Override
+ public ResultUtil setDestination(Integer orderId, Integer uid, Double endLon, Double endLat, String endAddress) throws Exception {
+ // 只允许快捷叫车订单在服务中由接单司机设置终点。
+ if (orderId == null || endLon == null || endLat == null || ToolUtil.isEmpty(endAddress)) {
+ return ResultUtil.error("请设置终点");
+ }
+ OrderPrivateCar orderPrivateCar = this.selectById(orderId);
+ if (orderPrivateCar == null) {
+ return ResultUtil.error("订单不存在");
+ }
+ if (!Integer.valueOf(2).equals(orderPrivateCar.getCallType())) {
+ return ResultUtil.error("非快捷叫车订单不能设置终点");
+ }
+ if (!Integer.valueOf(uid).equals(orderPrivateCar.getDriverId())) {
+ return ResultUtil.error("只能操作本司机订单");
+ }
+ if (!Integer.valueOf(5).equals(orderPrivateCar.getState())) {
+ return ResultUtil.error("乘客上车后才能设置终点");
+ }
+ endAddress = endAddress.replaceAll("& #40;", "(");
+ endAddress = endAddress.replaceAll("& #41;", ")");
+ orderPrivateCar.setEndLon(endLon);
+ orderPrivateCar.setEndLat(endLat);
+ orderPrivateCar.setEndAddress(endAddress);
+ // 设置终点后补算预估里程和时间,方便司机端、用户端和管理端展示。
+ if (orderPrivateCar.getStartLon() != null && orderPrivateCar.getStartLat() != null) {
+ Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), endLon + "," + endLat, 1);
+ orderPrivateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
+ orderPrivateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+ }
+ this.updateById(orderPrivateCar);
+ pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState());
+ return ResultUtil.success();
+ }
+
/**
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java
new file mode 100644
index 0000000..a5aa14c
--- /dev/null
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.DriverProfileAudit;
+
+/**
+ * 司机资料修改审核 Mapper。
+ * 司机端只负责写入待审快照,审核通过后的覆盖逻辑在管理端执行。
+ */
+public interface DriverProfileAuditMapper extends BaseMapper<DriverProfileAudit> {
+}
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java
new file mode 100644
index 0000000..ebbce2c
--- /dev/null
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java
@@ -0,0 +1,332 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 司机资料修改待审核快照。
+ * 已审核司机提交资料修改时先保存到该表,后台审核通过后再覆盖 t_driver。
+ */
+@TableName("t_driver_profile_audit")
+public class DriverProfileAudit {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ @TableField("driverId")
+ private Integer driverId;
+ private String name;
+ private Integer sex;
+ @TableField("idCard")
+ private String idCard;
+ @TableField("companyId")
+ private Integer companyId;
+ @TableField("headImgUrl")
+ private String headImgUrl;
+ @TableField("idCardImgUrl1")
+ private String idCardImgUrl1;
+ @TableField("idCardImgUrl2")
+ private String idCardImgUrl2;
+ @TableField("placeOfEmployment")
+ private String placeOfEmployment;
+ @TableField("driverAddress")
+ private String driverAddress;
+ @TableField("driverContactAddress")
+ private String driverContactAddress;
+ @TableField("driverContactAddress_")
+ private String driverContactAddress_;
+ @TableField("driverAge")
+ private Integer driverAge;
+ @TableField("driveCardImgUrl")
+ private String driveCardImgUrl;
+ @TableField("getDriverLicenseDate")
+ private Date getDriverLicenseDate;
+ @TableField("taxiAptitudeCard")
+ private String taxiAptitudeCard;
+ @TableField("networkCarlssueImg")
+ private String networkCarlssueImg;
+ @TableField("qualificationCertificateImg")
+ private String qualificationCertificateImg;
+ @TableField("vehicleOperationCertificateImg")
+ private String vehicleOperationCertificateImg;
+ @TableField("placeOfPractice")
+ private String placeOfPractice;
+ private String province;
+ @TableField("provinceCode")
+ private String provinceCode;
+ private String city;
+ @TableField("cityCode")
+ private String cityCode;
+ private String area;
+ @TableField("areaCode")
+ private String areaCode;
+ @TableField("serviceType")
+ private String serviceType;
+ @TableField("auditState")
+ private Integer auditState;
+ @TableField("submitTime")
+ private Date submitTime;
+ @TableField("auditTime")
+ private Date auditTime;
+ @TableField("auditUser")
+ private Integer auditUser;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getDriverId() {
+ return driverId;
+ }
+
+ public void setDriverId(Integer driverId) {
+ this.driverId = driverId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getSex() {
+ return sex;
+ }
+
+ public void setSex(Integer sex) {
+ this.sex = sex;
+ }
+
+ public String getIdCard() {
+ return idCard;
+ }
+
+ public void setIdCard(String idCard) {
+ this.idCard = idCard;
+ }
+
+ public Integer getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(Integer companyId) {
+ this.companyId = companyId;
+ }
+
+ public String getHeadImgUrl() {
+ return headImgUrl;
+ }
+
+ public void setHeadImgUrl(String headImgUrl) {
+ this.headImgUrl = headImgUrl;
+ }
+
+ public String getIdCardImgUrl1() {
+ return idCardImgUrl1;
+ }
+
+ public void setIdCardImgUrl1(String idCardImgUrl1) {
+ this.idCardImgUrl1 = idCardImgUrl1;
+ }
+
+ public String getIdCardImgUrl2() {
+ return idCardImgUrl2;
+ }
+
+ public void setIdCardImgUrl2(String idCardImgUrl2) {
+ this.idCardImgUrl2 = idCardImgUrl2;
+ }
+
+ public String getPlaceOfEmployment() {
+ return placeOfEmployment;
+ }
+
+ public void setPlaceOfEmployment(String placeOfEmployment) {
+ this.placeOfEmployment = placeOfEmployment;
+ }
+
+ public String getDriverAddress() {
+ return driverAddress;
+ }
+
+ public void setDriverAddress(String driverAddress) {
+ this.driverAddress = driverAddress;
+ }
+
+ public String getDriverContactAddress() {
+ return driverContactAddress;
+ }
+
+ public void setDriverContactAddress(String driverContactAddress) {
+ this.driverContactAddress = driverContactAddress;
+ }
+
+ public String getDriverContactAddress_() {
+ return driverContactAddress_;
+ }
+
+ public void setDriverContactAddress_(String driverContactAddress_) {
+ this.driverContactAddress_ = driverContactAddress_;
+ }
+
+ public Integer getDriverAge() {
+ return driverAge;
+ }
+
+ public void setDriverAge(Integer driverAge) {
+ this.driverAge = driverAge;
+ }
+
+ public String getDriveCardImgUrl() {
+ return driveCardImgUrl;
+ }
+
+ public void setDriveCardImgUrl(String driveCardImgUrl) {
+ this.driveCardImgUrl = driveCardImgUrl;
+ }
+
+ public Date getGetDriverLicenseDate() {
+ return getDriverLicenseDate;
+ }
+
+ public void setGetDriverLicenseDate(Date getDriverLicenseDate) {
+ this.getDriverLicenseDate = getDriverLicenseDate;
+ }
+
+ public String getTaxiAptitudeCard() {
+ return taxiAptitudeCard;
+ }
+
+ public void setTaxiAptitudeCard(String taxiAptitudeCard) {
+ this.taxiAptitudeCard = taxiAptitudeCard;
+ }
+
+ public String getNetworkCarlssueImg() {
+ return networkCarlssueImg;
+ }
+
+ public void setNetworkCarlssueImg(String networkCarlssueImg) {
+ this.networkCarlssueImg = networkCarlssueImg;
+ }
+
+ public String getQualificationCertificateImg() {
+ return qualificationCertificateImg;
+ }
+
+ public void setQualificationCertificateImg(String qualificationCertificateImg) {
+ this.qualificationCertificateImg = qualificationCertificateImg;
+ }
+
+ public String getVehicleOperationCertificateImg() {
+ return vehicleOperationCertificateImg;
+ }
+
+ public void setVehicleOperationCertificateImg(String vehicleOperationCertificateImg) {
+ this.vehicleOperationCertificateImg = vehicleOperationCertificateImg;
+ }
+
+ public String getPlaceOfPractice() {
+ return placeOfPractice;
+ }
+
+ public void setPlaceOfPractice(String placeOfPractice) {
+ this.placeOfPractice = placeOfPractice;
+ }
+
+ public String getProvince() {
+ return province;
+ }
+
+ public void setProvince(String province) {
+ this.province = province;
+ }
+
+ public String getProvinceCode() {
+ return provinceCode;
+ }
+
+ public void setProvinceCode(String provinceCode) {
+ this.provinceCode = provinceCode;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ public String getCityCode() {
+ return cityCode;
+ }
+
+ public void setCityCode(String cityCode) {
+ this.cityCode = cityCode;
+ }
+
+ public String getArea() {
+ return area;
+ }
+
+ public void setArea(String area) {
+ this.area = area;
+ }
+
+ public String getAreaCode() {
+ return areaCode;
+ }
+
+ public void setAreaCode(String areaCode) {
+ this.areaCode = areaCode;
+ }
+
+ public String getServiceType() {
+ return serviceType;
+ }
+
+ public void setServiceType(String serviceType) {
+ this.serviceType = serviceType;
+ }
+
+ public Integer getAuditState() {
+ return auditState;
+ }
+
+ public void setAuditState(Integer auditState) {
+ this.auditState = auditState;
+ }
+
+ public Date getSubmitTime() {
+ return submitTime;
+ }
+
+ public void setSubmitTime(Date submitTime) {
+ this.submitTime = submitTime;
+ }
+
+ public Date getAuditTime() {
+ return auditTime;
+ }
+
+ public void setAuditTime(Date auditTime) {
+ this.auditTime = auditTime;
+ }
+
+ public Integer getAuditUser() {
+ return auditUser;
+ }
+
+ public void setAuditUser(Integer auditUser) {
+ this.auditUser = auditUser;
+ }
+}
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 21cff7b..62a29a2 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -67,6 +67,9 @@
private DriverServiceMapper driverServiceMapper;
@Resource
+ private DriverProfileAuditMapper driverProfileAuditMapper;
+
+ @Resource
private UserInfoMapper userInfoMapper;
@Resource
@@ -385,6 +388,66 @@
return ResultUtil.error("实名认证失败,请输入正确的姓名和身份证号码");
}
+ Integer driverAge = null;
+ if (registeredWarpper.getGetDriverLicenseDate() != null) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(registeredWarpper.getGetDriverLicenseDate());
+ Calendar now = Calendar.getInstance();
+ now.setTime(new Date());
+ driverAge = now.get(Calendar.YEAR) - calendar.get(Calendar.YEAR);
+ }
+
+ // 已审核通过的司机修改资料时,先写入待审核表;审核通过前不覆盖司机主表,避免司机端提前展示新资料。
+ if (driver != null && Integer.valueOf(2).equals(driver.getAuthState())) {
+ if(registeredWarpper.getCompanyId()==null){
+ return ResultUtil.error("请选择服务商");
+ }
+ // 同一司机只保留一条待审核资料,重复提交时覆盖上一条待审内容。
+ List<DriverProfileAudit> audits = driverProfileAuditMapper.selectList(new EntityWrapper<DriverProfileAudit>().eq("driverId", uid).eq("auditState", 1).last("limit 1"));
+ DriverProfileAudit audit = audits.isEmpty() ? null : audits.get(0);
+ if (audit == null) {
+ audit = new DriverProfileAudit();
+ audit.setDriverId(uid);
+ }
+ audit.setName(registeredWarpper.getName());
+ audit.setSex(registeredWarpper.getSex());
+ audit.setIdCard(registeredWarpper.getIdCard());
+ audit.setArea(registeredWarpper.getArea());
+ audit.setAreaCode(registeredWarpper.getPlaceOfEmployment());
+ audit.setCity(registeredWarpper.getCity());
+ audit.setCityCode(registeredWarpper.getCityCode());
+ audit.setProvince(registeredWarpper.getProvince());
+ audit.setProvinceCode(registeredWarpper.getProvinceCode());
+ audit.setCompanyId(registeredWarpper.getCompanyId());
+ audit.setHeadImgUrl(registeredWarpper.getHeadImgUrl());
+ audit.setIdCardImgUrl1(registeredWarpper.getIdCardImgUrl1());
+ audit.setIdCardImgUrl2(registeredWarpper.getIdCardImgUrl2());
+ audit.setPlaceOfEmployment(registeredWarpper.getPlaceOfEmployment());
+ audit.setDriverAddress(registeredWarpper.getDriverContactAddress());
+ audit.setDriverContactAddress(registeredWarpper.getDriverContactAddress());
+ audit.setDriverContactAddress_(registeredWarpper.getDriverContactAddress_());
+ audit.setPlaceOfPractice(registeredWarpper.getPlaceOfPractice());
+ audit.setQualificationCertificateImg(registeredWarpper.getQualificationCertificateImg());
+ audit.setVehicleOperationCertificateImg(registeredWarpper.getVehicleOperationCertificateImg());
+ audit.setDriverAge(driverAge);
+ audit.setDriveCardImgUrl(registeredWarpper.getDriveCardImgUrl());
+ audit.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate());
+ audit.setTaxiAptitudeCard(registeredWarpper.getTaxiAptitudeCard());
+ audit.setNetworkCarlssueImg(registeredWarpper.getNetworkCarlssueImg());
+ audit.setServiceType(registeredWarpper.getType());
+ audit.setAuditState(1);
+ audit.setSubmitTime(new Date());
+ audit.setAuditTime(null);
+ audit.setAuditUser(null);
+ if (audit.getId() == null) {
+ driverProfileAuditMapper.insert(audit);
+ } else {
+ driverProfileAuditMapper.updateById(audit);
+ }
+ return ResultUtil.success("提交成功,请等待审核", new JSONObject());
+ }
+
+ // 未审核司机仍按原注册完善资料流程直接写入主表,由原司机注册审核流程处理。
driver.setName(registeredWarpper.getName());
driver.setSex(registeredWarpper.getSex());
driver.setIdCard(registeredWarpper.getIdCard());
@@ -412,11 +475,7 @@
driver.setVehicleOperationCertificateImg(registeredWarpper.getVehicleOperationCertificateImg());
driver.setPlaceOfPractice(registeredWarpper.getPlaceOfPractice());
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(registeredWarpper.getGetDriverLicenseDate());
- Calendar now = Calendar.getInstance();
- now.setTime(new Date());
- driver.setDriverAge(now.get(Calendar.YEAR) - calendar.get(Calendar.YEAR));
+ driver.setDriverAge(driverAge);
driver.setDriveCardImgUrl(registeredWarpper.getDriveCardImgUrl());
driver.setGetDriverLicenseDate(registeredWarpper.getGetDriverLicenseDate());
driver.setTaxiAptitudeCard(registeredWarpper.getTaxiAptitudeCard());
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
index 5ef140f..bf0f6f6 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
@@ -508,6 +508,8 @@
@ApiModelProperty("乘车类型(1=独享,2=一口价,3=拼车)")
private Integer rideType;
+ @ApiModelProperty("叫车方式(1=普通叫车,2=快捷叫车)")
+ private Integer callType;
@ApiModelProperty("是否拼车成功(0未成功,1成功)")
private Integer spellSuccess;
@@ -538,6 +540,14 @@
public void setRideType(Integer rideType) {
this.rideType = rideType;
+ }
+
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
}
public String getContactPersonPhone() {
@@ -611,6 +621,7 @@
if(null != map){
orderInfoWarpper.setCanOperation(null != map.get("canOperation") ? Integer.valueOf(String.valueOf(map.get("canOperation"))) : 1);
orderInfoWarpper.setRideType(null != map.get("rideType") ? Integer.valueOf(String.valueOf(map.get("rideType"))) : 1);
+ orderInfoWarpper.setCallType(null != map.get("callType") ? Integer.valueOf(String.valueOf(map.get("callType"))) : 1);
orderInfoWarpper.setOrderId(null != map.get("orderId") ? Integer.valueOf(String.valueOf(map.get("orderId"))) : 0);
orderInfoWarpper.setOrderState(null != map.get("orderState") ? Integer.valueOf(String.valueOf(map.get("orderState"))) : 0);
orderInfoWarpper.setOrderName(null != map.get("orderName") ? String.valueOf(map.get("orderName")) : "");
diff --git a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java
index 48bc97e..dacde4e 100644
--- a/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java
+++ b/DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java
@@ -53,6 +53,9 @@
@ApiModelProperty("乘车类型(1=独享,2=一口价,3=拼车)")
private Integer rideType;
+ @ApiModelProperty("叫车方式(1=普通叫车,2=快捷叫车)")
+ private Integer callType;
+
@ApiModelProperty("是否拼单成功(0未成功,1成功)")
private Integer spellSuccess;
@@ -70,6 +73,14 @@
public void setRideType(Integer rideType) {
this.rideType = rideType;
+ }
+
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
}
public Integer getTimeOutState() {
@@ -258,6 +269,7 @@
OrderListWarpper orderListWarpper = new OrderListWarpper();
orderListWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
orderListWarpper.setRideType(null != map.get("rideType") ? Integer.valueOf(String.valueOf(map.get("rideType"))) : 1);
+ orderListWarpper.setCallType(null != map.get("callType") ? Integer.valueOf(String.valueOf(map.get("callType"))) : 1);
orderListWarpper.setSpellSuccess(null != map.get("spellSuccess") ? Integer.valueOf(String.valueOf(map.get("spellSuccess"))) : 0);
if (map.get("reservation") != null) {
if (Integer.parseInt(map.get("reservation").toString()) == 1) {
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/EnterpriseConfigController.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/EnterpriseConfigController.java
new file mode 100644
index 0000000..67ac19d
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/EnterpriseConfigController.java
@@ -0,0 +1,141 @@
+package com.stylefeng.guns.modular.system.controller.general;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.base.tips.ErrorTip;
+import com.stylefeng.guns.core.common.constant.factory.PageFactory;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.util.SinataUtil;
+import com.stylefeng.guns.modular.system.model.EnterpriseConfig;
+import com.stylefeng.guns.modular.system.service.IEnterpriseConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 企业配置管理控制器
+ */
+@Controller
+@RequestMapping("/enterpriseConfig")
+public class EnterpriseConfigController extends BaseController {
+
+ private String PREFIX = "/system/enterpriseConfig/";
+
+ @Autowired
+ private IEnterpriseConfigService enterpriseConfigService;
+
+ /**
+ * 跳转到企业配置管理首页
+ */
+ @RequestMapping("")
+ public String index() {
+ return PREFIX + "enterpriseConfig.html";
+ }
+
+ /**
+ * 跳转到添加企业配置
+ */
+ @RequestMapping("/enterpriseConfig_add")
+ public String enterpriseConfigAdd() {
+ return PREFIX + "enterpriseConfig_add.html";
+ }
+
+ /**
+ * 跳转到编辑企业配置
+ */
+ @RequestMapping("/enterpriseConfig_update/{enterpriseConfigId}")
+ public String enterpriseConfigUpdate(@PathVariable Integer enterpriseConfigId, Model model) {
+ EnterpriseConfig enterpriseConfig = enterpriseConfigService.selectById(enterpriseConfigId);
+ model.addAttribute("item", enterpriseConfig);
+ LogObjectHolder.me().set(enterpriseConfig);
+ return PREFIX + "enterpriseConfig_edit.html";
+ }
+
+ /**
+ * 获取企业配置管理列表
+ */
+ @RequestMapping(value = "/list")
+ @ResponseBody
+ public Object list(String enterpriseName) {
+ Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+ page.setRecords(enterpriseConfigService.getEnterpriseConfigList(page, enterpriseName));
+ return super.packForBT(page);
+ }
+
+ /**
+ * 新增企业配置
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(EnterpriseConfig enterpriseConfig) {
+ if (SinataUtil.isEmpty(enterpriseConfig.getEnterpriseName())) {
+ return new ErrorTip(500, "企业名称不能为空");
+ }
+ enterpriseConfig.setInsertTime(new Date());
+ enterpriseConfig.setInsertUserId(ShiroKit.getUser().getId());
+ enterpriseConfig.setInsertUserName(ShiroKit.getUser().getName());
+ enterpriseConfig.setState(1);
+ enterpriseConfigService.insert(enterpriseConfig);
+ return SUCCESS_TIP;
+ }
+
+ /**
+ * 修改企业配置
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(EnterpriseConfig enterpriseConfig) {
+ if (SinataUtil.isEmpty(enterpriseConfig.getEnterpriseName())) {
+ return new ErrorTip(500, "企业名称不能为空");
+ }
+ EnterpriseConfig oldEnterpriseConfig = enterpriseConfigService.selectById(enterpriseConfig.getId());
+ oldEnterpriseConfig.setEnterpriseName(enterpriseConfig.getEnterpriseName());
+ enterpriseConfigService.updateById(oldEnterpriseConfig);
+ return SUCCESS_TIP;
+ }
+
+ /**
+ * 删除企业配置
+ */
+ @RequestMapping(value = "/delete")
+ @ResponseBody
+ public Object delete(@RequestParam Integer enterpriseConfigId) {
+ EnterpriseConfig enterpriseConfig = enterpriseConfigService.selectById(enterpriseConfigId);
+ enterpriseConfig.setState(3);
+ enterpriseConfigService.updateById(enterpriseConfig);
+ return SUCCESS_TIP;
+ }
+
+ /**
+ * 启用企业配置
+ */
+ @RequestMapping(value = "/enable")
+ @ResponseBody
+ public Object enable(@RequestParam Integer enterpriseConfigId) {
+ return updateState(enterpriseConfigId, 1);
+ }
+
+ /**
+ * 停用企业配置
+ */
+ @RequestMapping(value = "/disable")
+ @ResponseBody
+ public Object disable(@RequestParam Integer enterpriseConfigId) {
+ return updateState(enterpriseConfigId, 2);
+ }
+
+ private Object updateState(Integer enterpriseConfigId, Integer state) {
+ EnterpriseConfig enterpriseConfig = enterpriseConfigService.selectById(enterpriseConfigId);
+ enterpriseConfig.setState(state);
+ enterpriseConfigService.updateById(enterpriseConfig);
+ return SUCCESS_TIP;
+ }
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
index b5e7a56..abb36cc 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -9,6 +9,7 @@
import com.stylefeng.guns.core.base.tips.ErrorTip;
import com.stylefeng.guns.core.common.constant.factory.PageFactory;
import com.stylefeng.guns.core.log.LogObjectHolder;
+import com.stylefeng.guns.core.page.PageInfoBT;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.core.shiro.ShiroUser;
import com.stylefeng.guns.core.util.DateUtil;
@@ -16,6 +17,7 @@
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.core.util.WoUtil;
import com.stylefeng.guns.modular.system.dao.DriverPunishMapper;
+import com.stylefeng.guns.modular.system.dao.DriverProfileAuditMapper;
import com.stylefeng.guns.modular.system.dao.DriverTrainMapper;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
@@ -65,6 +67,9 @@
private ITDriverServiceService tDriverServiceService;
@Autowired
+ private IDriverProfileAuditService driverProfileAuditService;
+
+ @Autowired
private ITDriverLineService tDriverLineService;
@Autowired
@@ -81,6 +86,9 @@
@Resource
private DriverPunishMapper driverPunishMapper;
+
+ @Resource
+ private DriverProfileAuditMapper driverProfileAuditMapper;
@Resource
private RedisTemplate<String, Object> redisTemplate;
@@ -111,6 +119,8 @@
@Autowired
private IDriverWorkService iDriverWorkService;
+ @Autowired
+ private IEnterpriseConfigService enterpriseConfigService;
@Autowired
private ITRegionService regionService;
@Autowired
@@ -212,6 +222,7 @@
List<TRegion> provinceList = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0));
model.addAttribute("provinceList",provinceList);
+ model.addAttribute("enterpriseConfigList", getEnableEnterpriseConfigList());
return PREFIX + "tDriver_add.html";
}
@@ -219,8 +230,20 @@
* 跳转到修改审核司机
*/
@RequestMapping("/tDriver_immediately/{tDriverId}")
- public String tDriver_immediately(@PathVariable Integer tDriverId, Model model) {
- Map<String, Object> tDriver = tDriverService.getDriverById(tDriverId);
+ public String tDriver_immediately(@PathVariable Integer tDriverId, Model model, Integer auditType) {
+ Map<String, Object> tDriver;
+ // auditType=2 表示资料修改审核,详情页展示待审核表中的新资料。
+ if (Integer.valueOf(2).equals(auditType)) {
+ tDriver = driverProfileAuditMapper.getProfileAuditById(tDriverId);
+ if (tDriver == null) {
+ model.addAttribute("item", new HashMap<String, Object>());
+ model.addAttribute("placeOfPractice", "");
+ return PREFIX + "tDriver_immediately.html";
+ }
+ } else {
+ tDriver = tDriverService.getDriverById(tDriverId);
+ tDriver.put("auditType", 1);
+ }
model.addAttribute("item",tDriver);
//处理从业地字段
@@ -411,7 +434,12 @@
//省
List<TRegion> provinceList = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0));
model.addAttribute("provinceList",provinceList);
+ model.addAttribute("enterpriseConfigList", getEnableEnterpriseConfigList());
return PREFIX + "tDriver_edit.html";
+ }
+
+ private List<EnterpriseConfig> getEnableEnterpriseConfigList() {
+ return enterpriseConfigService.selectList(new EntityWrapper<EnterpriseConfig>().eq("state", 1).orderBy("id", false));
}
/**
@@ -773,13 +801,23 @@
endTime = timeArray[1];
}
Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+ List<Map<String, Object>> records;
+ // 审核列表同时展示注册审核和资料修改审核,前端通过 auditType 区分审核类型。
if (ShiroKit.getUser().getRoleType() != 1) {
User user = userService.selectById(ShiroKit.getUser().getId());
- page.setRecords(tDriverService.getAuthDriverList(page, beginTime, endTime, companyName, phone, account, addType, authState, user.getObjectId()));
+ records = tDriverService.getAuthDriverList(new Page<Map<String, Object>>(1, 100000), beginTime, endTime, companyName, phone, account, addType, authState, user.getObjectId());
+ records.addAll(driverProfileAuditMapper.getProfileAuditList(new Page<Map<String, Object>>(1, 100000), beginTime, endTime, companyName, phone, account, addType, authState, user.getObjectId()));
} else {
- page.setRecords(tDriverService.getAuthDriverList(page, beginTime, endTime, companyName, phone, account, addType, authState, null));
+ records = tDriverService.getAuthDriverList(new Page<Map<String, Object>>(1, 100000), beginTime, endTime, companyName, phone, account, addType, authState, null);
+ records.addAll(driverProfileAuditMapper.getProfileAuditList(new Page<Map<String, Object>>(1, 100000), beginTime, endTime, companyName, phone, account, addType, authState, null));
}
- return super.packForBT(page);
+ records.sort((o1, o2) -> String.valueOf(o2.get("insertTime")).compareTo(String.valueOf(o1.get("insertTime"))));
+ int fromIndex = Math.min((page.getCurrent() - 1) * page.getSize(), records.size());
+ int toIndex = Math.min(fromIndex + page.getSize(), records.size());
+ PageInfoBT<Map<String, Object>> result = new PageInfoBT<>(page);
+ result.setRows(records.subList(fromIndex, toIndex));
+ result.setTotal(records.size());
+ return result;
}
/**
@@ -836,8 +874,38 @@
*/
@RequestMapping(value = "/authOpt")
@ResponseBody
- public Object authOpt(Integer id,Integer authState) {
+ public Object authOpt(Integer id,Integer authState,Integer auditType) {
if (SinataUtil.isNotEmpty(id) && SinataUtil.isNotEmpty(authState)){
+ // 资料修改审核通过后才把待审资料覆盖到司机主表;拒绝时只更新待审记录状态。
+ if (Integer.valueOf(2).equals(auditType)) {
+ DriverProfileAudit audit = driverProfileAuditService.selectById(id);
+ if (audit == null) {
+ return new ErrorTip(500, "审核记录不存在");
+ }
+ if (1 == authState) {
+ driverProfileAuditMapper.applyToDriver(audit);
+ // 服务模式以待审记录为准重建,避免旧服务模式残留。
+ tDriverServiceService.delete(new EntityWrapper<TDriverService>().eq("driverId", audit.getDriverId()));
+ if (SinataUtil.isNotEmpty(audit.getServiceType())) {
+ String[] split = audit.getServiceType().split(",");
+ for (String t : split) {
+ if (SinataUtil.isNotEmpty(t)) {
+ TDriverService driverService = new TDriverService();
+ driverService.setDriverId(audit.getDriverId());
+ driverService.setType(Integer.valueOf(t));
+ tDriverServiceService.insert(driverService);
+ }
+ }
+ }
+ audit.setAuditState(2);
+ } else {
+ audit.setAuditState(4);
+ }
+ audit.setAuditTime(new Date());
+ audit.setAuditUser(ShiroKit.getUser().getId());
+ driverProfileAuditService.updateById(audit);
+ return SUCCESS_TIP;
+ }
ShiroUser user1 = ShiroKit.getUser();
User user2 = userService.selectById(user1.getId());
TDriver tDriver = tDriverService.selectById(id);
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java
index 09109c6..ebff85a 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TAbnormalOrderCarController.java
@@ -295,7 +295,7 @@
// 快车
if(type==1){
page.setRecords(tOrderPrivateCarService.getPrivateCarOrderList(page, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(),
- orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus, null, travelId));
+ orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, null, abnormal, promotion, promotionUser,abnormalStatus, null, travelId));
return super.packForBT(page);
// 跨城
}else if(type==2){
@@ -339,7 +339,7 @@
List<Map<String, Object>> list=new ArrayList<>();
if(type==1){
list = tOrderPrivateCarService.getPrivateCarOrderListExport(null, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(),
- orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus, travelId);
+ orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, null, abnormal, promotion, promotionUser,abnormalStatus, travelId);
}else if(type==2){
list = tOrderCrossCityService.getCrossCityOrderListExport(null, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(), orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, null, state, abnormal, promotion, promotionUser,abnormalStatus, travelId);
}else if(type==3){
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
index abd6ce7..0ee3bd1 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
@@ -139,6 +139,7 @@
String driver,
Integer state,
Integer rideType,
+ Integer callType,
Integer abnormal,
Integer promotion,
String promotionUser,
@@ -153,7 +154,7 @@
}
Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
page.setRecords(tOrderPrivateCarService.getPrivateCarOrderList(page, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(),
- orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,null, payType, travelId));
+ orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, callType, abnormal, promotion, promotionUser,null, payType, travelId));
return super.packForBT(page);
}
@@ -171,6 +172,7 @@
String driver,
Integer state,
Integer rideType,
+ Integer callType,
Integer abnormal,
Integer promotion,
String promotionUser, Integer payType, String travelId, HttpServletRequest request, HttpServletResponse response) {
@@ -183,7 +185,7 @@
endTime = timeArray[1];
}
List<Map<String, Object>> list = tOrderPrivateCarService.getPrivateCarOrderListExport(null, beginTime, endTime, ShiroKit.getUser().getRoleType(), ShiroKit.getUser().getObjectId(),
- orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,null, travelId);
+ orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId, driver, state, rideType, callType, abnormal, promotion, promotionUser,null, travelId);
// 表格数据【封装】
List<List<String>> dataList = new ArrayList<>();
@@ -201,6 +203,7 @@
shellList.add("订单中心编号");
shellList.add("订单来源");
shellList.add("订单类型");
+ shellList.add("叫车方式");
shellList.add("乘车时间");
shellList.add("下单用户昵称");
shellList.add("下单用户手机");
@@ -283,6 +286,12 @@
break;
}
+ }
+
+ if(SinataUtil.isNotEmpty(object.get("callType")) && "2".equals(object.get("callType").toString())){
+ shellList.add("快捷叫车");
+ }else{
+ shellList.add("普通叫车");
}
if(SinataUtil.isNotEmpty(object.get("travelTime"))){
@@ -609,6 +618,11 @@
@RequestMapping("/add")
@ResponseBody
public Object add(TOrderPrivateCar privateCar) {
+ // 管理端未选择叫车方式时按普通叫车处理。
+ if (privateCar.getCallType() == null) {
+ privateCar.setCallType(1);
+ }
+ boolean quickCall = Integer.valueOf(2).equals(privateCar.getCallType());
TUser user = userService.selectOne(new EntityWrapper<TUser>().eq("phone", privateCar.getPassengersPhone()));
if (ToolUtil.isNotEmpty(user)) {/// 用户是平台用户
if (hasUnfinishedTravelOrder(user.getId())) {
@@ -628,11 +642,17 @@
privateCar.setPlacementLat(privateCar.getStartLat());
privateCar.setPlacementLon(privateCar.getStartLon());
privateCar.setStartAddress(ToolUtil.formatting(privateCar.getStartAddress()));
- privateCar.setEndAddress(ToolUtil.formatting(privateCar.getEndAddress()));
+ // 快捷叫车允许暂不填写终点,终点由司机服务中补充。
+ if (!quickCall) {
+ privateCar.setEndAddress(ToolUtil.formatting(privateCar.getEndAddress()));
+ }
/// 判断是否为预约单
long travelTime = privateCar.getTravelTime().getTime();
long momengtTime = new Date().getTime();
- if ((travelTime - momengtTime) > 10 * 60 * 1000) {
+ // 快捷叫车只支持实时单。
+ if (quickCall) {
+ privateCar.setOrderType(1);
+ } else if ((travelTime - momengtTime) > 10 * 60 * 1000) {
privateCar.setOrderType(2);
} else {
privateCar.setOrderType(1);
@@ -662,12 +682,18 @@
privateCar.setPlacementLat(privateCar.getStartLat());
privateCar.setPlacementLon(privateCar.getStartLon());
privateCar.setStartAddress(ToolUtil.formatting(privateCar.getStartAddress()));
- privateCar.setEndAddress(ToolUtil.formatting(privateCar.getEndAddress()));
+ // 快捷叫车允许暂不填写终点,终点由司机服务中补充。
+ if (!quickCall) {
+ privateCar.setEndAddress(ToolUtil.formatting(privateCar.getEndAddress()));
+ }
/// 判断是否为预约单
long travelTime = privateCar.getTravelTime().getTime();
long momengtTime = new Date().getTime();
- if ((travelTime - momengtTime) > 10 * 60 * 1000) {
+ // 快捷叫车只支持实时单。
+ if (quickCall) {
+ privateCar.setOrderType(1);
+ } else if ((travelTime - momengtTime) > 10 * 60 * 1000) {
privateCar.setOrderType(2);
} else {
privateCar.setOrderType(1);
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java
new file mode 100644
index 0000000..4cb5677
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverProfileAuditMapper.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.modular.system.model.DriverProfileAudit;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 司机资料修改审核 Mapper。
+ * 管理端使用该 Mapper 查询待审列表、查看待审详情,并在审核通过后覆盖司机主表。
+ */
+public interface DriverProfileAuditMapper extends BaseMapper<DriverProfileAudit> {
+
+ /**
+ * 查询资料修改审核列表,返回字段与原注册审核列表保持一致,便于前端合并展示。
+ */
+ List<Map<String,Object>> getProfileAuditList(@Param("page") Page<Map<String, Object>> page,
+ @Param("beginTime") String beginTime,
+ @Param("endTime") String endTime,
+ @Param("companyName") String companyName,
+ @Param("phone") String phone,
+ @Param("account") String account,
+ @Param("addType") Integer addType,
+ @Param("authState") Integer authState,
+ @Param("companyId") Integer companyId);
+
+ /**
+ * 查询资料修改审核详情,详情页展示司机本次提交的新资料。
+ */
+ Map<String,Object> getProfileAuditById(@Param("id") Integer id);
+
+ /**
+ * 审核通过后,将待审快照覆盖到 t_driver;审核拒绝时不调用。
+ */
+ void applyToDriver(@Param("audit") DriverProfileAudit audit);
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EnterpriseConfigMapper.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EnterpriseConfigMapper.java
new file mode 100644
index 0000000..3e38d91
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/EnterpriseConfigMapper.java
@@ -0,0 +1,21 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.stylefeng.guns.modular.system.model.EnterpriseConfig;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 企业配置管理 Mapper
+ */
+public interface EnterpriseConfigMapper extends BaseMapper<EnterpriseConfig> {
+
+ /**
+ * 企业配置管理分页列表
+ */
+ List<Map<String, Object>> getEnterpriseConfigList(@Param("page") Page<Map<String, Object>> page,
+ @Param("enterpriseName") String enterpriseName);
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
index 0eb3a69..d26ada9 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TOrderPrivateCarMapper.java
@@ -38,6 +38,7 @@
@Param("driver") String driver,
@Param("state") Integer state,
@Param("rideType") Integer rideType,
+ @Param("callType") Integer callType,
@Param("abnormal") Integer abnormal,
@Param("promotion") Integer promotion,
@Param("promotionUser") String promotionUser,
@@ -59,6 +60,7 @@
@Param("driver") String driver,
@Param("state") Integer state,
@Param("rideType") Integer rideType,
+ @Param("callType") Integer callType,
@Param("abnormal") Integer abnormal,
@Param("promotion") Integer promotion,
@Param("promotionUser") String promotionUser,
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverProfileAuditMapper.xml b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverProfileAuditMapper.xml
new file mode 100644
index 0000000..44b3b7f
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverProfileAuditMapper.xml
@@ -0,0 +1,187 @@
+<?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.stylefeng.guns.modular.system.dao.DriverProfileAuditMapper">
+
+ <!-- 查询资料修改审核列表,字段结构对齐原司机审核列表,auditType 固定为 2。 -->
+ <select id="getProfileAuditList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
+ SELECT * FROM (
+ SELECT
+ cc1.`name` as companyName,
+ cc2.`name` as franchiseeName,
+ service.serverStr,
+ IFNULL(dw.onlineDurationHours,0) as onlineDurationHours,
+ a.id as id,
+ a.driverId as driverId,
+ d.account as account,
+ d.jobNumber as jobNumber,
+ d.phone as phone,
+ a.name as name,
+ a.sex as sex,
+ a.idCard as idCard,
+ a.companyId as companyId,
+ d.franchiseeId as franchiseeId,
+ a.headImgUrl as headImgUrl,
+ a.idCardImgUrl1 as idCardImgUrl1,
+ a.idCardImgUrl2 as idCardImgUrl2,
+ a.placeOfEmployment as placeOfEmployment,
+ a.driverAddress as driverAddress,
+ a.driverContactAddress as driverContactAddress,
+ a.driverContactAddress_ as driverContactAddress_,
+ a.driverAge as driverAge,
+ a.driveCardImgUrl as driveCardImgUrl,
+ a.getDriverLicenseDate as getDriverLicenseDate,
+ a.taxiAptitudeCard as taxiAptitudeCard,
+ a.networkCarlssueImg as networkCarlssueImg,
+ a.qualificationCertificateImg as qualificationCertificateImg,
+ a.vehicleOperationCertificateImg as vehicleOperationCertificateImg,
+ a.placeOfPractice as placeOfPractice,
+ d.enterpriseName as enterpriseName,
+ d.addType as addType,
+ a.auditState as authState,
+ d.state as state,
+ d.flag as flag,
+ a.submitTime as insertTime,
+ d.insertUser as insertUser,
+ a.submitTime as updateTime,
+ d.updateUser as updateUser,
+ 2 as auditType,
+ '资料修改审核' as auditTypeName
+ FROM t_driver_profile_audit a
+ INNER JOIN t_driver d on d.id = a.driverId
+ LEFT JOIN (select * from t_company where type = 2 and flag != 3) as cc1 on cc1.id = a.companyId
+ LEFT JOIN (select * from t_company where type = 3 and flag != 3) as cc2 on cc2.id = d.franchiseeId
+ LEFT JOIN (
+ SELECT a1.id,
+ GROUP_CONCAT(case when s.type = 1 then '快车'
+ when s.type = 2 then '出租车'
+ when s.type = 3 then '跨城出行'
+ when s.type = 4 then '小件物流-同城'
+ when s.type = 5 then '小件物流-跨城'
+ when s.type = 6 then '包车'
+ else '' end ) as serverStr
+ FROM t_driver_profile_audit a1
+ LEFT JOIN (
+ SELECT 1 as type UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
+ ) s on FIND_IN_SET(s.type, a1.serviceType)
+ GROUP BY a1.id
+ ) as service on service.id = a.id
+ LEFT JOIN (
+ SELECT driverId,ROUND(SUM(TIMESTAMPDIFF(MINUTE,startTime,IF(endTime is null,NOW(),endTime))) / 60) as onlineDurationHours
+ from t_driver_work where startTime is not null GROUP BY driverId
+ ) as dw on dw.driverId = d.id
+ ) as o
+ <where>
+ o.authState in (1,4) and o.flag != 3
+ <if test="null != companyId">
+ and o.companyId = #{companyId}
+ </if>
+ <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
+ AND (o.insertTime between CONCAT(#{beginTime},' 00:00:00') and CONCAT(#{endTime},' 23:59:59'))
+ </if>
+ <if test="companyName != null and companyName != ''">
+ and (o.companyName LIKE CONCAT('%',#{companyName},'%') or o.franchiseeName LIKE CONCAT('%',#{companyName},'%'))
+ </if>
+ <if test="phone != null and phone != ''">
+ and o.phone LIKE CONCAT('%',#{phone},'%')
+ </if>
+ <if test="account != null and account != ''">
+ and o.account LIKE CONCAT('%',#{account},'%')
+ </if>
+ <if test="addType != null and addType != ''">
+ and o.addType = #{addType}
+ </if>
+ <if test="authState != null and authState != ''">
+ and o.authState = #{authState}
+ </if>
+ </where>
+ order by o.id desc
+ </select>
+
+ <!-- 查询资料修改审核详情,展示司机本次提交的新资料。 -->
+ <select id="getProfileAuditById" resultType="map">
+ SELECT cc.`name` as companyName,
+ service.serverStr as serverStr,
+ case when d.addType = 1 then '司机注册' when d.addType = 2 then '平台添加' when d.addType = 3 then '分公司添加' when d.addType = 4 then '加盟商添加' else '' end as addTypeStr,
+ case when a.sex = 1 then '男' when a.sex = 2 then '女' else '' end as sexStr,
+ case when a.auditState = 1 then '待审核' when a.auditState = 2 then '正常' when a.auditState = 4 then '已拒绝' end as authStateStr,
+ 2 as auditType,
+ '资料修改审核' as auditTypeName,
+ a.id as id,
+ a.driverId as driverId,
+ d.phone as phone,
+ d.addType as addType,
+ a.name as name,
+ a.sex as sex,
+ a.idCard as idCard,
+ a.companyId as companyId,
+ a.headImgUrl as headImgUrl,
+ a.idCardImgUrl1 as idCardImgUrl1,
+ a.idCardImgUrl2 as idCardImgUrl2,
+ a.placeOfEmployment as placeOfEmployment,
+ a.driverAddress as driverAddress,
+ a.driverContactAddress as driverContactAddress,
+ a.driverContactAddress_ as driverContactAddress_,
+ a.driverAge as driverAge,
+ a.driveCardImgUrl as driveCardImgUrl,
+ a.getDriverLicenseDate as getDriverLicenseDate,
+ a.taxiAptitudeCard as taxiAptitudeCard,
+ a.networkCarlssueImg as networkCarlssueImg,
+ a.qualificationCertificateImg as qualificationCertificateImg,
+ a.vehicleOperationCertificateImg as vehicleOperationCertificateImg,
+ a.placeOfPractice as placeOfPractice,
+ a.auditState as authState,
+ a.submitTime as insertTime
+ FROM t_driver_profile_audit a
+ INNER JOIN t_driver d on d.id = a.driverId
+ LEFT JOIN (select * from t_company where flag != 3) as cc on cc.id = a.companyId
+ LEFT JOIN (
+ SELECT a1.id,
+ GROUP_CONCAT(case when s.type = 1 then '快车'
+ when s.type = 2 then '出租车'
+ when s.type = 3 then '跨城出行'
+ when s.type = 4 then '小件物流-同城'
+ when s.type = 5 then '小件物流-跨城'
+ when s.type = 6 then '包车'
+ else '' end ) as serverStr
+ FROM t_driver_profile_audit a1
+ LEFT JOIN (
+ SELECT 1 as type UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
+ ) s on FIND_IN_SET(s.type, a1.serviceType)
+ GROUP BY a1.id
+ ) as service on service.id = a.id
+ where a.id = #{id}
+ </select>
+
+ <!-- 审核通过后,将待审资料覆盖到司机主表;审核拒绝不会调用此 SQL。 -->
+ <update id="applyToDriver">
+ UPDATE t_driver
+ SET
+ name = #{audit.name},
+ sex = #{audit.sex},
+ idCard = #{audit.idCard},
+ companyId = #{audit.companyId},
+ headImgUrl = #{audit.headImgUrl},
+ idCardImgUrl1 = #{audit.idCardImgUrl1},
+ idCardImgUrl2 = #{audit.idCardImgUrl2},
+ placeOfEmployment = #{audit.placeOfEmployment},
+ driverAddress = #{audit.driverAddress},
+ driverContactAddress = #{audit.driverContactAddress},
+ driverContactAddress_ = #{audit.driverContactAddress_},
+ driverAge = #{audit.driverAge},
+ driveCardImgUrl = #{audit.driveCardImgUrl},
+ getDriverLicenseDate = #{audit.getDriverLicenseDate},
+ taxiAptitudeCard = #{audit.taxiAptitudeCard},
+ networkCarlssueImg = #{audit.networkCarlssueImg},
+ qualificationCertificateImg = #{audit.qualificationCertificateImg},
+ vehicleOperationCertificateImg = #{audit.vehicleOperationCertificateImg},
+ placeOfPractice = #{audit.placeOfPractice},
+ province = #{audit.province},
+ provinceCode = #{audit.provinceCode},
+ city = #{audit.city},
+ cityCode = #{audit.cityCode},
+ area = #{audit.area},
+ areaCode = #{audit.areaCode},
+ updateTime = NOW()
+ WHERE id = #{audit.driverId}
+ </update>
+</mapper>
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EnterpriseConfigMapper.xml b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EnterpriseConfigMapper.xml
new file mode 100644
index 0000000..2d5b828
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/EnterpriseConfigMapper.xml
@@ -0,0 +1,29 @@
+<?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.stylefeng.guns.modular.system.dao.EnterpriseConfigMapper">
+
+ <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.EnterpriseConfig">
+ <id column="id" property="id" />
+ <result column="enterpriseName" property="enterpriseName" />
+ <result column="insertTime" property="insertTime" />
+ <result column="insertUserId" property="insertUserId" />
+ <result column="insertUserName" property="insertUserName" />
+ <result column="state" property="state" />
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ id, enterpriseName, insertTime, insertUserId, insertUserName, state
+ </sql>
+
+ <select id="getEnterpriseConfigList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
+ SELECT * FROM t_enterprise_config
+ <where>
+ state != 3
+ <if test="enterpriseName != null and enterpriseName != ''">
+ and enterpriseName LIKE CONCAT('%',#{enterpriseName},'%')
+ </if>
+ </where>
+ order by id desc
+ </select>
+
+</mapper>
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverMapper.xml b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverMapper.xml
index aa5d0c4..5de8924 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverMapper.xml
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverMapper.xml
@@ -80,7 +80,7 @@
<!--根据条件查询待审核司机列表-->
<select id="getAuthDriverList" resultType="map" parameterType="com.baomidou.mybatisplus.plugins.Page">
- SELECT * FROM (SELECT cc1.`name` as companyName,cc2.`name` as franchiseeName,ds.serverStr,dd.* from t_driver as dd
+ SELECT * FROM (SELECT cc1.`name` as companyName,cc2.`name` as franchiseeName,ds.serverStr,IFNULL(dw.onlineDurationHours,0) as onlineDurationHours,1 as auditType,'注册审核' as auditTypeName,dd.* from t_driver as dd
LEFT JOIN (select * from t_company where type = 2 and flag != 3) as cc1 on cc1.id = dd.companyId
LEFT JOIN (select * from t_company where type = 3 and flag != 3) as cc2 on cc2.id = dd.franchiseeId
LEFT JOIN (
@@ -92,6 +92,9 @@
when type = 5 then '小件物流-跨城'
when type = 6 then '包车'
else '' end ) as serverStr,driverId from t_driver_service GROUP BY driverId) as ds on ds.driverId = dd.id
+ LEFT JOIN (
+ SELECT driverId,ROUND(SUM(TIMESTAMPDIFF(MINUTE,startTime,IF(endTime is null,NOW(),endTime))) / 60) as onlineDurationHours
+ from t_driver_work where startTime is not null GROUP BY driverId) as dw on dw.driverId = dd.id
) as o
<where>
FIND_IN_SET(o.authState,'1,4') and o.flag != 3
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
index ece2e26..99aaea8 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TOrderPrivateCarMapper.xml
@@ -70,6 +70,7 @@
<result column="serverCarModelId" property="serverCarModelId" />
<result column="peopleNum" property="peopleNum" />
<result column="rideType" property="rideType" />
+ <result column="callType" property="callType" />
<result column="pid" property="pid" />
<result column="totalPeopleNum" property="totalPeopleNum" />
<result column="estimateMileage" property="estimateMileage" />
@@ -129,6 +130,9 @@
</if>
<if test="null != rideType">
and o.rideType = #{rideType}
+ </if>
+ <if test="null != callType">
+ and o.callType = #{callType}
</if>
<if test="null != abnormal">
and o.abnormal = #{abnormal}
@@ -205,6 +209,9 @@
<if test="null != rideType">
and o.rideType = #{rideType}
</if>
+ <if test="null != callType">
+ and o.callType = #{callType}
+ </if>
<if test="null != abnormal">
and o.abnormal = #{abnormal}
</if>
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java
new file mode 100644
index 0000000..a316e61
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/DriverProfileAudit.java
@@ -0,0 +1,141 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.util.Date;
+
+/**
+ * 司机资料修改待审核快照。
+ * 该模型保存司机端提交的新资料,审核通过后再同步到 t_driver。
+ */
+@TableName("t_driver_profile_audit")
+public class DriverProfileAudit {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ @TableField("driverId")
+ private Integer driverId;
+ private String name;
+ private Integer sex;
+ @TableField("idCard")
+ private String idCard;
+ @TableField("companyId")
+ private Integer companyId;
+ @TableField("headImgUrl")
+ private String headImgUrl;
+ @TableField("idCardImgUrl1")
+ private String idCardImgUrl1;
+ @TableField("idCardImgUrl2")
+ private String idCardImgUrl2;
+ @TableField("placeOfEmployment")
+ private String placeOfEmployment;
+ @TableField("driverAddress")
+ private String driverAddress;
+ @TableField("driverContactAddress")
+ private String driverContactAddress;
+ @TableField("driverContactAddress_")
+ private String driverContactAddress_;
+ @TableField("driverAge")
+ private Integer driverAge;
+ @TableField("driveCardImgUrl")
+ private String driveCardImgUrl;
+ @TableField("getDriverLicenseDate")
+ private Date getDriverLicenseDate;
+ @TableField("taxiAptitudeCard")
+ private String taxiAptitudeCard;
+ @TableField("networkCarlssueImg")
+ private String networkCarlssueImg;
+ @TableField("qualificationCertificateImg")
+ private String qualificationCertificateImg;
+ @TableField("vehicleOperationCertificateImg")
+ private String vehicleOperationCertificateImg;
+ @TableField("placeOfPractice")
+ private String placeOfPractice;
+ private String province;
+ @TableField("provinceCode")
+ private String provinceCode;
+ private String city;
+ @TableField("cityCode")
+ private String cityCode;
+ private String area;
+ @TableField("areaCode")
+ private String areaCode;
+ @TableField("serviceType")
+ private String serviceType;
+ @TableField("auditState")
+ private Integer auditState;
+ @TableField("submitTime")
+ private Date submitTime;
+ @TableField("auditTime")
+ private Date auditTime;
+ @TableField("auditUser")
+ private Integer auditUser;
+
+ public Integer getId() { return id; }
+ public void setId(Integer id) { this.id = id; }
+ public Integer getDriverId() { return driverId; }
+ public void setDriverId(Integer driverId) { this.driverId = driverId; }
+ public String getName() { return name; }
+ public void setName(String name) { this.name = name; }
+ public Integer getSex() { return sex; }
+ public void setSex(Integer sex) { this.sex = sex; }
+ public String getIdCard() { return idCard; }
+ public void setIdCard(String idCard) { this.idCard = idCard; }
+ public Integer getCompanyId() { return companyId; }
+ public void setCompanyId(Integer companyId) { this.companyId = companyId; }
+ public String getHeadImgUrl() { return headImgUrl; }
+ public void setHeadImgUrl(String headImgUrl) { this.headImgUrl = headImgUrl; }
+ public String getIdCardImgUrl1() { return idCardImgUrl1; }
+ public void setIdCardImgUrl1(String idCardImgUrl1) { this.idCardImgUrl1 = idCardImgUrl1; }
+ public String getIdCardImgUrl2() { return idCardImgUrl2; }
+ public void setIdCardImgUrl2(String idCardImgUrl2) { this.idCardImgUrl2 = idCardImgUrl2; }
+ public String getPlaceOfEmployment() { return placeOfEmployment; }
+ public void setPlaceOfEmployment(String placeOfEmployment) { this.placeOfEmployment = placeOfEmployment; }
+ public String getDriverAddress() { return driverAddress; }
+ public void setDriverAddress(String driverAddress) { this.driverAddress = driverAddress; }
+ public String getDriverContactAddress() { return driverContactAddress; }
+ public void setDriverContactAddress(String driverContactAddress) { this.driverContactAddress = driverContactAddress; }
+ public String getDriverContactAddress_() { return driverContactAddress_; }
+ public void setDriverContactAddress_(String driverContactAddress_) { this.driverContactAddress_ = driverContactAddress_; }
+ public Integer getDriverAge() { return driverAge; }
+ public void setDriverAge(Integer driverAge) { this.driverAge = driverAge; }
+ public String getDriveCardImgUrl() { return driveCardImgUrl; }
+ public void setDriveCardImgUrl(String driveCardImgUrl) { this.driveCardImgUrl = driveCardImgUrl; }
+ public Date getGetDriverLicenseDate() { return getDriverLicenseDate; }
+ public void setGetDriverLicenseDate(Date getDriverLicenseDate) { this.getDriverLicenseDate = getDriverLicenseDate; }
+ public String getTaxiAptitudeCard() { return taxiAptitudeCard; }
+ public void setTaxiAptitudeCard(String taxiAptitudeCard) { this.taxiAptitudeCard = taxiAptitudeCard; }
+ public String getNetworkCarlssueImg() { return networkCarlssueImg; }
+ public void setNetworkCarlssueImg(String networkCarlssueImg) { this.networkCarlssueImg = networkCarlssueImg; }
+ public String getQualificationCertificateImg() { return qualificationCertificateImg; }
+ public void setQualificationCertificateImg(String qualificationCertificateImg) { this.qualificationCertificateImg = qualificationCertificateImg; }
+ public String getVehicleOperationCertificateImg() { return vehicleOperationCertificateImg; }
+ public void setVehicleOperationCertificateImg(String vehicleOperationCertificateImg) { this.vehicleOperationCertificateImg = vehicleOperationCertificateImg; }
+ public String getPlaceOfPractice() { return placeOfPractice; }
+ public void setPlaceOfPractice(String placeOfPractice) { this.placeOfPractice = placeOfPractice; }
+ public String getProvince() { return province; }
+ public void setProvince(String province) { this.province = province; }
+ public String getProvinceCode() { return provinceCode; }
+ public void setProvinceCode(String provinceCode) { this.provinceCode = provinceCode; }
+ public String getCity() { return city; }
+ public void setCity(String city) { this.city = city; }
+ public String getCityCode() { return cityCode; }
+ public void setCityCode(String cityCode) { this.cityCode = cityCode; }
+ public String getArea() { return area; }
+ public void setArea(String area) { this.area = area; }
+ public String getAreaCode() { return areaCode; }
+ public void setAreaCode(String areaCode) { this.areaCode = areaCode; }
+ public String getServiceType() { return serviceType; }
+ public void setServiceType(String serviceType) { this.serviceType = serviceType; }
+ public Integer getAuditState() { return auditState; }
+ public void setAuditState(Integer auditState) { this.auditState = auditState; }
+ public Date getSubmitTime() { return submitTime; }
+ public void setSubmitTime(Date submitTime) { this.submitTime = submitTime; }
+ public Date getAuditTime() { return auditTime; }
+ public void setAuditTime(Date auditTime) { this.auditTime = auditTime; }
+ public Integer getAuditUser() { return auditUser; }
+ public void setAuditUser(Integer auditUser) { this.auditUser = auditUser; }
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EnterpriseConfig.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EnterpriseConfig.java
new file mode 100644
index 0000000..3838093
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/EnterpriseConfig.java
@@ -0,0 +1,90 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 企业配置管理
+ */
+@TableName("t_enterprise_config")
+public class EnterpriseConfig extends Model<EnterpriseConfig> {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @TableField("enterpriseName")
+ private String enterpriseName;
+
+ @TableField("insertTime")
+ private Date insertTime;
+
+ @TableField("insertUserId")
+ private Integer insertUserId;
+
+ @TableField("insertUserName")
+ private String insertUserName;
+
+ @TableField("state")
+ private Integer state;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getEnterpriseName() {
+ return enterpriseName;
+ }
+
+ public void setEnterpriseName(String enterpriseName) {
+ this.enterpriseName = enterpriseName;
+ }
+
+ public Date getInsertTime() {
+ return insertTime;
+ }
+
+ public void setInsertTime(Date insertTime) {
+ this.insertTime = insertTime;
+ }
+
+ public Integer getInsertUserId() {
+ return insertUserId;
+ }
+
+ public void setInsertUserId(Integer insertUserId) {
+ this.insertUserId = insertUserId;
+ }
+
+ public String getInsertUserName() {
+ return insertUserName;
+ }
+
+ public void setInsertUserName(String insertUserName) {
+ this.insertUserName = insertUserName;
+ }
+
+ public Integer getState() {
+ return state;
+ }
+
+ public void setState(Integer state) {
+ this.state = state;
+ }
+
+ @Override
+ protected Serializable pkVal() {
+ return this.id;
+ }
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
index 6f635ed..60b53f4 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderPrivateCar.java
@@ -398,6 +398,12 @@
private Double estimateTime;
+ /**
+ * 叫车方式(1=普通叫车,2=快捷叫车)
+ */
+ @TableField("callType")
+ private Integer callType;
+
private Integer spellSuccess;
private String splitAllocation;
@@ -488,6 +494,14 @@
this.abnormalRemark = abnormalRemark;
}
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
+ }
+
public Integer getId() {
return id;
}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverProfileAuditService.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverProfileAuditService.java
new file mode 100644
index 0000000..7210d78
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IDriverProfileAuditService.java
@@ -0,0 +1,10 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.DriverProfileAudit;
+
+/**
+ * 司机资料修改审核服务。
+ */
+public interface IDriverProfileAuditService extends IService<DriverProfileAudit> {
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEnterpriseConfigService.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEnterpriseConfigService.java
new file mode 100644
index 0000000..865e267
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IEnterpriseConfigService.java
@@ -0,0 +1,21 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.EnterpriseConfig;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 企业配置管理服务
+ */
+public interface IEnterpriseConfigService extends IService<EnterpriseConfig> {
+
+ /**
+ * 企业配置管理分页列表
+ */
+ List<Map<String, Object>> getEnterpriseConfigList(@Param("page") Page<Map<String, Object>> page,
+ @Param("enterpriseName") String enterpriseName);
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
index 7c471e6..abfd42a 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITOrderPrivateCarService.java
@@ -38,6 +38,7 @@
@Param("driver") String driver,
@Param("state") Integer state,
@Param("rideType") Integer rideType,
+ Integer callType,
Integer abnormal,
Integer promotion,
String promotionUser,
@@ -58,6 +59,7 @@
@Param("driver") String driver,
@Param("state") Integer state,
@Param("rideType") Integer rideType,
+ Integer callType,
Integer abnormal,
Integer promotion,
String promotionUser,
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverProfileAuditServiceImpl.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverProfileAuditServiceImpl.java
new file mode 100644
index 0000000..8fe9cc0
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverProfileAuditServiceImpl.java
@@ -0,0 +1,14 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.DriverProfileAuditMapper;
+import com.stylefeng.guns.modular.system.model.DriverProfileAudit;
+import com.stylefeng.guns.modular.system.service.IDriverProfileAuditService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 司机资料修改审核服务实现。
+ */
+@Service
+public class DriverProfileAuditServiceImpl extends ServiceImpl<DriverProfileAuditMapper, DriverProfileAudit> implements IDriverProfileAuditService {
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EnterpriseConfigServiceImpl.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EnterpriseConfigServiceImpl.java
new file mode 100644
index 0000000..c650978
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/EnterpriseConfigServiceImpl.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.EnterpriseConfigMapper;
+import com.stylefeng.guns.modular.system.model.EnterpriseConfig;
+import com.stylefeng.guns.modular.system.service.IEnterpriseConfigService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 企业配置管理服务实现
+ */
+@Service
+public class EnterpriseConfigServiceImpl extends ServiceImpl<EnterpriseConfigMapper, EnterpriseConfig> implements IEnterpriseConfigService {
+
+ @Override
+ public List<Map<String, Object>> getEnterpriseConfigList(Page<Map<String, Object>> page, String enterpriseName) {
+ return this.baseMapper.getEnterpriseConfigList(page, enterpriseName);
+ }
+}
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
index f9a1915..5d83e0d 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderPrivateCarServiceImpl.java
@@ -42,13 +42,13 @@
@Override
public List<Map<String, Object>> getPrivateCarOrderList(Page<Map<String, Object>> page, String beginTime, String endTime, Integer roleType, Integer nowUserId, String orderNum, Integer orderSource, String userName,
- String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state, Integer rideType, Integer abnormal,
+ String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state, Integer rideType, Integer callType, Integer abnormal,
Integer promotion,
String promotionUser,
Integer abnormalStatus,
Integer payType, String travelId) {
List<Map<String, Object>> privateCarOrderList = this.baseMapper.getPrivateCarOrderList(page, beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone, serverCarModelId,
- driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus, payType, travelId);
+ driver, state, rideType, callType, abnormal, promotion, promotionUser,abnormalStatus, payType, travelId);
for (Map<String, Object> map : privateCarOrderList) {
if(null == map.get("serverCarModelName")){
JSONArray jsonArray = JSON.parseArray(map.get("serverCarModel").toString());
@@ -76,12 +76,12 @@
}
@Override
public List<Map<String, Object>> getPrivateCarOrderListExport(Page<Map<String, Object>> page, String beginTime, String endTime, Integer roleType, Integer nowUserId, String orderNum, Integer orderSource, String userName,
- String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state, Integer rideType, Integer abnormal,
+ String userPhone, String passengers, String passengersPhone, Integer serverCarModelId, String driver, Integer state, Integer rideType, Integer callType, Integer abnormal,
Integer promotion,
String promotionUser,
Integer abnormalStatus, String travelId) {
List<Map<String, Object>> privateCarOrderList = this.baseMapper.getPrivateCarOrderListExport(beginTime, endTime, roleType, nowUserId, orderNum, orderSource, userName, userPhone, passengers, passengersPhone,
- serverCarModelId, driver, state, rideType, abnormal, promotion, promotionUser,abnormalStatus, travelId);
+ serverCarModelId, driver, state, rideType, callType, abnormal, promotion, promotionUser,abnormalStatus, travelId);
for (Map<String, Object> map : privateCarOrderList) {
if(null == map.get("serverCarModelName")){
JSONArray jsonArray = JSON.parseArray(map.get("serverCarModel").toString());
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig.html
new file mode 100644
index 0000000..29bdeae
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig.html
@@ -0,0 +1,45 @@
+@layout("/common/_container.html"){
+<div class="row">
+ <div class="col-sm-12">
+ <div class="ibox float-e-margins">
+ <div class="ibox-title">
+ <h5>企业配置管理</h5>
+ </div>
+ <div class="ibox-content">
+ <div class="row row-lg">
+ <div class="col-sm-12">
+ <div class="row">
+ <div class="col-sm-3">
+ <#NameCon id="enterpriseName" name="企业名称" />
+ </div>
+ <div class="col-sm-3">
+ <#button name="搜索" icon="fa-search" clickFun="EnterpriseConfig.search()"/>
+ <#button name="重置" icon="fa-trash" clickFun="EnterpriseConfig.resetSearch()" space="true"/>
+ </div>
+ </div>
+ <div class="hidden-xs" id="EnterpriseConfigTableToolbar" role="group">
+ @if(shiro.hasPermission("/enterpriseConfig/add")){
+ <#button name="添加" icon="fa-plus" clickFun="EnterpriseConfig.openAddEnterpriseConfig()"/>
+ @}
+ @if(shiro.hasPermission("/enterpriseConfig/update")){
+ <#button name="编辑" icon="fa-edit" clickFun="EnterpriseConfig.openEnterpriseConfigDetail()" space="true"/>
+ @}
+ @if(shiro.hasPermission("/enterpriseConfig/delete")){
+ <#button name="删除" icon="fa-remove" clickFun="EnterpriseConfig.delete()" space="true"/>
+ @}
+ @if(shiro.hasPermission("/enterpriseConfig/enable")){
+ <#button name="启用" icon="fa-check" clickFun="EnterpriseConfig.opt(1)" space="true"/>
+ @}
+ @if(shiro.hasPermission("/enterpriseConfig/disable")){
+ <#button name="停用" icon="fa-remove" clickFun="EnterpriseConfig.opt(2)" space="true"/>
+ @}
+ </div>
+ <#table id="EnterpriseConfigTable"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script src="${ctxPath}/static/modular/system/enterpriseConfig/enterpriseConfig.js"></script>
+@}
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_add.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_add.html
new file mode 100644
index 0000000..8fc1d31
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_add.html
@@ -0,0 +1,21 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+ <div class="ibox-content">
+ <div class="form-horizontal" id="enterpriseConfigInfoForm">
+ <div class="row">
+ <div class="col-sm-11">
+ <#input id="enterpriseName" name="企业名称"/>
+ </div>
+ </div>
+
+ <div class="row btn-group-m-t">
+ <div class="col-sm-10 col-sm-offset-5">
+ <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="EnterpriseConfigInfoDlg.addSubmit()"/>
+ <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="EnterpriseConfigInfoDlg.close()"/>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script src="${ctxPath}/static/modular/system/enterpriseConfig/enterpriseConfig_info.js"></script>
+@}
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_edit.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_edit.html
new file mode 100644
index 0000000..d10f76a
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/enterpriseConfig/enterpriseConfig_edit.html
@@ -0,0 +1,22 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+ <div class="ibox-content">
+ <div class="form-horizontal" id="enterpriseConfigInfoForm">
+ <input type="hidden" id="id" name="id" value="${item.id}">
+ <div class="row">
+ <div class="col-sm-11">
+ <#input id="enterpriseName" name="企业名称" value="${item.enterpriseName}"/>
+ </div>
+ </div>
+
+ <div class="row btn-group-m-t">
+ <div class="col-sm-10 col-sm-offset-5">
+ <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="EnterpriseConfigInfoDlg.editSubmit()"/>
+ <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="EnterpriseConfigInfoDlg.close()"/>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<script src="${ctxPath}/static/modular/system/enterpriseConfig/enterpriseConfig_info.js"></script>
+@}
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html
index 63808e2..d396a5c 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_add.html
@@ -96,7 +96,17 @@
<#input id="driverAddress" name="居住地址" />
<#input id="taxiAptitudeCard" name="出租车资格证号" />
<#avatar id="networkCarlssueImg" name="网约车资格证照片:" />
- <#input id="enterpriseName" name="所属企业" />
+ <div class="form-group">
+ <label class="col-sm-3 control-label">所属企业:</label>
+ <div class="col-sm-3">
+ <select class="form-control" id="enterpriseName">
+ <option value="">选择所属企业</option>
+ @for(enterpriseConfig in enterpriseConfigList!){
+ <option value="${enterpriseConfig.enterpriseName}">${enterpriseConfig.enterpriseName}</option>
+ @}
+ </select>
+ </div>
+ </div>
<#input id="qualificationCertificateNumber" name="从业资格证号码" />
<#avatar id="qualificationCertificateImg" name="从业资格证图片:" />
<#input id="vehicleOperationCertificateNumber" name="车辆运营证号码" />
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html
index 8971817..ff79cdd 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_edit.html
@@ -104,7 +104,17 @@
<#avatar id="idCardImgUrl2" name="身份证背面照:" avatarImg="${item.idCardImgUrl2}"/>
<#input id="driverAddress" name="居住地址" value="${item.driverAddress}"/>
<#input id="taxiAptitudeCard" name="出租车资格证号" value="${item.taxiAptitudeCard}"/>
- <#input id="enterpriseName" name="所属企业" value="${item.enterpriseName}"/>
+ <div class="form-group">
+ <label class="col-sm-3 control-label">所属企业:</label>
+ <div class="col-sm-3">
+ <select class="form-control" id="enterpriseName">
+ <option value="">选择所属企业</option>
+ @for(enterpriseConfig in enterpriseConfigList!){
+ <option value="${enterpriseConfig.enterpriseName}" ${enterpriseConfig.enterpriseName == item.enterpriseName ? 'selected=selected' : ''}>${enterpriseConfig.enterpriseName}</option>
+ @}
+ </select>
+ </div>
+ </div>
<#input id="qualificationCertificateNumber" name="从业资格证号码" value="${item.qualificationCertificateNumber}"/>
<#avatar id="qualificationCertificateImg" name="从业资格证图片:" avatarImg="${item.qualificationCertificateImg}"/>
<#input id="vehicleOperationCertificateNumber" name="车辆运营证号码" value="${item.vehicleOperationCertificateNumber}"/>
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_immediately.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_immediately.html
index 76f4368..d4c3c17 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_immediately.html
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tDriver/tDriver_immediately.html
@@ -3,6 +3,7 @@
<div class="ibox-content">
<div class="form-horizontal">
<input type="hidden" id="id" name="id" value="${item.id}">
+ <input type="hidden" id="auditType" name="auditType" value="${item.auditType}">
<div class="row">
<div class="col-sm-6 b-r">
<#label id="name" name="姓名" value="${item.name}"/>
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
index 4a831cc..3b48ba4 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOrderPrivateCar/tOrderPrivateCar.html
@@ -77,6 +77,13 @@
</#SelectCon>
</div>
<div class="col-sm-3">
+ <#SelectCon id="callType" name="叫车方式" >
+ <option value="">全部</option>
+ <option value="1">普通叫车</option>
+ <option value="2">快捷叫车</option>
+ </#SelectCon>
+ </div>
+ <div class="col-sm-3">
<#SelectCon id="payType" name="支付方式" >
<option value="">全部</option>
<option value="1">微信</option>
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig.js b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig.js
new file mode 100644
index 0000000..0055066
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig.js
@@ -0,0 +1,206 @@
+/**
+ * 企业配置管理初始化
+ */
+var EnterpriseConfig = {
+ id: "EnterpriseConfigTable",
+ seItem: null,
+ table: null,
+ layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+EnterpriseConfig.initColumn = function () {
+ return [
+ {field: 'selectItem', radio: true},
+ {title: 'id', field: 'id', visible: true, align: 'center', valign: 'middle', width: '80px'},
+ {title: '企业名称', field: 'enterpriseName', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row) {
+ var btn = "";
+ if(row.enterpriseName != '' && row.enterpriseName != null) {
+ btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.enterpriseName + '" onfocus="TUser.tooltip()">' + row.enterpriseName + '</p>']
+ }
+ return btn;
+ }
+ },
+ {title: '创建人', field: 'insertUserName', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row) {
+ var btn = "";
+ if(row.insertUserName != '' && row.insertUserName != null) {
+ btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.insertUserName + '" onfocus="TUser.tooltip()">' + row.insertUserName + '</p>']
+ }
+ return btn;
+ }
+ },
+ {title: '添加时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle', width: '160px',
+ formatter: function (value, row) {
+ var btn = "";
+ if(row.insertTime != '' && row.insertTime != null) {
+ var time = row.insertTime.replace(" ", '<br>');
+ btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.insertTime + '" onfocus="TUser.tooltip()">' + time + '</p>']
+ }
+ return btn;
+ }
+ },
+ {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle', width: '100px',
+ formatter: function (value, row) {
+ var btn = "";
+ if(row.state != '' && row.state != null) {
+ if (1 == row.state){
+ btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="启用" onfocus="TUser.tooltip()">启用</p>']
+ } else if (2 == row.state){
+ btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color: red;" title="停用" onfocus="TUser.tooltip()">停用</p>']
+ }
+ }
+ return btn;
+ }
+ }
+ ];
+};
+
+/**
+ * 检查是否选中
+ */
+EnterpriseConfig.check = function () {
+ var selected = $('#' + this.id).bootstrapTable('getSelections');
+ if(selected.length == 0){
+ Feng.info("请先选中表格中的某一记录!");
+ return false;
+ }else{
+ EnterpriseConfig.seItem = selected[0];
+ return true;
+ }
+};
+
+/**
+ * 点击添加企业配置
+ */
+EnterpriseConfig.openAddEnterpriseConfig = function () {
+ var index = layer.open({
+ type: 2,
+ title: '添加企业配置',
+ area: ['800px', '360px'],
+ fix: false,
+ maxmin: true,
+ content: Feng.ctxPath + '/enterpriseConfig/enterpriseConfig_add'
+ });
+ this.layerIndex = index;
+};
+
+/**
+ * 打开编辑企业配置
+ */
+EnterpriseConfig.openEnterpriseConfigDetail = function () {
+ if (this.check()) {
+ var index = layer.open({
+ type: 2,
+ title: '编辑企业配置',
+ area: ['800px', '360px'],
+ fix: false,
+ maxmin: true,
+ content: Feng.ctxPath + '/enterpriseConfig/enterpriseConfig_update/' + EnterpriseConfig.seItem.id
+ });
+ this.layerIndex = index;
+ }
+};
+
+/**
+ * 删除企业配置
+ */
+EnterpriseConfig.delete = function () {
+ if (this.check()) {
+ var name = EnterpriseConfig.seItem.enterpriseName;
+ if (name == "" || name == null || name == undefined) {
+ name = "该企业";
+ } else {
+ name = "【" + name + "】";
+ }
+ swal({
+ title: "您是否确认删除" + name + "?",
+ text: "请谨慎操作,删除后列表将不再展示!",
+ type: "warning",
+ showCancelButton: true,
+ confirmButtonColor: "#DD6B55",
+ confirmButtonText: "删除",
+ closeOnConfirm: true
+ }, function () {
+ var ajax = new $ax(Feng.ctxPath + "/enterpriseConfig/delete", function () {
+ swal("删除成功", "您已经删除了" + name + "。", "success");
+ EnterpriseConfig.table.refresh();
+ }, function (data) {
+ swal("删除失败", data.responseJSON.message + "!", "warning");
+ });
+ ajax.set("enterpriseConfigId", EnterpriseConfig.seItem.id);
+ ajax.start();
+ });
+ }
+};
+
+/**
+ * 启用/停用企业配置
+ */
+EnterpriseConfig.opt = function (type) {
+ if (this.check()) {
+ var name = EnterpriseConfig.seItem.enterpriseName;
+ if (name == "" || name == null || name == undefined) {
+ name = "该企业";
+ } else {
+ name = "【" + name + "】";
+ }
+ var str = "";
+ if (1 == type){
+ str = "启用";
+ if (EnterpriseConfig.seItem.state != 2) {
+ swal("启用失败", "【停用】状态下才能执行此操作!", "warning");
+ return;
+ }
+ } else if (2 == type){
+ str = "停用";
+ if (EnterpriseConfig.seItem.state != 1) {
+ swal("停用失败", "【启用】状态下才能执行此操作!", "warning");
+ return;
+ }
+ }
+ swal({
+ title: "您是否确认" + str + name + "?",
+ text: "请谨慎操作!",
+ type: "warning",
+ showCancelButton: true,
+ confirmButtonColor: "#DD6B55",
+ confirmButtonText: str,
+ closeOnConfirm: true
+ }, function () {
+ var url = type == 1 ? "/enterpriseConfig/enable" : "/enterpriseConfig/disable";
+ var ajax = new $ax(Feng.ctxPath + url, function () {
+ swal(str + "成功", "您已经" + str + "了" + name + "。", "success");
+ EnterpriseConfig.table.refresh();
+ }, function (data) {
+ swal(str + "失败", data.responseJSON.message + "!", "warning");
+ });
+ ajax.set("enterpriseConfigId", EnterpriseConfig.seItem.id);
+ ajax.start();
+ });
+ }
+};
+
+/**
+ * 查询企业配置管理列表
+ */
+EnterpriseConfig.search = function () {
+ var queryData = {};
+ queryData['enterpriseName'] = $("#enterpriseName").val();
+ EnterpriseConfig.table.refresh({query: queryData});
+};
+
+EnterpriseConfig.resetSearch = function () {
+ $("#enterpriseName").val("");
+ EnterpriseConfig.search();
+};
+
+$(function () {
+ var defaultColunms = EnterpriseConfig.initColumn();
+ var table = new BSTable(EnterpriseConfig.id, "/enterpriseConfig/list", defaultColunms);
+ table.setPaginationType("server");
+ EnterpriseConfig.table = table.init();
+});
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig_info.js b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig_info.js
new file mode 100644
index 0000000..826de9b
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/enterpriseConfig/enterpriseConfig_info.js
@@ -0,0 +1,99 @@
+/**
+ * 初始化企业配置详情对话框
+ */
+var EnterpriseConfigInfoDlg = {
+ enterpriseConfigInfoData : {},
+ validateFields: {
+ enterpriseName: {
+ validators: {
+ notEmpty: {
+ message: '企业名称不能为空'
+ }
+ }
+ }
+ }
+};
+
+/**
+ * 验证数据是否为空
+ */
+EnterpriseConfigInfoDlg.validate = function () {
+ $('#enterpriseConfigInfoForm').data("bootstrapValidator").resetForm();
+ $('#enterpriseConfigInfoForm').bootstrapValidator('validate');
+ return $("#enterpriseConfigInfoForm").data('bootstrapValidator').isValid();
+};
+
+/**
+ * 清除数据
+ */
+EnterpriseConfigInfoDlg.clearData = function() {
+ this.enterpriseConfigInfoData = {};
+};
+
+/**
+ * 设置对话框中的数据
+ */
+EnterpriseConfigInfoDlg.set = function(key, val) {
+ this.enterpriseConfigInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+ return this;
+};
+
+/**
+ * 关闭此对话框
+ */
+EnterpriseConfigInfoDlg.close = function() {
+ parent.layer.close(window.parent.EnterpriseConfig.layerIndex);
+};
+
+/**
+ * 收集数据
+ */
+EnterpriseConfigInfoDlg.collectData = function() {
+ this
+ .set('id')
+ .set('enterpriseName');
+};
+
+/**
+ * 提交添加
+ */
+EnterpriseConfigInfoDlg.addSubmit = function() {
+ this.clearData();
+ this.collectData();
+ if(!this.validate()){
+ return ;
+ }
+ var ajax = new $ax(Feng.ctxPath + "/enterpriseConfig/add", function(){
+ Feng.success("添加成功!");
+ window.parent.EnterpriseConfig.table.refresh();
+ EnterpriseConfigInfoDlg.close();
+ },function(data){
+ Feng.error("添加失败!" + data.responseJSON.message + "!");
+ });
+ ajax.set(this.enterpriseConfigInfoData);
+ ajax.start();
+};
+
+/**
+ * 提交修改
+ */
+EnterpriseConfigInfoDlg.editSubmit = function() {
+ this.clearData();
+ this.collectData();
+ if(!this.validate()){
+ return ;
+ }
+ var ajax = new $ax(Feng.ctxPath + "/enterpriseConfig/update", function(){
+ Feng.success("修改成功!");
+ window.parent.EnterpriseConfig.table.refresh();
+ EnterpriseConfigInfoDlg.close();
+ },function(data){
+ Feng.error("修改失败!" + data.responseJSON.message + "!");
+ });
+ ajax.set(this.enterpriseConfigInfoData);
+ ajax.start();
+};
+
+$(function() {
+ Feng.initValidator("enterpriseConfigInfoForm", EnterpriseConfigInfoDlg.validateFields);
+});
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js
index 33a55cc..9c29e71 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver.js
@@ -61,6 +61,15 @@
return btn;
}
},
+ {title: '审核类型', field: 'auditTypeName', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row) {
+ var text = row.auditTypeName;
+ if(text == '' || text == null) {
+ text = row.auditType == 2 ? '资料修改审核' : '注册审核';
+ }
+ return '<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + text + '" onfocus="TUser.tooltip()">' + text + '</p>';
+ }
+ },
{title: '企业id', field: 'companyId', visible: false, align: 'center', valign: 'middle'},
{title: '所属分公司', field: 'companyName', visible: true, align: 'center', valign: 'middle',
formatter: function (value, row) {
@@ -93,6 +102,15 @@
btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="-" onfocus="TUser.tooltip()">-</p>']
}
return btn;
+ }
+ },
+ {title: '在线时长<br/>(小时)', field: 'onlineDurationHours', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row) {
+ var onlineDurationHours = row.onlineDurationHours;
+ if(onlineDurationHours == '' || onlineDurationHours == null) {
+ onlineDurationHours = 0;
+ }
+ return '<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + onlineDurationHours + '" onfocus="TUser.tooltip()">' + onlineDurationHours + '</p>';
}
},
{title: '登录账号【手机号】', field: 'phone', visible: true, align: 'center', valign: 'middle',
@@ -232,7 +250,7 @@
area: ['100%', '100%'], //宽高
fix: false, //不固定
maxmin: true,
- content: Feng.ctxPath + '/tDriver/tDriver_immediately/' + TDriver.seItem.id
+ content: Feng.ctxPath + '/tDriver/tDriver_immediately/' + TDriver.seItem.id + '?auditType=' + (TDriver.seItem.auditType || 1)
});
this.layerIndex = index;
}
@@ -243,13 +261,14 @@
*/
TDriver.look = function(){
if (this.check()) {
+ var lookId = TDriver.seItem.auditType == 2 ? TDriver.seItem.driverId : TDriver.seItem.id;
var index = layer.open({
type: 2,
title: '查看详情',
area: ['100%', '100%'], //宽高
fix: false, //不固定
maxmin: true,
- content: Feng.ctxPath + '/tDriver/tDriver_look/' + TDriver.seItem.id
+ content: Feng.ctxPath + '/tDriver/tDriver_look/' + lookId
});
this.layerIndex = index;
}
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js
index 095f569..bc8e6b6 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tDriver/tDriver_info.js
@@ -128,6 +128,7 @@
});
ajax.set("id",$("#id").val());
ajax.set("authState",authState);
+ ajax.set("auditType",$("#auditType").val() || 1);
ajax.start();
}
diff --git a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
index 3898569..bf51f9a 100644
--- a/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
+++ b/ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
@@ -77,6 +77,14 @@
return btn;
}
},
+ {title: '叫车方式', field: 'callType', visible: true, align: 'center', valign: 'middle',
+ formatter: function (value, row) {
+ if (row.callType == 2) {
+ return '<p class="toolTip" title="快捷叫车">快捷叫车</p>';
+ }
+ return '<p class="toolTip" title="普通叫车">普通叫车</p>';
+ }
+ },
{title: '所属公司', field: 'companyName', visible: true, align: 'center', valign: 'middle',
},
{title: '班次时间', field: 'travelTime', visible: true, align: 'center', valign: 'middle',width:'10%',
@@ -429,6 +437,7 @@
queryData['driver'] = $("#driver").val();
queryData['state'] = $("#state").val();
queryData['rideType'] = $('#rideType').val();
+ queryData['callType'] = $('#callType').val();
queryData['promotionUser'] = $("#promotionUser").val();
queryData['abnormal'] = $("#abnormal").val();
queryData['promotion'] = $("#promotion").val();
@@ -451,6 +460,7 @@
let serverCarModelId = $('#serverCarModelId').val();
let driver = $('#driver').val();
let rideType = $('#rideType').val();
+ let callType = $('#callType').val();
let state = $('#state').val();
let promotionUser = $('#promotionUser').val();
let abnormal = $('#abnormal').val();
@@ -489,6 +499,9 @@
if(null != rideType && '' != rideType){
p += "rideType=" + rideType + "&" ;
}
+ if(null != callType && '' != callType){
+ p += "callType=" + callType + "&" ;
+ }
if(null != state && '' != state){
p += "state=" + state + "&" ;
}
diff --git a/ManagementYKDTravel/guns-admin/src/test/sql/sys_menu_entry_config.sql b/ManagementYKDTravel/guns-admin/src/test/sql/sys_menu_entry_config.sql
new file mode 100644
index 0000000..a7d0624
--- /dev/null
+++ b/ManagementYKDTravel/guns-admin/src/test/sql/sys_menu_entry_config.sql
@@ -0,0 +1,67 @@
+CREATE TABLE IF NOT EXISTS `sys_menu_entry_config` (
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+ `title` varchar(100) DEFAULT NULL COMMENT '标题',
+ `menu_id` bigint(20) DEFAULT NULL COMMENT '菜单id',
+ `menu_name` varchar(100) DEFAULT NULL COMMENT '菜单名称',
+ `entry_url` varchar(255) DEFAULT NULL COMMENT '入口URL',
+ `openCityId` int(11) DEFAULT NULL COMMENT '开通城市id',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_open_city_id` (`openCityId`),
+ KEY `idx_menu_id` (`menu_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='平台入口配置';
+
+-- 左侧菜单入口:平台设置 -> 入口设置
+SET @entry_menu_code := 'menu_entry_config';
+SET @parent_menu_code := (
+ SELECT `code`
+ FROM `sys_menu`
+ WHERE `name` = '平台设置'
+ AND `pcode` = '0'
+ ORDER BY `id`
+ LIMIT 1
+);
+SET @parent_menu_pcodes := (
+ SELECT `pcodes`
+ FROM `sys_menu`
+ WHERE `code` = @parent_menu_code
+ LIMIT 1
+);
+SET @parent_menu_id := (
+ SELECT `id`
+ FROM `sys_menu`
+ WHERE `code` = @parent_menu_code
+ LIMIT 1
+);
+SET @entry_menu_num := (
+ SELECT IFNULL(MAX(`num`), 0) + 1
+ FROM `sys_menu`
+ WHERE `pcode` = @parent_menu_code
+);
+
+INSERT INTO `sys_menu` (`code`, `pcode`, `pcodes`, `name`, `icon`, `url`, `num`, `levels`, `ismenu`, `tips`, `status`, `isopen`)
+SELECT @entry_menu_code, @parent_menu_code, CONCAT(@parent_menu_pcodes, '[', @parent_menu_code, '],'),
+ '入口设置', '', '/tCompany/menu_entry_config', @entry_menu_num, 2, 1, '', 1, 1
+FROM DUAL
+WHERE @parent_menu_code IS NOT NULL
+ AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `code` = @entry_menu_code);
+
+SET @entry_menu_id := (
+ SELECT `id`
+ FROM `sys_menu`
+ WHERE `code` = @entry_menu_code
+ LIMIT 1
+);
+
+INSERT INTO `sys_relation` (`menuid`, `roleid`)
+SELECT @entry_menu_id, r.`roleid`
+FROM `sys_relation` r
+WHERE r.`menuid` = @parent_menu_id
+ AND @entry_menu_id IS NOT NULL
+ AND NOT EXISTS (
+ SELECT 1
+ FROM `sys_relation` existing
+ WHERE existing.`menuid` = @entry_menu_id
+ AND existing.`roleid` = r.`roleid`
+ );
diff --git a/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java b/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java
index 297aa6e..02edd8c 100644
--- a/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java
+++ b/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java
@@ -156,7 +156,7 @@
params.put("lon", String.valueOf(lon));
params.put("lat", String.valueOf(lat));
params.put("timestamp", timestamp);
- HttpRequest post = HttpUtil.createPost(qytConfig.getChuxingUrl() + "/user-server/base/passenger/location/push");
+ HttpRequest post = HttpUtil.createPost(qytConfig.getChuxingUrl() + "/user/base/passenger/location/push");
post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
post.form(params);
HttpResponse execute = post.execute();
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ServerCarModelController.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ServerCarModelController.java
index 321ae56..07c70bf 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ServerCarModelController.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ServerCarModelController.java
@@ -51,6 +51,27 @@
}
}
+ /**
+ * 快捷叫车只需要起点,不计算预估价格。
+ *
+ * @param startLonLat 起点经纬度
+ * @return 车辆信息
+ */
+ @ResponseBody
+ @PostMapping("/queryQuickCallServerCarModel")
+ @ApiOperation(value = "快捷叫车获取车型", tags = {"用户端-专车"}, notes = "")
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "起点经纬度(103.22121,30.26123)", name = "startLonLat", required = true, dataType = "string")
+ })
+ public ResultUtil<List<ServerCarModelWarpper>> queryQuickCallServerCarModel(String startLonLat){
+ try {
+ return serverCarModelService.queryQuickCallServerCarModel(startLonLat);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
@ResponseBody
@PostMapping("/queryServerCarModels")
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
index 3a78ce0..ef397b4 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -2522,6 +2522,7 @@
OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId);
OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//记录当前订单,避免重复推送
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
+ boolean priorityDispatch = isNewUserPriorityDispatch(openCity, orderPrivateCar.getUserId());
List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//查询推单配置
for (int i = 1; i <= querys.size() + 15; i++) {
//循环检查订单状态
@@ -2565,6 +2566,9 @@
PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//查询指定距离内的空闲司机
+ if (priorityDispatch) {
+ sortDriversForNewUserPriority(list);
+ }
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//司机推送比例
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//根据比例计算推送司机数量
@@ -2600,6 +2604,7 @@
OrderTaxi orderTaxi = orderTaxiMapper.selectById(orderId);
OrderTaxiServiceImpl.orderIds.add(orderTaxi.getId());//记录当前订单,避免重复推送
OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
+ boolean priorityDispatch = isNewUserPriorityDispatch(openCity, orderTaxi.getUserId());
List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//查询推单配置
for (int i = 1; i <= querys.size() + 15; i++) {
//循环检查订单状态
@@ -2635,6 +2640,9 @@
PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//查询指定距离内的空闲司机
+ if (priorityDispatch) {
+ sortDriversForNewUserPriority(list);
+ }
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//司机推送比例
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//根据比例计算推送司机数量
@@ -2674,6 +2682,43 @@
}
}
+ /**
+ * 判断当前订单是否需要按新用户优先派单。
+ */
+ private boolean isNewUserPriorityDispatch(OpenCity openCity, Integer userId) {
+ if (openCity == null || userId == null) {
+ return false;
+ }
+ Company company = companyService.selectById(openCity.getId());
+ if (company == null || !Integer.valueOf(1).equals(company.getNewUserPriorityDispatch())) {
+ return false;
+ }
+ return isNewUserForDispatch(userId);
+ }
+
+ /**
+ * 新用户定义:专车、出租车、跨城均不存在完成态订单。
+ */
+ private boolean isNewUserForDispatch(Integer userId) {
+ if (userId == null) {
+ return false;
+ }
+ int privateCarCount = orderPrivateCarMapper.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ int taxiCount = orderTaxiMapper.selectCount(new EntityWrapper<OrderTaxi>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ int crossCityCount = orderCrossCityMapper.selectCount(new EntityWrapper<OrderCrossCity>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ return privateCarCount + taxiCount + crossCityCount == 0;
+ }
+
+ /**
+ * 新用户优先派单时,候选司机按距离从近到远排序。
+ */
+ private void sortDriversForNewUserPriority(List<Driver> drivers) {
+ if (drivers == null || drivers.isEmpty()) {
+ return;
+ }
+ drivers.sort(Comparator.comparingDouble(driver -> driver.getDistance() == null ? Double.MAX_VALUE : driver.getDistance()));
+ }
+
@Override
public List<OrderCrossCity> queryListOrder(Integer driverId, Integer lineShiftId, List<Integer> state, String day) throws Exception {
return orderCrossCityMapper.queryListOrder(driverId, lineShiftId, state, day);
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java
index aa1a6ea..837f35a 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/controller/OrderPrivateCarController.java
@@ -75,23 +75,27 @@
@ApiImplicitParam(value = "乘客电话(代下单必传)", name = "passengersPhone", required = false, dataType = "string"),
@ApiImplicitParam(value = "乘车人数", name = "peopleNum", required = true, dataType = "int"),
@ApiImplicitParam(value = "乘车类型(1=独享,2=一口价,3=拼车)", name = "rideType", required = true, dataType = "int"),
+ @ApiImplicitParam(value = "乘车类型(1=普通叫车流程,2=快捷叫车流程)", name = "callType", required = false, dataType = "int"),
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
})
public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer orderType, Integer substitute, String placementLon, String placementLat, String startLon, String startLat,
String startAddress, String endLon, String endLat, String endAddress, String passengers, String passengersPhone, Integer orderSource, Integer driverId,
- Integer type, HttpServletRequest request,Integer peopleNum,Integer rideType){
+ Integer type, HttpServletRequest request,Integer peopleNum,Integer rideType, Integer callType){
try {
Integer uid = userInfoService.getUserIdFormRedis(request);
if(null == uid){
return ResultUtil.tokenErr();
}
- if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
+ // 快捷叫车只支持实时单,不按预约时间转预约单。
+ if (Integer.valueOf(2).equals(callType)) {
+ orderType = 1;
+ } else if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
orderType = 2;
}else {
orderType = 1;
}
return orderPrivateCarService.saveOrderPrivateCar(serverCarModelId, travelTime, orderType, substitute, placementLon, placementLat,
- startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, type, uid,peopleNum,rideType);
+ startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, type, uid,peopleNum,rideType, callType);
}catch (Exception e){
e.printStackTrace();
return ResultUtil.runErr();
@@ -121,23 +125,27 @@
@ApiImplicitParam(value = "乘客姓名(代下单必传)", name = "passengers", required = false, dataType = "string"),
@ApiImplicitParam(value = "乘客电话(代下单必传)", name = "passengersPhone", required = false, dataType = "string"),
@ApiImplicitParam(value = "乘车人数", name = "peopleNum", required = true, dataType = "int"),
+ @ApiImplicitParam(value = "叫车方式(1=普通叫车,2=快捷叫车)", name = "callType", required = false, dataType = "int"),
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
})
public ResultUtil<BaseWarpper> saveOrderPrivateCars(String serverCarModel, Date travelTime, Integer orderType, Integer substitute, String placementLon, String placementLat, String startLon, String startLat,
String startAddress, String endLon, String endLat, String endAddress, String passengers, String passengersPhone, Integer orderSource, Integer driverId,
- HttpServletRequest request,Integer peopleNum){
+ HttpServletRequest request,Integer peopleNum, Integer callType){
try {
Integer uid = userInfoService.getUserIdFormRedis(request);
if(null == uid){
return ResultUtil.tokenErr();
}
- if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
+ // 快捷叫车只支持实时单,不按预约时间转预约单。
+ if (Integer.valueOf(2).equals(callType)) {
+ orderType = 1;
+ } else if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
orderType = 2;
}else {
orderType = 1;
}
return orderPrivateCarService.saveOrderPrivateCars(serverCarModel, travelTime, orderType, substitute, placementLon, placementLat,
- startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, uid,peopleNum);
+ startLon, startLat, startAddress, endLon, endLat, endAddress, passengers, passengersPhone, orderSource, driverId, uid,peopleNum, callType);
}catch (Exception e){
e.printStackTrace();
return ResultUtil.runErr();
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
index c5eb321..bf9fb62 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
@@ -81,6 +81,7 @@
<result column="oldState" property="oldState"/>
<result column="telX" property="telX"/>
<result column="bindId" property="bindId"/>
+ <result column="callType" property="callType"/>
<result column="splitAllocation" property="splitAllocation"/>
</resultMap>
@@ -271,6 +272,7 @@
select
id as orderId,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as orderTime,
DATE_FORMAT(travelTime, '%m月%d日 %H:%i') as time,
startAddress as startAddress,
@@ -357,6 +359,7 @@
a.reassignNotice as reassignNotice,
a.oldState as oldState,
a.rideType as rideType,
+ CAST(IFNULL(a.callType, 1) AS SIGNED) as callType,
a.pid as pid,
b.headImgUrl as driverAvatar,
b.`name` as driverName,
@@ -618,6 +621,7 @@
select
id as orderId,
rideType as rideType,
+ CAST(IFNULL(callType, 1) AS SIGNED) as callType,
DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i') as orderTime,
DATE_FORMAT(travelTime, '%m月%d日 %H:%i') as time,
startAddress as startAddress,
@@ -637,4 +641,4 @@
boardingLat
from t_order_private_car where userId = #{uid} and state in (8, 9) order by insertTime desc
</select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
index 79fe7bb..a10b6bc 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/model/OrderPrivateCar.java
@@ -421,6 +421,12 @@
@TableField("rideType")
private Integer rideType;
+ /**
+ * 叫车方式(1=普通叫车,2=快捷叫车)
+ */
+ @TableField("callType")
+ private Integer callType;
+
@TableField("pid")
private Integer pid;
@@ -705,6 +711,14 @@
this.rideType = rideType;
}
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
+ }
+
public Integer getId() {
return id;
}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
index 1305827..663e9c7 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/IOrderPrivateCarService.java
@@ -36,13 +36,13 @@
*/
ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat,
String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String name, String phone,
- Integer orderSource, Integer driverId, Integer type, Integer uid,Integer peopleNum,Integer rideType) throws Exception;
+ Integer orderSource, Integer driverId, Integer type, Integer uid,Integer peopleNum,Integer rideType, Integer callType) throws Exception;
ResultUtil<BaseWarpper> saveOrderPrivateCars(String serverCarModel, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat,
String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String name, String phone,
- Integer orderSource, Integer driverId, Integer uid,Integer peopleNum) throws Exception;
+ Integer orderSource, Integer driverId, Integer uid,Integer peopleNum, Integer callType) throws Exception;
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 16f73ba..d459209 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -197,12 +197,19 @@
*/
@Override
public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat,
- String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, Integer peopleNum, Integer rideType) throws Exception {
+ String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, Integer peopleNum, Integer rideType, Integer callType) throws Exception {
BaseWarpper baseWarpper = new BaseWarpper();
if (lock.tryLock()) {
try {
+ if (callType == null) {
+ callType = 1;
+ }
+ boolean quickCall = Integer.valueOf(2).equals(callType);
+ // 快捷叫车允许用户下单时没有终点,订单必须作为实时单处理。
//如果出行时间大于当前10分钟则默认为预约单
- if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
+ if (quickCall) {
+ reservation = 1;
+ } else if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
reservation = 2;
}
/**
@@ -267,8 +274,14 @@
startAddress = startAddress.replaceAll("& #40;", "(");
startAddress = startAddress.replaceAll("& #41;", ")");
- endAddress = endAddress.replaceAll("& #40;", "(");
- endAddress = endAddress.replaceAll("& #41;", ")");
+ // 普通叫车仍沿用原终点必填校验,快捷叫车由司机服务中补充终点。
+ if (!quickCall) {
+ if (ToolUtil.isEmpty(endLon) || ToolUtil.isEmpty(endLat) || ToolUtil.isEmpty(endAddress)) {
+ return ResultUtil.error("请设置终点");
+ }
+ endAddress = endAddress.replaceAll("& #40;", "(");
+ endAddress = endAddress.replaceAll("& #41;", ")");
+ }
if ((orderSource == 1 || orderSource == 3) && null == serverCarModelId) {
return ResultUtil.error("请选择服务车型");
}
@@ -288,16 +301,23 @@
orderPrivateCar.setStartLon(Double.valueOf(startLon));
orderPrivateCar.setStartLat(Double.valueOf(startLat));
orderPrivateCar.setStartAddress(startAddress);
- orderPrivateCar.setEndLon(Double.valueOf(endLon));
- orderPrivateCar.setEndLat(Double.valueOf(endLat));
- orderPrivateCar.setEndAddress(endAddress);
+ orderPrivateCar.setCallType(callType);
+ // 快捷叫车没有终点,不写入终点坐标和地址。
+ if (!quickCall) {
+ orderPrivateCar.setEndLon(Double.valueOf(endLon));
+ orderPrivateCar.setEndLat(Double.valueOf(endLat));
+ orderPrivateCar.setEndAddress(endAddress);
+ }
orderPrivateCar.setSubstitute(instead);
orderPrivateCar.setPassengers(name);
orderPrivateCar.setPassengersPhone(phone);
- // TODO: 2023/11/4 无法修改
- Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
- orderPrivateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
- orderPrivateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+ // 原逻辑保留:普通叫车下单时计算预估里程和时间。
+ // 快捷叫车无终点,不能在下单时计算预估里程和预估时间。
+ if (!quickCall) {
+ Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
+ orderPrivateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
+ orderPrivateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+ }
if (instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())) {
UserInfo userInfo = userInfoService.selectById(uid);
if (ToolUtil.isEmpty(userInfo.getPhone())) {
@@ -307,6 +327,12 @@
orderPrivateCar.setPassengersPhone(userInfo.getPhone());
}
orderPrivateCar.setState(1);
+ Integer saveOrderSource = orderSource;
+ // 快捷叫车按后付处理,跳过先付金额预估和待支付状态。
+ if (quickCall) {
+ orderSource = 2;
+ orderPrivateCar.setPaymentMode(2);
+ }
// ===== 先付/后付模式判断 =====
if (orderSource != 2) { // 扫码下单跳过先付判断(扫码下单已有固定司机)
TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne(
@@ -373,6 +399,7 @@
orderPrivateCar.setInsertTime(new Date());
orderPrivateCar.setTravelTime(travelTime);
orderPrivateCar.setOrderType(reservation);
+ orderSource = saveOrderSource;
orderPrivateCar.setOrderSource(orderSource);
if (orderSource == 2) {//扫码下单
Driver driver = driverService.selectById(driverId);
@@ -433,7 +460,8 @@
//判断独享,一口价,拼车
- if (orderPrivateCar.getRideType() != 3) {
+ // 快捷叫车无终点,不能参与拼车合单匹配,统一走普通派单流程。
+ if (quickCall || orderPrivateCar.getRideType() != 3) {
orderPrivateCar.setTotalPeopleNum(peopleNum);
orderPrivateCar.setIsReassign(1);
orderPrivateCar.setIsDelete(1);
@@ -474,7 +502,7 @@
if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
// Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat(), 1).get("distance").toString());
// Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
- // TODO: 2023/11/4 已改成计算直线距离
+ // 待处理:2023/11/4 已改成计算直线距离
Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat()).get("WGS84");
Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
//判断距离
@@ -497,7 +525,7 @@
// Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
// Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
- // TODO: 2023/11/4 已改成计算直线距离
+ // 待处理:2023/11/4 已改成计算直线距离
Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value).get("WGS84");
Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
//判断距离
@@ -588,15 +616,22 @@
*/
@Override
public ResultUtil<BaseWarpper> saveOrderPrivateCars(String serverCarModel, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String endLon,
- String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer uid, Integer peopleNum) throws Exception {
+ String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer uid, Integer peopleNum, Integer callType) throws Exception {
BaseWarpper baseWarpper = new BaseWarpper();
String key = "saveOrderPrivateCar:" + uid;
Boolean hasKey = redisTemplate.hasKey(key);
if (!hasKey) {
redisTemplate.opsForValue().set(key, uid, 30, TimeUnit.SECONDS);
try {
+ if (callType == null) {
+ callType = 1;
+ }
+ boolean quickCall = Integer.valueOf(2).equals(callType);
+ // 快捷叫车允许用户下单时没有终点,订单必须作为实时单处理。
//如果出行时间大于当前10分钟则默认为预约单
- if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
+ if (quickCall) {
+ reservation = 1;
+ } else if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) {
reservation = 2;
}
@@ -663,8 +698,14 @@
startAddress = startAddress.replaceAll("& #40;", "(");
startAddress = startAddress.replaceAll("& #41;", ")");
- endAddress = endAddress.replaceAll("& #40;", "(");
- endAddress = endAddress.replaceAll("& #41;", ")");
+ // 普通叫车仍沿用原终点必填校验,快捷叫车由司机服务中补充终点。
+ if (!quickCall) {
+ if (ToolUtil.isEmpty(endLon) || ToolUtil.isEmpty(endLat) || ToolUtil.isEmpty(endAddress)) {
+ return ResultUtil.error("请设置终点");
+ }
+ endAddress = endAddress.replaceAll("& #40;", "(");
+ endAddress = endAddress.replaceAll("& #41;", ")");
+ }
if (ToolUtil.isEmpty(serverCarModel)) {
return ResultUtil.error("请选择服务车型");
}
@@ -682,16 +723,22 @@
orderPrivateCar.setStartLon(Double.valueOf(startLon));
orderPrivateCar.setStartLat(Double.valueOf(startLat));
orderPrivateCar.setStartAddress(startAddress);
- orderPrivateCar.setEndLon(Double.valueOf(endLon));
- orderPrivateCar.setEndLat(Double.valueOf(endLat));
- orderPrivateCar.setEndAddress(endAddress);
+ orderPrivateCar.setCallType(callType);
+ // 快捷叫车没有终点,不写入终点坐标和地址。
+ if (!quickCall) {
+ orderPrivateCar.setEndLon(Double.valueOf(endLon));
+ orderPrivateCar.setEndLat(Double.valueOf(endLat));
+ orderPrivateCar.setEndAddress(endAddress);
+ }
orderPrivateCar.setSubstitute(instead);
orderPrivateCar.setPassengers(name);
orderPrivateCar.setPassengersPhone(phone);
- // TODO: 2023/11/4 无法修改
- Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
- orderPrivateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
- orderPrivateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+ // 快捷叫车无终点,不能在下单时计算预估里程和预估时间。
+ if (!quickCall) {
+ Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
+ orderPrivateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
+ orderPrivateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+ }
UserInfo userInfo = userInfoService.selectById(uid);
if (instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())) {
@@ -702,7 +749,11 @@
orderPrivateCar.setPassengersPhone(userInfo.getPhone());
}
orderPrivateCar.setState(1);
- if (orderSource != 2) {
+ if (quickCall) {
+ // 快捷叫车固定后付,跳过先付金额预估和待支付状态。
+ orderPrivateCar.setPaymentMode(2);
+ baseWarpper.setPaymentMode(2);
+ } else if (orderSource != 2) {
TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne(
new EntityWrapper<TSysPaymentMode>().last("LIMIT 1"));
if (paymentMode != null && paymentMode.getPrivateType() != null) {
@@ -775,6 +826,9 @@
if (rideType != 3) {
//推单操作-独享
+ this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
+ } else if (quickCall) {
+ // 快捷叫车不参与拼车合单,拼车车型也按普通派单处理。
this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
} else {
OrderPrivateCar orderPrivateCar1 = null;
@@ -998,7 +1052,7 @@
if (orderPrivateCar.getTravelTime().getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && orderPrivateCar.getTravelTime().getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
// Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat(), 1).get("distance").toString());
// Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
- // TODO: 2023/11/4 已改成计算直线距离
+ // 待处理:2023/11/4 已改成计算直线距离
Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat()).get("WGS84");
Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
//判断距离
@@ -1020,7 +1074,7 @@
String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId()));
// Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
// Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
- // TODO: 2023/11/4 已改成计算直线距离
+ // 待处理:2023/11/4 已改成计算直线距离
Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value).get("WGS84");
Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
//判断距离
@@ -1397,7 +1451,7 @@
orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice());
if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地
- // TODO: 2023/11/4 无法修改
+ // 待处理:2023/11/4 无法修改
Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
String d = "0";
String t = "0";
@@ -1415,7 +1469,7 @@
orderServerWarpper.setLaveTime("0");
}
if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中
- // TODO: 2023/11/4 无法修改
+ // 待处理:2023/11/4 无法修改
Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
String d = "0";
String t = "0";
@@ -2104,7 +2158,7 @@
orderPrivateCar.setSplitAllocation(JSON.toJSONString(map));
}
- // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
+ // 待处理:2020/5/24 这里需要给司机和用户推送订单状态
new Thread(new Runnable() {
@Override
public void run() {
@@ -2427,7 +2481,7 @@
promotion(orderPrivateCar.getId());
- // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
+ // 待处理:2020/5/24 这里需要给司机和用户推送订单状态
new Thread(new Runnable() {
@Override
public void run() {
@@ -2583,7 +2637,7 @@
this.deleteTask(orderPrivateCar.getId());//删除定时任务
- // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
+ // 待处理:2020/5/24 这里需要给司机和用户推送订单状态
// new Thread(new Runnable() {
// @Override
// public void run() {
@@ -3189,7 +3243,7 @@
this.updateById(orderPrivateCar);
promotion(orderPrivateCar.getId());
- // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
+ // 待处理:2020/5/24 这里需要给司机和用户推送订单状态
new Thread(new Runnable() {
@Override
public void run() {
@@ -3433,6 +3487,8 @@
integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
}
OpenCity openCity = openCityService.openCity1(startLon.toString(), startLat.toString());
+ OrderPrivateCar priorityOrder = orderPrivateCarMapper.selectById(id);
+ boolean priorityDispatch = isNewUserPriorityDispatch(openCity, priorityOrder == null ? null : priorityOrder.getUserId());
List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
//整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后任无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车
int num = 0;
@@ -3455,7 +3511,11 @@
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机
//随机排序
- Collections.shuffle(list);
+ if (priorityDispatch) {
+ sortDriversForNewUserPriority(list);
+ } else {
+ Collections.shuffle(list);
+ }
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
@@ -3533,6 +3593,7 @@
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
// 判断是否为派单模式
+ boolean priorityDispatch = isNewUserPriorityDispatch(openCity, orderPrivateCar.getUserId());
TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
if(sysPushType!=null && sysPushType.getPushType()==2){
System.out.println( "派单模式");
@@ -3541,7 +3602,7 @@
// 固定5公里进行派单
List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), 5.0, null);//所有附近空闲司机
if (list.size() > 0) {
- Driver driver1 = list.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
+ Driver driver1 = selectDispatchDriver(list, priorityDispatch);
if(orderPrivateCar.getType() == 3){
//批量订单
CarService carService = new CarService();
@@ -3664,6 +3725,9 @@
}
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+ if (priorityDispatch) {
+ sortDriversForNewUserPriority(list);
+ }
System.out.println(list.toString()+"XXXXXXXX");
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
@@ -3712,6 +3776,53 @@
}).start();
}
+ /**
+ * 判断当前订单是否需要按新用户优先派单。
+ */
+ private boolean isNewUserPriorityDispatch(OpenCity openCity, Integer userId) {
+ if (openCity == null || userId == null) {
+ return false;
+ }
+ Company company = companyService.selectById(openCity.getId());
+ if (company == null || !Integer.valueOf(1).equals(company.getNewUserPriorityDispatch())) {
+ return false;
+ }
+ return isNewUserForDispatch(userId);
+ }
+
+ /**
+ * 新用户定义:专车、出租车、跨城均不存在完成态订单。
+ */
+ private boolean isNewUserForDispatch(Integer userId) {
+ if (userId == null) {
+ return false;
+ }
+ int privateCarCount = orderPrivateCarMapper.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ int taxiCount = orderTaxiMapper.selectCount(new EntityWrapper<OrderTaxi>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ int crossCityCount = orderCrossCityMapper.selectCount(new EntityWrapper<OrderCrossCity>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ return privateCarCount + taxiCount + crossCityCount == 0;
+ }
+
+ /**
+ * 新用户优先派单时,候选司机按距离从近到远排序。
+ */
+ private void sortDriversForNewUserPriority(List<Driver> drivers) {
+ if (drivers == null || drivers.isEmpty()) {
+ return;
+ }
+ drivers.sort(Comparator.comparingDouble(driver -> driver.getDistance() == null ? Double.MAX_VALUE : driver.getDistance()));
+ }
+
+ /**
+ * 智能指派模式下,新用户选择最近司机;普通订单保持原有选择方式。
+ */
+ private Driver selectDispatchDriver(List<Driver> drivers, boolean priorityDispatch) {
+ if (priorityDispatch) {
+ return drivers.stream().sorted(Comparator.comparingDouble(driver -> driver.getDistance() == null ? Double.MAX_VALUE : driver.getDistance())).findFirst().get();
+ }
+ return drivers.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
+ }
+
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml
index 1fe2a80..f8b4b8e 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CompanyMapper.xml
@@ -51,6 +51,7 @@
<result column="state" property="state"/>
<result column="flag" property="flag"/>
<result column="upload" property="upload"/>
+ <result column="newUserPriorityDispatch" property="newUserPriorityDispatch"/>
<result column="insertTime" property="insertTime"/>
</resultMap>
@@ -104,6 +105,7 @@
state as state,
flag as flag,
upload as upload,
+ newUserPriorityDispatch as newUserPriorityDispatch,
insertTime as insertTime
from t_company where flag != 3 and state = 0 and id in (
select companyId from t_company_city where state = 1
@@ -130,4 +132,4 @@
and provinceCode = #{province} and (cityCode = '' or cityCode is null) and (areaCode = '' or areaCode is null)
</if>
</select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
index f8dad4f..a24d604 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
@@ -249,6 +249,11 @@
@TableField("upload")
private Integer upload;
/**
+ * 新用户优先派单(0=否,1=是)
+ */
+ @TableField("newUserPriorityDispatch")
+ private Integer newUserPriorityDispatch;
+ /**
* 创建日期
*/
@TableField("insertTime")
@@ -691,6 +696,14 @@
this.upload = upload;
}
+ public Integer getNewUserPriorityDispatch() {
+ return newUserPriorityDispatch;
+ }
+
+ public void setNewUserPriorityDispatch(Integer newUserPriorityDispatch) {
+ this.newUserPriorityDispatch = newUserPriorityDispatch;
+ }
+
public Date getInsertTime() {
return insertTime;
}
@@ -797,6 +810,7 @@
", state=" + state +
", flag=" + flag +
", upload=" + upload +
+ ", newUserPriorityDispatch=" + newUserPriorityDispatch +
", insertTime=" + insertTime +
'}';
}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java
index f3299e5..67759a5 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IServerCarModelService.java
@@ -21,6 +21,14 @@
*/
ResultUtil<List<ServerCarModelWarpper>> queryServerCarModel(String startLonLat, String endLonLat, Integer type) throws Exception;
+ /**
+ * 快捷叫车根据起点获取车辆信息,不计算预估价格。
+ * @param startLonLat 起点经纬度
+ * @return 车辆信息
+ * @throws Exception
+ */
+ ResultUtil<List<ServerCarModelWarpper>> queryQuickCallServerCarModel(String startLonLat) throws Exception;
+
/**
* 获取业务类型对应的所有车型
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
index 0736608..e778d12 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -101,7 +101,7 @@
}
}
}
- return list;
+ return drivers;
}
@Override
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
index a42183a..aa07045 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java
@@ -118,6 +118,46 @@
public List<Map<String, Object>> queryServerCarModels(Integer type) {
return serverCarModelMapper.queryServerCarModel(type);
}
+
+ /**
+ * 快捷叫车无终点,只返回可选车辆信息,不计算预估价格。
+ *
+ * @param startLonLat 起点经纬度
+ * @return 车辆信息
+ * @throws Exception
+ */
+ @Override
+ public ResultUtil<List<ServerCarModelWarpper>> queryQuickCallServerCarModel(String startLonLat) throws Exception {
+ Map<String, String> geocode = gdMapGeocodingUtil.geocode(startLonLat.split(",")[0], startLonLat.split(",")[1]);
+ Company query = companyCityService.query(geocode.get("districtCode"));
+ if (null == query) {
+ return ResultUtil.error("起点暂无企业提供服务", new ArrayList<>());
+ }
+ OpenCity openCity = openCityService.openCity1(geocode.get("districtCode"));
+ if (null == openCity) {
+ return ResultUtil.error("起点暂未开通", new ArrayList<>());
+ }
+ List<BaseWarpper> baseWarppers = openCityBusinessService.queryBusinessById(openCity.getId());
+ List<ServerCarModelWarpper> data = new ArrayList<>();
+ Optional<BaseWarpper> privateCarBusiness = baseWarppers.stream().filter(s -> s.getId() == 1).findFirst();
+ if (privateCarBusiness.isPresent() && !Integer.valueOf(2).equals(query.getIsSpe())) {
+ data.addAll(this.getPrice(query.getId(), 0, 0, 0, 1, geocode));
+ }
+ Optional<BaseWarpper> taxiBusiness = baseWarppers.stream().filter(s -> s.getId() == 2).findFirst();
+ if (taxiBusiness.isPresent() && !Integer.valueOf(2).equals(query.getIsTaxi())) {
+ ServerCarModelWarpper taxiWarpper = this.getTextPrice(query.getId(), 0, 0, 0, 2, geocode);
+ if (taxiWarpper != null) {
+ data.add(taxiWarpper);
+ }
+ }
+ // 快捷叫车不能参与拼车合单,前端不展示拼车选项。
+ for (ServerCarModelWarpper warpper : data) {
+ warpper.setMileage(0D);
+ warpper.setDuration(0D);
+ warpper.setPc_check(0);
+ }
+ return ResultUtil.success(data);
+ }
/**
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
index ccf77a5..04bba7e 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderInfoWarpper.java
@@ -428,6 +428,9 @@
@ApiModelProperty("乘车类型(1=独享,2=一口价,3=拼车)")
private Integer rideType;
+ @ApiModelProperty("叫车方式(1=普通叫车,2=快捷叫车)")
+ private Integer callType;
+
private Integer pid;
@ApiModelProperty("0未成功,1成功")
@@ -993,6 +996,14 @@
this.rideType = rideType;
}
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
+ }
+
public List<OrderAdditionalFeeWarpper> getOrderAdditionalFeeWarpper() {
return orderAdditionalFeeWarpper;
}
@@ -1077,6 +1088,7 @@
orderInfoWarpper.setSpellSuccess(null != map.get("spellSuccess") ? Integer.valueOf(String.valueOf(map.get("spellSuccess"))) : 1);
orderInfoWarpper.setDriverCancle(null != map.get("driverCancle") ? Integer.valueOf(String.valueOf(map.get("driverCancle"))) : 0);
orderInfoWarpper.setRideType(null != map.get("rideType") ? Integer.valueOf(String.valueOf(map.get("rideType"))) : 1);
+ orderInfoWarpper.setCallType(null != map.get("callType") ? Integer.valueOf(String.valueOf(map.get("callType"))) : 1);
orderInfoWarpper.setOrderType(null != map.get("orderType") ? Integer.valueOf(map.get("orderType").toString()) : 0);
orderInfoWarpper.setType(null != map.get("type") ? Integer.valueOf(map.get("type").toString()) : 0);
orderInfoWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
index 6bd51e0..055cefa 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderWarpper.java
@@ -71,6 +71,9 @@
@ApiModelProperty("乘车类型(1=独享,2=一口价,3=拼车)")
private Integer rideType;
+ @ApiModelProperty("叫车方式(1=普通叫车,2=快捷叫车)")
+ private Integer callType;
+
@ApiModelProperty("乘车用户类型(1=个人,2=司机)")
private Integer rideUserType;
@@ -104,6 +107,14 @@
public void setRideType(Integer rideType) {
this.rideType = rideType;
+ }
+
+ public Integer getCallType() {
+ return callType;
+ }
+
+ public void setCallType(Integer callType) {
+ this.callType = callType;
}
public String getEndServiceTime() {
@@ -326,6 +337,7 @@
for(Map<String, Object> map : maps){
OrderWarpper orderWarpper = new OrderWarpper();
orderWarpper.setRideType(null != map.get("rideType") ? Integer.valueOf(String.valueOf(map.get("rideType"))) : 1);
+ orderWarpper.setCallType(null != map.get("callType") ? Integer.valueOf(String.valueOf(map.get("callType"))) : 1);
orderWarpper.setOrderId(null != map.get("orderId") ? Integer.valueOf(String.valueOf(map.get("orderId"))) : 0);
orderWarpper.setOrderTime(null != map.get("orderTime") ? String.valueOf(map.get("orderTime")) : "");
orderWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
index 8dbc551..b0d0240 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -2805,6 +2805,7 @@
}
OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
+ boolean priorityDispatch = isNewUserPriorityDispatch(openCity, orderTaxi.getUserId());
System.out.println("城市city732,"+openCity);
// 判断是否为智能派单
TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
@@ -2818,7 +2819,7 @@
List<Driver> listDriver = driverService.queryIdleDriver(2, orderTaxi1.getStartLon(), orderTaxi1.getStartLat(), 5.0, null);//查询5公里内空闲司机
System.out.println("指派模式743"+listDriver);
if (listDriver.size() > 0) {
- Driver driver1 = listDriver.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
+ Driver driver1 = selectDispatchDriver(listDriver, priorityDispatch);
orderTaxi1.setDriverId(driver1.getId());
orderTaxi1.setCarId(driver1.getCarId());
@@ -2936,7 +2937,11 @@
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//查询指定距离内的空闲司机
//随机排序
- Collections.shuffle(list);
+ if (priorityDispatch) {
+ sortDriversForNewUserPriority(list);
+ } else {
+ Collections.shuffle(list);
+ }
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//司机推送比例
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//根据比例计算推送司机数量
@@ -2996,6 +3001,53 @@
}
+ /**
+ * 判断当前订单是否需要按新用户优先派单。
+ */
+ private boolean isNewUserPriorityDispatch(OpenCity openCity, Integer userId) {
+ if (openCity == null || userId == null) {
+ return false;
+ }
+ Company company = companyService.selectById(openCity.getId());
+ if (company == null || !Integer.valueOf(1).equals(company.getNewUserPriorityDispatch())) {
+ return false;
+ }
+ return isNewUserForDispatch(userId);
+ }
+
+ /**
+ * 新用户定义:专车、出租车、跨城均不存在完成态订单。
+ */
+ private boolean isNewUserForDispatch(Integer userId) {
+ if (userId == null) {
+ return false;
+ }
+ int privateCarCount = orderPrivateCarMapper.selectCount(new EntityWrapper<OrderPrivateCar>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ int taxiCount = orderTaxiMapper.selectCount(new EntityWrapper<OrderTaxi>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ int crossCityCount = orderCrossCityMapper.selectCount(new EntityWrapper<OrderCrossCity>().eq("userId", userId).in("state", Arrays.asList(8, 9)));
+ return privateCarCount + taxiCount + crossCityCount == 0;
+ }
+
+ /**
+ * 新用户优先派单时,候选司机按距离从近到远排序。
+ */
+ private void sortDriversForNewUserPriority(List<Driver> drivers) {
+ if (drivers == null || drivers.isEmpty()) {
+ return;
+ }
+ drivers.sort(Comparator.comparingDouble(driver -> driver.getDistance() == null ? Double.MAX_VALUE : driver.getDistance()));
+ }
+
+ /**
+ * 智能指派模式下,新用户选择最近司机;普通订单保持原有选择方式。
+ */
+ private Driver selectDispatchDriver(List<Driver> drivers, boolean priorityDispatch) {
+ if (priorityDispatch) {
+ return drivers.stream().sorted(Comparator.comparingDouble(driver -> driver.getDistance() == null ? Double.MAX_VALUE : driver.getDistance())).findFirst().get();
+ }
+ return drivers.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
+ }
+
private Integer isPromotion(Integer userId, String code){
UserInfo userInfo = userInfoService.selectById(userId);
if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()>=System.currentTimeMillis()){
--
Gitblit v1.7.1