From 6e0bccef16f74b5aa80eb51d7792a36ed7e20c38 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期六, 26 七月 2025 17:43:06 +0800 Subject: [PATCH] 开发车型列表及下单等模块相关逻辑 --- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java | 36 ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSysReformist/tSysReformist.html | 12 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java | 7 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java | 111 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java | 6 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java | 22 UserQYTTravel/guns-admin/pom.xml | 15 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 5242 +++++++++--------- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java | 195 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java | 223 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java | 4 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java | 46 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java | 42 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java | 4 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java | 167 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java | 3 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml | 5 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java | 4318 +++++++------- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml | 3 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/newlyAdded/NewlyAddedController.java | 14 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/CharteredCar/server/impl/OrderCharteredCarServiceImpl.java | 20 /dev/null | 0 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbSpellOrderRule.java | 123 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/call/server/impl/OrderCallServiceImpl.java | 14 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java | 104 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml | 3 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 5110 +++++++++--------- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java | 46 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml | 2 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml | 4 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java | 11 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbShowModular.java | 154 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java | 13 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java | 3 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java | 230 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 51 42 files changed, 8,331 insertions(+), 8,044 deletions(-) diff --git a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSysReformist/tSysReformist.html b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSysReformist/tSysReformist.html index 5fa2833..5c41fc9 100644 --- a/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSysReformist/tSysReformist.html +++ b/ManagementQYTTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSysReformist/tSysReformist.html @@ -43,18 +43,18 @@ <div> <div style="float: left;"> <label class="lab checked" onclick="checkedLable(this)" tag="pushOrderSettings">推单设置</label> -<!-- <label class="lab" onclick="checkedLable(this)" tag="driverPayDays">司机分账账期设置</label>--> + <label class="lab" onclick="checkedLable(this)" tag="driverPayDays">司机分账账期设置</label> <label class="lab" onclick="checkedLable(this)" tag="cancelOrderSettings">取消订单设置</label> <label class="lab" onclick="checkedLable(this)" tag="cancelTheReservationOrderSetting">预约单取消设置</label> -<!-- <label class="lab" onclick="checkedLable(this)" tag="spellOrderSetting">拼单派单设置</label>--> -<!-- <label class="lab" onclick="checkedLable(this)" tag="timeoutDeductionSettings">超时扣款设置</label>--> + <label class="lab" onclick="checkedLable(this)" tag="spellOrderSetting">拼单派单设置</label> + <label class="lab" onclick="checkedLable(this)" tag="timeoutDeductionSettings">超时扣款设置</label> <label class="lab" onclick="checkedLable(this)" tag="reassigningSet">改派设置</label> -<!-- <label class="lab" onclick="checkedLable(this)" tag="faceRecognitionSettings">人脸识别设置</label>--> + <label class="lab" onclick="checkedLable(this)" tag="faceRecognitionSettings">人脸识别设置</label> <label class="lab" onclick="checkedLable(this)" tag="integralSet">积分设置</label> -<!-- <label class="lab" onclick="checkedLable(this)" tag="withdrawalFeeSetting">提现手续费设置</label>--> + <label class="lab" onclick="checkedLable(this)" tag="withdrawalFeeSetting">提现手续费设置</label> <label class="lab" onclick="checkedLable(this)" tag="phoneSettings">电话设置</label> <label class="lab" onclick="checkedLable(this)" tag="holidayServiceFeeSetting">节假日服务费设置</label> -<!-- <label class="lab" onclick="checkedLable(this)" tag="95128TheOnCall">95128电召</label>--> + <label class="lab" onclick="checkedLable(this)" tag="95128TheOnCall">95128电召</label> <label class="lab" onclick="checkedLable(this)" tag="moduleManagement">模块管理</label> </div> <div style="float: left;width: 1200px;margin-left: 50px;"> diff --git a/UserQYTTravel/guns-admin/lib/cas-client-oncon-3.0.5.jar b/UserQYTTravel/guns-admin/lib/cas-client-oncon-3.0.5.jar deleted file mode 100644 index b5a22e1..0000000 --- a/UserQYTTravel/guns-admin/lib/cas-client-oncon-3.0.5.jar +++ /dev/null Binary files differ diff --git a/UserQYTTravel/guns-admin/lib/cas-client-oncon-core-1.2.2.jar b/UserQYTTravel/guns-admin/lib/cas-client-oncon-core-1.2.2.jar deleted file mode 100644 index 6db5395..0000000 --- a/UserQYTTravel/guns-admin/lib/cas-client-oncon-core-1.2.2.jar +++ /dev/null Binary files differ diff --git a/UserQYTTravel/guns-admin/pom.xml b/UserQYTTravel/guns-admin/pom.xml index 4351124..33f1860 100644 --- a/UserQYTTravel/guns-admin/pom.xml +++ b/UserQYTTravel/guns-admin/pom.xml @@ -210,21 +210,6 @@ <scope>system</scope> <systemPath>${pom.basedir}/lib/openApiClient-1.0.0.jar</systemPath> </dependency> - <!--单点登录sdk--> - <dependency> - <groupId>com.cas</groupId> - <artifactId>cas-client-oncon</artifactId> - <version>3.0.5</version> - <scope>system</scope> - <systemPath>${pom.basedir}/lib/cas-client-oncon-3.0.5.jar</systemPath> - </dependency> - <dependency> - <groupId>com.cas</groupId> - <artifactId>cas-client-oncon-core</artifactId> - <version>1.2.2</version> - <scope>system</scope> - <systemPath>${pom.basedir}/lib/cas-client-oncon-core-1.2.2.jar</systemPath> - </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/CharteredCar/server/impl/OrderCharteredCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/CharteredCar/server/impl/OrderCharteredCarServiceImpl.java index 015bba4..c878765 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/CharteredCar/server/impl/OrderCharteredCarServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/CharteredCar/server/impl/OrderCharteredCarServiceImpl.java @@ -1,19 +1,20 @@ package com.stylefeng.guns.modular.CharteredCar.server.impl; -import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.CharteredCar.dao.OrderCharteredCarMapper; import com.stylefeng.guns.modular.CharteredCar.model.OrderCharteredCar; import com.stylefeng.guns.modular.CharteredCar.server.IOrderCharteredCarService; import com.stylefeng.guns.modular.account.controller.AppOrderController; -import com.stylefeng.guns.modular.api.OrderController; import com.stylefeng.guns.modular.crossCity.dao.OrderCrossCityMapper; import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper; -import com.stylefeng.guns.modular.system.model.*; +import com.stylefeng.guns.modular.system.model.Company; +import com.stylefeng.guns.modular.system.model.OrderCancel; +import com.stylefeng.guns.modular.system.model.SensitiveWords; +import com.stylefeng.guns.modular.system.model.UserInfo; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.DateUtil; import com.stylefeng.guns.modular.system.util.PayMoneyUtil; @@ -77,6 +78,8 @@ @Autowired private IPaymentRecordService paymentRecordService; + @Autowired + private IOpenCityService openCityService; @Autowired private IIncomeService incomeService; @@ -230,9 +233,9 @@ } userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("companyId", orderCharteredCar.getCompanyId())); - userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 +// OpenCity openCity = openCityService.openCity1(orderCharteredCar.getStartLon().toString(), orderCharteredCar.getStartLat().toString()); +// SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("openCityId", openCity.getId())); +// userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 //添加交易明细 transactionDetailsService.saveData(uid, "包车-感谢费", money, 2, 1, 1, 6, orderId); @@ -268,8 +271,9 @@ paymentRecordService.updateById(query); UserInfo userInfo = userInfoService.selectById(orderCharteredCar.getUserId()); - SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("companyId", orderCharteredCar.getCompanyId())); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 +// OpenCity openCity = openCityService.openCity1(orderCharteredCar.getStartLon().toString(), orderCharteredCar.getStartLat().toString()); +// SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("openCityId", openCity.getId())); +// userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 //添加交易明细 transactionDetailsService.saveData(userInfo.getId(), "包车-感谢费", query.getAmount(), 2, 1, 1, 6, orderId); userInfoService.updateById(userInfo); diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java index 824830c..ce1ca75 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java @@ -66,25 +66,28 @@ @Autowired private IOrderService orderService; - + @Autowired private IDriverService driverService; - + @Autowired private WeChatUtil weChatUtil; - + @Autowired private IOrderPrivateCarService orderPrivateCarService; - + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; + @Autowired private IComplaintService complaintService; - + @Autowired private IOrderEvaluateService orderEvaluateService; - + @Autowired private IOrderCrossCityService orderCrossCityService; - + @Autowired private IOrderLogisticsService orderLogisticsService; @@ -132,6 +135,9 @@ @Resource private RedisTemplate<String, Object> redisTemplate; + + @Resource + private ISystemPriceCityService systemPriceCityService; /** @@ -509,18 +515,27 @@ } OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); - if(orderPrivateCar.getState()>1){ - Map<String, Object> query1 = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId()); - System.out.println("参数:"+orderPrivateCar.getCompanyId()+"|"+orderPrivateCar.getServerCarModelId()); - System.out.println("query1:"+query1); + if(orderPrivateCar.getState()>1) { + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + String provinceCode = geocode.get("provinceCode"); + String cityCode = geocode.get("cityCode"); + String districtCode = geocode.get("districtCode"); + //获取匹配的城市价格配置 + SystemPriceCity systemPriceCity = systemPriceCityService.queryOne(provinceCode, cityCode, districtCode); + if (null == systemPriceCity) { + return ResultUtil.error("请先配置价格规则"); + } + Map<String, Object> query1 = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId(), systemPriceCity.getId()); + System.out.println("参数:" + orderPrivateCar.getCompanyId() + "|" + orderPrivateCar.getServerCarModelId()); + System.out.println("query1:" + query1); //开始根据不同的方式计算金额 - if(query1!=null){ - JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());//等待费 - JSONObject contentPutOne = JSON.parseObject(query1.get("contentPutOne").toString());//一人拼成 - JSONObject contentNotOne = JSON.parseObject(query1.get("contentNotOne").toString());//一人未拼成 - JSONObject contentPutTwo = JSON.parseObject(query1.get("contentPutTwo").toString());//2人拼成 - JSONObject contentNotTwo = JSON.parseObject(query1.get("contentNotTwo").toString());//2人未拼成 - JSONObject contentPutThree = JSON.parseObject(query1.get("contentPutThree").toString());//3人拼成 + if (query1 != null) { + JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());//等待费 + JSONObject contentPutOne = JSON.parseObject(query1.get("contentPutOne").toString());//一人拼成 + JSONObject contentNotOne = JSON.parseObject(query1.get("contentNotOne").toString());//一人未拼成 + JSONObject contentPutTwo = JSON.parseObject(query1.get("contentPutTwo").toString());//2人拼成 + JSONObject contentNotTwo = JSON.parseObject(query1.get("contentNotTwo").toString());//2人未拼成 + JSONObject contentPutThree = JSON.parseObject(query1.get("contentPutThree").toString());//3人拼成 JSONObject contentNotThree = JSON.parseObject(query1.get("contentNotThree").toString());//3人未拼成 JSONObject contentExclusive = JSON.parseObject(query1.get("contentExclusive").toString());//独享 JSONObject contentPrice = JSON.parseObject(query1.get("contentPrice").toString());//一口价 diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/call/server/impl/OrderCallServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/call/server/impl/OrderCallServiceImpl.java index 5e457f8..799bc3c 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/call/server/impl/OrderCallServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/call/server/impl/OrderCallServiceImpl.java @@ -6,12 +6,10 @@ import com.stylefeng.guns.modular.call.dao.OrderCallMapper; import com.stylefeng.guns.modular.call.model.OrderCall; import com.stylefeng.guns.modular.call.server.IOrderCallService; +import com.stylefeng.guns.modular.system.model.OpenCity; import com.stylefeng.guns.modular.system.model.SysIntegral; import com.stylefeng.guns.modular.system.model.UserInfo; -import com.stylefeng.guns.modular.system.service.IIncomeService; -import com.stylefeng.guns.modular.system.service.ISysIntegralService; -import com.stylefeng.guns.modular.system.service.ISystemNoticeService; -import com.stylefeng.guns.modular.system.service.IUserInfoService; +import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.PayMoneyUtil; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.UUIDUtil; @@ -39,6 +37,8 @@ @Autowired private ISysIntegralService sysIntegralService; + @Autowired + private IOpenCityService openCityService; @Autowired private IIncomeService incomeService; @@ -77,7 +77,8 @@ userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("companyId", orderCall.getCompanyId())); + OpenCity openCity = openCityService.openCity1(orderCall.getStartLon().toString(), orderCall.getStartLat().toString()); + SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("openCityId", openCity.getId())); userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 //添加交易明细 @@ -112,7 +113,8 @@ paymentRecordService.updateById(query); UserInfo userInfo = userInfoService.selectById(orderCall.getUserId()); - SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("companyId", orderCall.getCompanyId())); + OpenCity openCity = openCityService.openCity1(orderCall.getStartLon().toString(), orderCall.getStartLat().toString()); + SysIntegral query1 = sysIntegralService.selectOne(new EntityWrapper<SysIntegral>().eq("openCityId", openCity.getId())); userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 //添加交易明细 transactionDetailsService.saveData(userInfo.getId(), "助老模式-感谢费", query.getAmount(), 2, 1, 1, 7, orderId); diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java index 4aca942..49916e2 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java @@ -63,1441 +63,1449 @@ @Service @Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class OrderCrossCityServiceImpl extends ServiceImpl<OrderCrossCityMapper, OrderCrossCity> implements IOrderCrossCityService { - - @Resource - private OrderCrossCityMapper orderCrossCityMapper; - - @Resource - private LinePriceMapper linePriceMapper; - - @Resource - private UserActivityDiscount1Mapper userActivityDiscount1Mapper; - - @Resource - private SysIntegralMapper sysIntegralMapper; - - @Resource - private LineShiftDriverMapper lineShiftDriverMapper; - - @Resource - private OrderPrivateCarMapper orderPrivateCarMapper; - - @Resource - private OrderTaxiMapper orderTaxiMapper; - - @Resource - private RegionMapper regionMapper; - - @Resource - private SensitiveWordsMapper sensitiveWordsMapper; - - @Autowired - private GDMapElectricFenceUtil gdMapElectricFenceUtil; - - @Autowired - private IUserInfoService userInfoService; - - @Autowired - private IUserCouponRecordService userCouponRecordService; - - @Autowired - private IUserRedPacketRecordService userRedPacketRecordService; - - @Autowired - private IPaymentRecordService paymentRecordService; - - @Autowired - private ITransactionDetailsService transactionDetailsService; - - @Autowired - private IOrderPrivateCarService orderPrivateCarService; - - @Autowired - private ILineService lineService; - - @Autowired - private IIncomeService incomeService; - - @Autowired - private IDriverService driverService; - - @Autowired - private PushUtil pushUtil; - - @Autowired - private ISystemNoticeService systemNoticeService; - - @Autowired - private DateUtil dateUtil; - - @Autowired - private GDMapGeocodingUtil gdMapGeocodingUtil; - - @Autowired - private ChinaMobileUtil chinaMobileUtil; - - @Autowired - private GDFalconUtil gdFalconUtil; - - @Resource - private RedisTemplate<String, Object> redisTemplate; - - @Autowired - private ICancleOrderService cancleOrderService; - - @Autowired - private IOrderCancelService orderCancelService; - - @Autowired - private RestTemplate internalRestTemplate; - - @Autowired - private IUserActivityRedenvelopeService userActivityRedenvelopeService; - - @Autowired - private IOrderPositionService orderPositionService; - - @Autowired - private IOrderTaxiService orderTaxiService; - - @Autowired - private ICompanyCityService companyCityService; - - @Autowired - private IPushOrderService pushOrderService; - - @Autowired - private IOpenCityService openCityService; - - @Autowired - private PayMoneyUtil payMoneyUtil; - - @Autowired - private IOrderLogisticsService orderLogisticsService; - - @Autowired - private ITaxiCardPaymentService taxiCardPaymentService; - - @Autowired - private ICompanyService companyService; - - @Autowired - private ITaxiCardService taxiCardService; - - @Autowired - private IUserUserService userUserService; - - @Autowired - private IUserTaxiCardService userTaxiCardService; - - @Autowired - private IRegionService regionService; - - - @Value("${callbackPath}") - private String callbackPath; - - public Map<String, Thread> threadMap = new HashMap<>(); - - //存储摆渡车无接单后推送标识,实现多个类型的摆渡车订单无人接单后只给前端推送一次 - public static Map<Integer, Boolean> pushEndMap = new HashMap<>(); - - - - - - - /** - * 计算支付金额 - * @param startLonLat - * @param endLonLat - * @param peopleNumber - * @param travelMode - * @param lineId - * @param serverCarModelId - * @return - * @throws Exception - */ - @Override - public ResultUtil queryOrderMoney(String startLonLat, String endLonLat, Integer peopleNumber, Integer travelMode, Integer lineId, - Integer serverCarModelId, Integer totalSeat, String seatNumber) throws Exception { - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1);//调用高德计算距离 - if(null != distance){ - return this.getPrice(Double.valueOf(distance.get("distance")), peopleNumber, travelMode, lineId, serverCarModelId, totalSeat, seatNumber); - } - return ResultUtil.error("计算行程距离出错啦!"); - } - - /** - * 获取用户余额和可用优惠券数量 - * @param orderId - * @param uid - * @return - * @throws Exception - */ - @Override - public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { - Map<String, Object> map = new HashMap<>(); - UserInfo userInfo = userInfoService.selectById(uid); - map.put("balance", userInfo.getBalance()); - OrderCrossCity orderCrossCity = this.selectById(orderId); - int i = userCouponRecordService.queryAvailable(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney()); - i = i + userCouponRecordService.queryAvailable(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney()); - map.put("coupon", i); - return map; - } - - - @Override - public PreferentialDataVo queryBalance1(Integer orderId, Integer uid) throws Exception { - UserInfo userInfo = userInfoService.selectById(uid); - PreferentialDataVo preferentialDataVo = new PreferentialDataVo(); - preferentialDataVo.setBalance(userInfo.getBalance()); - OrderCrossCity orderCrossCity = this.selectById(orderId); - Integer ids = userInfoService.getDiscount(); - if(ids!=null){ - List<UserActivityDiscount1> userActivityId = userActivityDiscount1Mapper.selectList(new EntityWrapper<UserActivityDiscount1>().eq("userActivityId", ids)); - if(userActivityId.size()>0){ - - preferentialDataVo.setDiscount(userActivityId.get(0).getLogistics()); - } - } - // 查出当前用户的红包 并将订单的修改 - List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).le("money",orderCrossCity.getOrderMoney()).gt("expirationTime", new Date()).gt("endTime", new Date())); - if(userRedPacketRecords.size()>0){ - - preferentialDataVo.setRedPacket(userRedPacketRecords.get(0).getMoney()); - orderCrossCity.setRedPacketId(userRedPacketRecords.get(0).getId()); - orderCrossCity.setRedPacketMoney(userRedPacketRecords.get(0).getMoney()); - this.updateById(orderCrossCity); - } - - //获取优惠券中最优数据 - List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderCrossCity.getCompanyId()).eq("state", 1).le("money",orderCrossCity.getOrderMoney()).in("couponUseType", Arrays.asList(0, 3)).eq("userId", uid).where("now() < expirationTime")); - Integer id = null; - Double price = 0d; - Integer type = 0; - for (UserCouponRecord userCouponRecord : list){ - if(userCouponRecord.getCouponType() == 1){//抵扣券 - if(price.compareTo(userCouponRecord.getMoney()) < 0){ - price = userCouponRecord.getMoney(); - id = userCouponRecord.getId(); - type = 1; - } - }else{//满减券 - if(orderCrossCity.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) >= 0 && price.compareTo(userCouponRecord.getMoney()) < 0){ - price = userCouponRecord.getMoney(); - id = userCouponRecord.getId(); - type = 1; - } - } - } - - //获取打车卡中最优数 - Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); - CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); - } - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); - } - List<UserTaxiCard> userTaxiCards=new ArrayList<>(); - if(companyCity!=null) { - userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().like("companyCityId", "%" + companyCity.getId() + "%") - .in("type", Arrays.asList(1, 2, 3, 4)).eq("userId", uid).where("now() between startTime and endTime")); - } - - //全国卡 - List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards2); - } - Map<String, Object> map = getOptimalTaxiCards(orderCrossCity, price, id, type, userTaxiCards); - price = Double.valueOf(map.get("price").toString()); - id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; - type = Integer.valueOf(map.get("type").toString()); - - - //亲密账户 - List<UserTaxiCard> userTaxiCards_ = new ArrayList<>(); - List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); - CompanyCity finalCompanyCity = companyCity; - bindUserId.forEach(userUser -> { - if(finalCompanyCity !=null) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) - .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); - userTaxiCards_.addAll(userTaxiCards1); - } - - //全国卡 - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards_.addAll(userTaxiCards2); - } - }); - map = getOptimalTaxiCards(orderCrossCity, price, id, type, userTaxiCards_); - price = Double.valueOf(map.get("price").toString()); - id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; - type = Integer.valueOf(map.get("type").toString()); - - if(price<=orderCrossCity.getOrderMoney() || type==2){ - preferentialDataVo.setObjectId(id); - preferentialDataVo.setDiscountAmount(price); - preferentialDataVo.setType(type); - } - return preferentialDataVo; - } - - - public Map<String, Object> getOptimalTaxiCards(OrderCrossCity orderCrossCity, Double price, Integer id, Integer type, List<UserTaxiCard> userTaxiCards) throws Exception{ - Map<String, Object> map = new HashMap<>(); - for(UserTaxiCard t : userTaxiCards){ - JSONObject jsonObject = JSON.parseObject(t.getContent()); - List<Integer> integers = jsonObject.getJSONArray("businessTypes").toJavaList(Integer.class); - if(!integers.contains(3)){ - continue; - } - if(t.getType() == 1){//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discount = jsonObject.getDouble("discount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - double v = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - } - } - - } - if(t.getType() == 2){//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - for(int j = fullReduction.size() - 1; j >= 0; j--){ - JSONArray jsonArray = fullReduction.getJSONArray(j); - Double p = jsonArray.getDouble(0);//满金额 - Double y = jsonArray.getDouble(1);//优惠金额 - if(orderCrossCity.getOrderMoney().compareTo(p) >= 0 && price.compareTo(y) < 0){ - price = y; - id = t.getId(); - type = 2; - } - } - } - } - - } - if(t.getType() == 3){//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discountAmount = jsonObject.getDouble("discountAmount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - if(price.compareTo(discountAmount) < 0){ - price = discountAmount; - id = t.getId(); - type = 2; - } - } - } - } - if(t.getType() == 4){//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - Double discount = jsonObject.getDouble("discount");//折扣 - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - double v = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - } - } - } - } - map.put("price", price); - map.put("id", id); - map.put("type", type); - return map; - } - - - - /** - * 获取支付页面的优惠券列表 - * @param orderId - * @param uid - * @param pageNum - * @param size - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney(), pageNum, size); - List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney(), pageNum, size); - list.addAll(list1); - return list; - } - - - @Override - public List<CouponsListVo> queryCouponList(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { - pageNum = (pageNum - 1) * size; - OrderCrossCity orderCrossCity = this.selectById(orderId); - List<CouponsListVo> rows = new ArrayList<>(); - List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderCrossCity.getCompanyId()) - .eq("state", 1).in("couponUseType", Arrays.asList(0, 3)).eq("userId", uid).where("expirationTime >= now()")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - for (UserCouponRecord userCouponRecord : list){ - if(userCouponRecord.getCouponType() == 2){//满减券 - if(orderCrossCity.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) < 0){ - continue; - } - } - CouponsListVo couponsListVo = new CouponsListVo(); - couponsListVo.setId(userCouponRecord.getId()); - couponsListVo.setDataType(1); - couponsListVo.setMoney(userCouponRecord.getMoney()); - couponsListVo.setUserType(userCouponRecord.getCouponUseType()); - couponsListVo.setTime(sdf.format(userCouponRecord.getExpirationTime())); - couponsListVo.setType(userCouponRecord.getCouponType()); - couponsListVo.setFullMoney(userCouponRecord.getFullMoney()); - couponsListVo.setState(userCouponRecord.getState()); - Company company = companyService.selectById(userCouponRecord.getCompanyId()); - couponsListVo.setCompany(company.getName()); - rows.add(couponsListVo); - } - - Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); - CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); - } - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); - } - List<UserTaxiCard> userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).like("companyCityId", "%" + companyCity.getId() + "%").where("now() between startTime and endTime")); - - //全国卡 - List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); - if(taxiCards.size() > 0){ - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards1); - } - - - //亲密账户 - List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); - CompanyCity finalCompanyCity = companyCity; - bindUserId.forEach(userUser -> { - List<UserTaxiCard> taxiCardPayments1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) - .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); - userTaxiCards.addAll(taxiCardPayments1); - - //全国卡 - if(taxiCards.size() > 0){ - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards1); - } - }); - - for(UserTaxiCard t : userTaxiCards){ - try { - CouponsListVo couponsListVo = new CouponsListVo(); - couponsListVo.setId(t.getId()); - couponsListVo.setDataType(2); - couponsListVo.setUserType(1); - couponsListVo.setTaxiCardType(t.getType()); - couponsListVo.setTime(sdf.format(t.getEndTime())); - couponsListVo.setState(1); - Company company = companyService.selectById(t.getCompanyId()); - couponsListVo.setCompany(company.getName()); - couponsListVo.setName(taxiCardService.selectById(t.getTaxiCardId()).getName()); - - - JSONObject jsonObject = JSON.parseObject(t.getContent()); - JSONArray businessTypes = jsonObject.getJSONArray("businessTypes"); - if(!businessTypes.toJavaList(Integer.class).contains(3)){ - continue; - } - if(t.getType() == 1){//{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discount")); - couponsListVo.setType(1); - } - if(t.getType() == 2){//{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - b = true; - for(int i = fullReduction.size() - 1; i >= 0; i--){ - Double m = fullReduction.getJSONArray(i).getDouble(0); - Double y = fullReduction.getJSONArray(i).getDouble(1); - if(m.compareTo(orderCrossCity.getOrderMoney()) <= 0){ - couponsListVo.setMoney(y); - couponsListVo.setFullMoney(m); - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setType(2); - } - if(t.getType() == 3){//{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discountAmount")); - couponsListVo.setType(2); - } - if(t.getType() == 4){//{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discount")); - couponsListVo.setType(1); - } - - - String str = ""; - TaxiCard taxiCard = taxiCardService.selectById(t.getTaxiCardId()); - if(taxiCard.getTaxiCardType() == 1){ - String[] split = taxiCard.getCompanyCityId().split(";"); - for(String c : split){ - CompanyCity companyCity1 = companyCityService.selectById(c); - if(ToolUtil.isNotEmpty(companyCity1.getAreaCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getAreaCode())); - str += region.getName() + ";"; - continue; - } - if(ToolUtil.isNotEmpty(companyCity1.getCityCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getCityCode())); - str += region.getName() + ";"; - continue; - } - if(ToolUtil.isNotEmpty(companyCity1.getProvinceCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getProvinceCode())); - str += region.getName() + ";"; - continue; - } - } - }else{ - str = "全国;"; - } - couponsListVo.setCity(str.substring(0, str.length() - 1)); - - rows.add(couponsListVo); - }catch (Exception e){ - e.printStackTrace(); - } - } - Collections.sort(rows, new Comparator<CouponsListVo>() { - public int compare(CouponsListVo s1, CouponsListVo s2) { - return Integer.compare(s1.getId(), s2.getId()); - } - }); - - if(rows.size() >= (pageNum + 1) * size){ - rows = rows.subList(pageNum, pageNum + size); - }else if(pageNum < rows.size() && rows.size() < (pageNum + 1) * size){ - rows = rows.subList(pageNum, rows.size()); - }else{ - rows = new ArrayList<>(); - } - - rows = rows.stream().filter(e->e.getMoney()<=orderCrossCity.getOrderMoney()|| e.getDataType()==2).collect(Collectors.toList()); - return rows; - } - - /** - * 订单支付 - * @param payType - * @param orderId - * @param couponId - * @param type - * @return - * @throws Exception - */ - @Override - public ResultUtil payCrossCityOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - if(orderCrossCity.getState() != 7){ - return ResultUtil.error("订单已完成支付,不允许重复支付", ""); - } - Integer uid = orderCrossCity.getUserId(); - Double orderMoney = orderCrossCity.getOrderMoney(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - orderCrossCity.setCouponMoney(0D);//初始化历史数据 - orderCrossCity.setCouponId(null); - - //计算优惠券 - UserCouponRecord userCouponRecord = null; - if(null != couponId){ - userCouponRecord = userCouponRecordService.selectById(couponId); - if(null != userCouponRecord){ - if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", ""); - } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", ""); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ - return ResultUtil.error("优惠券不能用于此类型订单", ""); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - orderMoney = orderMoney - userCouponRecord.getMoney(); - orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); - orderCrossCity.setCouponId(couponId); - } - } - - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); - if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ - orderMoney = orderMoney - query.getMoney(); - orderCrossCity.setRedPacketMoney(query.getMoney()); - orderCrossCity.setRedPacketId(query.getId()); - } - - //计算折扣 - UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); - if(null != query2){ - Double special = query2.getSpecial(); - orderCrossCity.setDiscount(special); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderCrossCity.setDiscountMoney(orderMoney - v); - orderCrossCity.setActivityId(query2.getId()); - orderMoney = v; - } - } - - if(payType == 1){//微信支付 - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ - return ResultUtil.error("余额不足,无法完成支付", ""); - } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId); - userInfoService.updateById(userInfo); - - orderCrossCity.setState(2);//跨城支付完成后才开始服务 - orderCrossCity.setPayType(3); - orderCrossCity.setPayMoney(orderMoney); - - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); - } - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); - } - }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); - } - - this.updateAllColumnById(orderCrossCity); - return resultUtil; - } - - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil payCrossCityOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - if(orderCrossCity.getState() != 7){ - return ResultUtil.error("订单已完成支付,不允许重复支付", ""); - } - Integer uid = orderCrossCity.getUserId(); - Double orderMoney = orderCrossCity.getOrderMoney(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - orderCrossCity.setCouponMoney(0D);//初始化历史数据 - orderCrossCity.setCouponId(null); - - //计算优惠券 - UserCouponRecord userCouponRecord = null; - if(null != objectId && 1 == objectType){ - userCouponRecord = userCouponRecordService.selectById(objectId); - if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", ""); - } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", ""); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ - return ResultUtil.error("优惠券不能用于此类型订单", ""); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - orderMoney = orderMoney - userCouponRecord.getMoney(); - orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); - orderCrossCity.setCouponId(objectId); - } - - //打车卡 - UserTaxiCard userTaxiCard = null; - if(null != objectId && objectType == 2){ - userTaxiCard = userTaxiCardService.selectById(objectId); - TaxiCard taxiCard = taxiCardService.selectById(userTaxiCard.getTaxiCardId()); - if(taxiCard.getTaxiCardType() == 1 && userTaxiCard.getCompanyId() != orderCrossCity.getCompanyId()){ - return ResultUtil.error("打车卡不能用于此订单", ""); - } - if(System.currentTimeMillis() > userTaxiCard.getEndTime().getTime()){ - return ResultUtil.error("打车卡已过期", ""); - } - if(userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3){ - Integer time = JSON.parseObject(userTaxiCard.getContent()).getInteger("time"); - if(0 == time){ - return ResultUtil.error("打车卡已使用完", ""); - } - } - List<Integer> integers = JSON.parseObject(userTaxiCard.getContent()).getJSONArray("businessTypes").toJavaList(Integer.class); - if(!integers.contains(3)){ - return ResultUtil.error("打车卡不能用于此类型订单", ""); - } - - Double yh = 0D; - JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); - if(userTaxiCard.getType() == 1){//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discount = jsonObject.getDouble("discount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - break; - } - } - - } - if(userTaxiCard.getType() == 2){//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - for(int j = fullReduction.size() - 1; j >= 0 ; j--){ - JSONArray jsonArray = fullReduction.getJSONArray(j); - Double p = jsonArray.getDouble(0);//满金额 - if(orderCrossCity.getOrderMoney().compareTo(p) >= 0){ - yh = jsonArray.getDouble(1);//优惠金额 - break; - } - } - } - } - - } - if(userTaxiCard.getType() == 3){//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = jsonObject.getDouble("discountAmount"); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - } - } - } - if(userTaxiCard.getType() == 4){//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - Double discount = jsonObject.getDouble("discount");//折扣 - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - break; - } - } - } - - orderMoney = orderMoney - yh; - orderCrossCity.setTaxiCardId(userTaxiCard.getTaxiCardId()); - orderCrossCity.setUserTaxiCardId(objectId); - orderCrossCity.setDiscountAmount(yh); - } - - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); - if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ - orderMoney = orderMoney - query.getMoney(); - orderCrossCity.setRedPacketMoney(query.getMoney()); - orderCrossCity.setRedPacketId(query.getId()); - } - - //计算折扣 - UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); - if(null != query2){ - Double special = query2.getSpecial(); - orderCrossCity.setDiscount(special); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderCrossCity.setDiscountMoney(orderMoney - v); - orderCrossCity.setActivityId(query2.getId()); - orderMoney = v; - } - } - orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue(); - orderMoney = orderMoney < 0 ? 0 : orderMoney; - - System.out.println("!!!!!!"+orderMoney+"!!!!!!!"); - if(payType == 1){//微信支付 - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { - return ResultUtil.error("余额不足,无法完成支付"); - } + + @Resource + private OrderCrossCityMapper orderCrossCityMapper; + + @Resource + private LinePriceMapper linePriceMapper; + + @Resource + private UserActivityDiscount1Mapper userActivityDiscount1Mapper; + + @Resource + private SysIntegralMapper sysIntegralMapper; + + @Resource + private LineShiftDriverMapper lineShiftDriverMapper; + + @Resource + private OrderPrivateCarMapper orderPrivateCarMapper; + + @Resource + private OrderTaxiMapper orderTaxiMapper; + + @Resource + private RegionMapper regionMapper; + + @Resource + private SensitiveWordsMapper sensitiveWordsMapper; + + @Autowired + private GDMapElectricFenceUtil gdMapElectricFenceUtil; + + @Autowired + private IUserInfoService userInfoService; + + @Autowired + private IUserCouponRecordService userCouponRecordService; + + @Autowired + private IUserRedPacketRecordService userRedPacketRecordService; + + @Autowired + private IPaymentRecordService paymentRecordService; + + @Autowired + private ITransactionDetailsService transactionDetailsService; + + @Autowired + private IOrderPrivateCarService orderPrivateCarService; + + @Autowired + private ILineService lineService; + + @Autowired + private IIncomeService incomeService; + + @Autowired + private IDriverService driverService; + + @Autowired + private PushUtil pushUtil; + + @Autowired + private ISystemNoticeService systemNoticeService; + + @Autowired + private DateUtil dateUtil; + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; + + @Autowired + private ChinaMobileUtil chinaMobileUtil; + + @Autowired + private GDFalconUtil gdFalconUtil; + + @Resource + private RedisTemplate<String, Object> redisTemplate; + + @Autowired + private ICancleOrderService cancleOrderService; + + @Autowired + private IOrderCancelService orderCancelService; + + @Autowired + private RestTemplate internalRestTemplate; + + @Autowired + private IUserActivityRedenvelopeService userActivityRedenvelopeService; + + @Autowired + private IOrderPositionService orderPositionService; + + @Autowired + private IOrderTaxiService orderTaxiService; + + @Autowired + private ICompanyCityService companyCityService; + + @Autowired + private IPushOrderService pushOrderService; + + @Autowired + private IOpenCityService openCityService; + + @Autowired + private PayMoneyUtil payMoneyUtil; + + @Autowired + private IOrderLogisticsService orderLogisticsService; + + @Autowired + private ITaxiCardPaymentService taxiCardPaymentService; + + @Autowired + private ICompanyService companyService; + + @Autowired + private ITaxiCardService taxiCardService; + + @Autowired + private IUserUserService userUserService; + + @Autowired + private IUserTaxiCardService userTaxiCardService; + + @Autowired + private IRegionService regionService; + + + @Value("${callbackPath}") + private String callbackPath; + + public Map<String, Thread> threadMap = new HashMap<>(); + + //存储摆渡车无接单后推送标识,实现多个类型的摆渡车订单无人接单后只给前端推送一次 + public static Map<Integer, Boolean> pushEndMap = new HashMap<>(); + + + /** + * 计算支付金额 + * + * @param startLonLat + * @param endLonLat + * @param peopleNumber + * @param travelMode + * @param lineId + * @param serverCarModelId + * @return + * @throws Exception + */ + @Override + public ResultUtil queryOrderMoney(String startLonLat, String endLonLat, Integer peopleNumber, Integer travelMode, Integer lineId, + Integer serverCarModelId, Integer totalSeat, String seatNumber) throws Exception { + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1);//调用高德计算距离 + if (null != distance) { + return this.getPrice(Double.valueOf(distance.get("distance")), peopleNumber, travelMode, lineId, serverCarModelId, totalSeat, seatNumber); + } + return ResultUtil.error("计算行程距离出错啦!"); + } + + /** + * 获取用户余额和可用优惠券数量 + * + * @param orderId + * @param uid + * @return + * @throws Exception + */ + @Override + public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { + Map<String, Object> map = new HashMap<>(); + UserInfo userInfo = userInfoService.selectById(uid); + map.put("balance", userInfo.getBalance()); + OrderCrossCity orderCrossCity = this.selectById(orderId); + int i = userCouponRecordService.queryAvailable(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney()); + i = i + userCouponRecordService.queryAvailable(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney()); + map.put("coupon", i); + return map; + } + + + @Override + public PreferentialDataVo queryBalance1(Integer orderId, Integer uid) throws Exception { + UserInfo userInfo = userInfoService.selectById(uid); + PreferentialDataVo preferentialDataVo = new PreferentialDataVo(); + preferentialDataVo.setBalance(userInfo.getBalance()); + OrderCrossCity orderCrossCity = this.selectById(orderId); + Integer ids = userInfoService.getDiscount(); + if (ids != null) { + List<UserActivityDiscount1> userActivityId = userActivityDiscount1Mapper.selectList(new EntityWrapper<UserActivityDiscount1>().eq("userActivityId", ids)); + if (userActivityId.size() > 0) { + + preferentialDataVo.setDiscount(userActivityId.get(0).getLogistics()); + } + } + // 查出当前用户的红包 并将订单的修改 + List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).le("money", orderCrossCity.getOrderMoney()).gt("expirationTime", new Date()).gt("endTime", new Date())); + if (userRedPacketRecords.size() > 0) { + + preferentialDataVo.setRedPacket(userRedPacketRecords.get(0).getMoney()); + orderCrossCity.setRedPacketId(userRedPacketRecords.get(0).getId()); + orderCrossCity.setRedPacketMoney(userRedPacketRecords.get(0).getMoney()); + this.updateById(orderCrossCity); + } + + //获取优惠券中最优数据 + List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderCrossCity.getCompanyId()).eq("state", 1).le("money", orderCrossCity.getOrderMoney()).in("couponUseType", Arrays.asList(0, 3)).eq("userId", uid).where("now() < expirationTime")); + Integer id = null; + Double price = 0d; + Integer type = 0; + for (UserCouponRecord userCouponRecord : list) { + if (userCouponRecord.getCouponType() == 1) {//抵扣券 + if (price.compareTo(userCouponRecord.getMoney()) < 0) { + price = userCouponRecord.getMoney(); + id = userCouponRecord.getId(); + type = 1; + } + } else {//满减券 + if (orderCrossCity.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) >= 0 && price.compareTo(userCouponRecord.getMoney()) < 0) { + price = userCouponRecord.getMoney(); + id = userCouponRecord.getId(); + type = 1; + } + } + } + + //获取打车卡中最优数 + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); + } + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); + } + List<UserTaxiCard> userTaxiCards = new ArrayList<>(); + if (companyCity != null) { + userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().like("companyCityId", "%" + companyCity.getId() + "%") + .in("type", Arrays.asList(1, 2, 3, 4)).eq("userId", uid).where("now() between startTime and endTime")); + } + + //全国卡 + List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards2); + } + Map<String, Object> map = getOptimalTaxiCards(orderCrossCity, price, id, type, userTaxiCards); + price = Double.valueOf(map.get("price").toString()); + id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; + type = Integer.valueOf(map.get("type").toString()); + + + //亲密账户 + List<UserTaxiCard> userTaxiCards_ = new ArrayList<>(); + List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); + CompanyCity finalCompanyCity = companyCity; + bindUserId.forEach(userUser -> { + if (finalCompanyCity != null) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) + .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); + userTaxiCards_.addAll(userTaxiCards1); + } + + //全国卡 + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards_.addAll(userTaxiCards2); + } + }); + map = getOptimalTaxiCards(orderCrossCity, price, id, type, userTaxiCards_); + price = Double.valueOf(map.get("price").toString()); + id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; + type = Integer.valueOf(map.get("type").toString()); + + if (price <= orderCrossCity.getOrderMoney() || type == 2) { + preferentialDataVo.setObjectId(id); + preferentialDataVo.setDiscountAmount(price); + preferentialDataVo.setType(type); + } + return preferentialDataVo; + } + + + public Map<String, Object> getOptimalTaxiCards(OrderCrossCity orderCrossCity, Double price, Integer id, Integer type, List<UserTaxiCard> userTaxiCards) throws Exception { + Map<String, Object> map = new HashMap<>(); + for (UserTaxiCard t : userTaxiCards) { + JSONObject jsonObject = JSON.parseObject(t.getContent()); + List<Integer> integers = jsonObject.getJSONArray("businessTypes").toJavaList(Integer.class); + if (!integers.contains(3)) { + continue; + } + if (t.getType() == 1) {//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discount = jsonObject.getDouble("discount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + double v = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + } + } + + } + if (t.getType() == 2) {//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + for (int j = fullReduction.size() - 1; j >= 0; j--) { + JSONArray jsonArray = fullReduction.getJSONArray(j); + Double p = jsonArray.getDouble(0);//满金额 + Double y = jsonArray.getDouble(1);//优惠金额 + if (orderCrossCity.getOrderMoney().compareTo(p) >= 0 && price.compareTo(y) < 0) { + price = y; + id = t.getId(); + type = 2; + } + } + } + } + + } + if (t.getType() == 3) {//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discountAmount = jsonObject.getDouble("discountAmount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + if (price.compareTo(discountAmount) < 0) { + price = discountAmount; + id = t.getId(); + type = 2; + } + } + } + } + if (t.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + Double discount = jsonObject.getDouble("discount");//折扣 + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + double v = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + } + } + } + } + map.put("price", price); + map.put("id", id); + map.put("type", type); + return map; + } + + + /** + * 获取支付页面的优惠券列表 + * + * @param orderId + * @param uid + * @param pageNum + * @param size + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney(), pageNum, size); + List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney(), pageNum, size); + list.addAll(list1); + return list; + } + + + @Override + public List<CouponsListVo> queryCouponList(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { + pageNum = (pageNum - 1) * size; + OrderCrossCity orderCrossCity = this.selectById(orderId); + List<CouponsListVo> rows = new ArrayList<>(); + List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderCrossCity.getCompanyId()) + .eq("state", 1).in("couponUseType", Arrays.asList(0, 3)).eq("userId", uid).where("expirationTime >= now()")); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (UserCouponRecord userCouponRecord : list) { + if (userCouponRecord.getCouponType() == 2) {//满减券 + if (orderCrossCity.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) < 0) { + continue; + } + } + CouponsListVo couponsListVo = new CouponsListVo(); + couponsListVo.setId(userCouponRecord.getId()); + couponsListVo.setDataType(1); + couponsListVo.setMoney(userCouponRecord.getMoney()); + couponsListVo.setUserType(userCouponRecord.getCouponUseType()); + couponsListVo.setTime(sdf.format(userCouponRecord.getExpirationTime())); + couponsListVo.setType(userCouponRecord.getCouponType()); + couponsListVo.setFullMoney(userCouponRecord.getFullMoney()); + couponsListVo.setState(userCouponRecord.getState()); + Company company = companyService.selectById(userCouponRecord.getCompanyId()); + couponsListVo.setCompany(company.getName()); + rows.add(couponsListVo); + } + + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); + } + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderCrossCity.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); + } + List<UserTaxiCard> userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).like("companyCityId", "%" + companyCity.getId() + "%").where("now() between startTime and endTime")); + + //全国卡 + List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards1); + } + + + //亲密账户 + List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); + CompanyCity finalCompanyCity = companyCity; + bindUserId.forEach(userUser -> { + List<UserTaxiCard> taxiCardPayments1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) + .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); + userTaxiCards.addAll(taxiCardPayments1); + + //全国卡 + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards1); + } + }); + + for (UserTaxiCard t : userTaxiCards) { + try { + CouponsListVo couponsListVo = new CouponsListVo(); + couponsListVo.setId(t.getId()); + couponsListVo.setDataType(2); + couponsListVo.setUserType(1); + couponsListVo.setTaxiCardType(t.getType()); + couponsListVo.setTime(sdf.format(t.getEndTime())); + couponsListVo.setState(1); + Company company = companyService.selectById(t.getCompanyId()); + couponsListVo.setCompany(company.getName()); + couponsListVo.setName(taxiCardService.selectById(t.getTaxiCardId()).getName()); + + + JSONObject jsonObject = JSON.parseObject(t.getContent()); + JSONArray businessTypes = jsonObject.getJSONArray("businessTypes"); + if (!businessTypes.toJavaList(Integer.class).contains(3)) { + continue; + } + if (t.getType() == 1) {//{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discount")); + couponsListVo.setType(1); + } + if (t.getType() == 2) {//{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + b = true; + for (int i = fullReduction.size() - 1; i >= 0; i--) { + Double m = fullReduction.getJSONArray(i).getDouble(0); + Double y = fullReduction.getJSONArray(i).getDouble(1); + if (m.compareTo(orderCrossCity.getOrderMoney()) <= 0) { + couponsListVo.setMoney(y); + couponsListVo.setFullMoney(m); + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setType(2); + } + if (t.getType() == 3) {//{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discountAmount")); + couponsListVo.setType(2); + } + if (t.getType() == 4) {//{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discount")); + couponsListVo.setType(1); + } + + + String str = ""; + TaxiCard taxiCard = taxiCardService.selectById(t.getTaxiCardId()); + if (taxiCard.getTaxiCardType() == 1) { + String[] split = taxiCard.getCompanyCityId().split(";"); + for (String c : split) { + CompanyCity companyCity1 = companyCityService.selectById(c); + if (ToolUtil.isNotEmpty(companyCity1.getAreaCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getAreaCode())); + str += region.getName() + ";"; + continue; + } + if (ToolUtil.isNotEmpty(companyCity1.getCityCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getCityCode())); + str += region.getName() + ";"; + continue; + } + if (ToolUtil.isNotEmpty(companyCity1.getProvinceCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getProvinceCode())); + str += region.getName() + ";"; + continue; + } + } + } else { + str = "全国;"; + } + couponsListVo.setCity(str.substring(0, str.length() - 1)); + + rows.add(couponsListVo); + } catch (Exception e) { + e.printStackTrace(); + } + } + Collections.sort(rows, new Comparator<CouponsListVo>() { + public int compare(CouponsListVo s1, CouponsListVo s2) { + return Integer.compare(s1.getId(), s2.getId()); + } + }); + + if (rows.size() >= (pageNum + 1) * size) { + rows = rows.subList(pageNum, pageNum + size); + } else if (pageNum < rows.size() && rows.size() < (pageNum + 1) * size) { + rows = rows.subList(pageNum, rows.size()); + } else { + rows = new ArrayList<>(); + } + + rows = rows.stream().filter(e -> e.getMoney() <= orderCrossCity.getOrderMoney() || e.getDataType() == 2).collect(Collectors.toList()); + return rows; + } + + /** + * 订单支付 + * + * @param payType + * @param orderId + * @param couponId + * @param type + * @return + * @throws Exception + */ + @Override + public ResultUtil payCrossCityOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + if (orderCrossCity.getState() != 7) { + return ResultUtil.error("订单已完成支付,不允许重复支付", ""); + } + Integer uid = orderCrossCity.getUserId(); + Double orderMoney = orderCrossCity.getOrderMoney(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + orderCrossCity.setCouponMoney(0D);//初始化历史数据 + orderCrossCity.setCouponId(null); + + //计算优惠券 + UserCouponRecord userCouponRecord = null; + if (null != couponId) { + userCouponRecord = userCouponRecordService.selectById(couponId); + if (null != userCouponRecord) { + if (userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", ""); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", ""); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3) { + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + orderMoney = orderMoney - userCouponRecord.getMoney(); + orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); + orderCrossCity.setCouponId(couponId); + } + } + + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); + if (null != query && orderMoney.compareTo(query.getMoney()) > 0) { + orderMoney = orderMoney - query.getMoney(); + orderCrossCity.setRedPacketMoney(query.getMoney()); + orderCrossCity.setRedPacketId(query.getId()); + } + + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); + if (null != query2) { + Double special = query2.getSpecial(); + orderCrossCity.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if (orderMoney.compareTo(v) > 0) { + orderCrossCity.setDiscountMoney(orderMoney - v); + orderCrossCity.setActivityId(query2.getId()); + orderMoney = v; + } + } + + if (payType == 1) {//微信支付 + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付", ""); + } + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId); + userInfoService.updateById(userInfo); + + orderCrossCity.setState(2);//跨城支付完成后才开始服务 + orderCrossCity.setPayType(3); + orderCrossCity.setPayMoney(orderMoney); + + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + } + + this.updateAllColumnById(orderCrossCity); + return resultUtil; + } + + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil payCrossCityOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + if (orderCrossCity.getState() != 7) { + return ResultUtil.error("订单已完成支付,不允许重复支付", ""); + } + Integer uid = orderCrossCity.getUserId(); + Double orderMoney = orderCrossCity.getOrderMoney(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + orderCrossCity.setCouponMoney(0D);//初始化历史数据 + orderCrossCity.setCouponId(null); + + //计算优惠券 + UserCouponRecord userCouponRecord = null; + if (null != objectId && 1 == objectType) { + userCouponRecord = userCouponRecordService.selectById(objectId); + if (userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", ""); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", ""); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3) { + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + orderMoney = orderMoney - userCouponRecord.getMoney(); + orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); + orderCrossCity.setCouponId(objectId); + } + + //打车卡 + UserTaxiCard userTaxiCard = null; + if (null != objectId && objectType == 2) { + userTaxiCard = userTaxiCardService.selectById(objectId); + TaxiCard taxiCard = taxiCardService.selectById(userTaxiCard.getTaxiCardId()); + if (taxiCard.getTaxiCardType() == 1 && userTaxiCard.getCompanyId() != orderCrossCity.getCompanyId()) { + return ResultUtil.error("打车卡不能用于此订单", ""); + } + if (System.currentTimeMillis() > userTaxiCard.getEndTime().getTime()) { + return ResultUtil.error("打车卡已过期", ""); + } + if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { + Integer time = JSON.parseObject(userTaxiCard.getContent()).getInteger("time"); + if (0 == time) { + return ResultUtil.error("打车卡已使用完", ""); + } + } + List<Integer> integers = JSON.parseObject(userTaxiCard.getContent()).getJSONArray("businessTypes").toJavaList(Integer.class); + if (!integers.contains(3)) { + return ResultUtil.error("打车卡不能用于此类型订单", ""); + } + + Double yh = 0D; + JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); + if (userTaxiCard.getType() == 1) {//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discount = jsonObject.getDouble("discount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + break; + } + } + + } + if (userTaxiCard.getType() == 2) {//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + for (int j = fullReduction.size() - 1; j >= 0; j--) { + JSONArray jsonArray = fullReduction.getJSONArray(j); + Double p = jsonArray.getDouble(0);//满金额 + if (orderCrossCity.getOrderMoney().compareTo(p) >= 0) { + yh = jsonArray.getDouble(1);//优惠金额 + break; + } + } + } + } + + } + if (userTaxiCard.getType() == 3) {//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = jsonObject.getDouble("discountAmount"); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + } + } + } + if (userTaxiCard.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + Double discount = jsonObject.getDouble("discount");//折扣 + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + break; + } + } + } + + orderMoney = orderMoney - yh; + orderCrossCity.setTaxiCardId(userTaxiCard.getTaxiCardId()); + orderCrossCity.setUserTaxiCardId(objectId); + orderCrossCity.setDiscountAmount(yh); + } + + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); + if (null != query && orderMoney.compareTo(query.getMoney()) > 0) { + orderMoney = orderMoney - query.getMoney(); + orderCrossCity.setRedPacketMoney(query.getMoney()); + orderCrossCity.setRedPacketId(query.getId()); + } + + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); + if (null != query2) { + Double special = query2.getSpecial(); + orderCrossCity.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if (orderMoney.compareTo(v) > 0) { + orderCrossCity.setDiscountMoney(orderMoney - v); + orderCrossCity.setActivityId(query2.getId()); + orderMoney = v; + } + } + orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue(); + orderMoney = orderMoney < 0 ? 0 : orderMoney; + + System.out.println("!!!!!!" + orderMoney + "!!!!!!!"); + if (payType == 1) {//微信支付 + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付"); + } // if(orderMoney > 0){ // resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),orderMoney); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } // } - - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId); - userInfoService.updateById(userInfo); - - orderCrossCity.setState(2);//跨城支付完成后才开始服务 - orderCrossCity.setPayType(3); - orderCrossCity.setPayMoney(orderMoney); - - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - //处理打车卡 - if(null != userTaxiCard){ - userTaxiCardService.updateById(userTaxiCard); - } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); - } - - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); - } - }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); - - }else if(payType == 4){ - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - Double payMoney = orderCrossCity.getOrderMoney(); - Integer integer = paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 4, orderMoney, "", 1); - - resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4,orderId,3,integer); - - } - - this.updateAllColumnById(orderCrossCity); - return resultUtil; - } - - - public static void main(String[] args) { - double a= 1.189999995; - double v = new BigDecimal(a).setScale(2, RoundingMode.HALF_UP).doubleValue(); - System.out.println(v); - } - - @Autowired - private AppOrderController appOrderController; - /** - * 支付成功后的回调操作 - * @param id 订单=id - * @param order_id 工行支付单号 - * @param type 1=微信,2=支付宝 - * @throws Exception - */ - @Override - public void payOrderCrossCityCallback(Integer id, String order_id, Integer type,String no) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(id); - PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, Integer.valueOf(id), 3, type, 1); - if(null != query && query.getState() == 1){ - //添加交易明细 - transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); - orderCrossCity.setState(2);//先支付再服务 - orderCrossCity.setPayType(type); - orderCrossCity.setPayMoney(query.getAmount()); - orderCrossCity.setBillNo(no); - this.updateById(orderCrossCity); - - UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); - SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 - userInfoService.updateById(userInfo); - - //处理优惠券和红包 - if(null != orderCrossCity.getCouponId()){ - UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderCrossCity.getCouponId()); - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - if(null != orderCrossCity.getUserTaxiCardId()){ - UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderCrossCity.getUserTaxiCardId()); - if(userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3){ - JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - userTaxiCardService.updateById(userTaxiCard); - } - } - if(null != orderCrossCity.getRedPacketId()){ - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderCrossCity.getRedPacketId()); - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - userRedPacketRecordService.updateById(userRedPacketRecord); - } - - - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); - } - }).start(); - - - systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type==2?"支付宝":"云闪付")) + "成功完成出行订单支付,谢谢使用!", orderCrossCity.getUserId(), 1); - }else{ - System.err.println("预支付数据异常(orderId = " + id + ")"); - } - } - - - /** - * 跨城下单操作 - * @param orderCrossCityWarpper - * @param uid - * @return - * @throws Exception - */ - @Override - public synchronized ResultUtil<BaseWarpper> orderCrossCity(OrderCrossCityWarpper orderCrossCityWarpper, Integer uid) throws Exception { - System.out.println("aaaaaaaaaaaaaaa"+orderCrossCityWarpper.getDriverId()+":"+orderCrossCityWarpper.getLineShiftDriverId()); - /** - * 1.出租车、专车、跨城有待支付的订单不能叫车 - * 2.小件物流有未完成的订单可以下跨城、专车、出租车 - * 3.出租车、专车、跨城有预约单可以下即时单 - */ - List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderCrossCities1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - - List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(orderCrossCityWarpper.getDriverId(), orderCrossCityWarpper.getLineShiftDriverId(), Arrays.asList(5)); - if(orderCrossCities2.size() > 0){ - return ResultUtil.error("司机正在服务中"); - } - - /** - * 先判断司机座位数是否符合出行人数 - */ - LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCityWarpper.getLineShiftDriverId()); - if(orderCrossCityWarpper.getTravelMode() == 1){//拼车判断座位数 - if(lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()){ - return ResultUtil.error("司机剩余座位数小于出行人数"); - } - }else{ - if(lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()){ - return ResultUtil.error("司机车辆上已经有人占座了,不能下包车订单"); - } - if(lineShiftDriver.getLaveSeat() == 0){ - return ResultUtil.error("司机车辆没有剩余空位了"); - } - } - Driver driver = driverService.selectById(orderCrossCityWarpper.getDriverId()); - if(driver.getState() == 1){ - return ResultUtil.error("司机处于离线状态"); - } - OrderCrossCity orderCrossCity = new OrderCrossCity(); - orderCrossCity.setUserId(uid); - orderCrossCity.setServerCarModelId(orderCrossCityWarpper.getServerCarModelId()); - orderCrossCity.setDriverId(orderCrossCityWarpper.getDriverId()); - orderCrossCity.setLineId(orderCrossCityWarpper.getLineId()); - orderCrossCity.setLineShiftDriverId(orderCrossCityWarpper.getLineShiftDriverId()); - orderCrossCity.setCarId(orderCrossCityWarpper.getCarId()); - orderCrossCity.setOrderNum(this.getOrderNum(orderCrossCityWarpper.getDriverId(),orderCrossCityWarpper.getLineShiftDriverId())); - orderCrossCity.setPlacementLon(orderCrossCityWarpper.getPlacementLon()); - orderCrossCity.setPlacementLat(orderCrossCityWarpper.getPlacementLat()); - String placementAddress = orderCrossCityWarpper.getPlacementAddress(); - placementAddress = placementAddress.replaceAll("& #40;", "("); - placementAddress = placementAddress.replaceAll("& #41;", ")"); - orderCrossCity.setPlacementAddress(placementAddress); - orderCrossCity.setStartLon(orderCrossCityWarpper.getStartLon()); - orderCrossCity.setStartLat(orderCrossCityWarpper.getStartLat()); - String startAddress = orderCrossCityWarpper.getStartAddress(); - startAddress = startAddress.replaceAll("& #40;", "("); - startAddress = startAddress.replaceAll("& #41;", ")"); - orderCrossCity.setStartAddress(startAddress); - orderCrossCity.setEndLon(orderCrossCityWarpper.getEndLon()); - orderCrossCity.setEndLat(orderCrossCityWarpper.getEndLat()); - String endAddress = orderCrossCityWarpper.getEndAddress(); - endAddress = endAddress.replaceAll("& #40;", "("); - endAddress = endAddress.replaceAll("& #41;", ")"); - orderCrossCity.setEndAddress(endAddress); - orderCrossCity.setMileage(0D); - ResultUtil<Map<String, Object>> price = this.getPrice(orderCrossCityWarpper.getDistance(), orderCrossCityWarpper.getPeopleNumber(), orderCrossCityWarpper.getTravelMode(), orderCrossCityWarpper.getLineId(), - orderCrossCityWarpper.getServerCarModelId(), orderCrossCityWarpper.getTotalSeat(), orderCrossCityWarpper.getSeatNumber()); - Double money = Double.valueOf(price.getData().get("price").toString()); - orderCrossCity.setOrderMoney(money); - Integer companyId = driver.getCompanyId(); - orderCrossCity.setCompanyId(companyId); - UserInfo userInfo = userInfoService.selectById(uid); - orderCrossCity.setPassengers(userInfo.getNickName()); - orderCrossCity.setPassengersPhone(userInfo.getPhone()); - orderCrossCity.setPeopleNumber(orderCrossCityWarpper.getPeopleNumber()); - orderCrossCity.setSeatNumber(orderCrossCityWarpper.getSeatNumber()); - List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).eq("isDelete", 1)); - orderCrossCity.setSort(orderCrossCities.size() + 1); - orderCrossCity.setState(7);//待支付 - orderCrossCity.setInsertTime(new Date()); - orderCrossCity.setTravelTime(orderCrossCityWarpper.getTravelTime()); - orderCrossCity.setSnatchOrderTime(new Date()); - orderCrossCity.setTravelMode(orderCrossCityWarpper.getTravelMode()); - orderCrossCity.setOrderSource(orderCrossCityWarpper.getOrderSource()); - orderCrossCity.setIsDelete(1); - orderCrossCity.setRemark(orderCrossCityWarpper.getRemark()); - orderCrossCity.setIsReassign(1); + + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId); + userInfoService.updateById(userInfo); + + orderCrossCity.setState(2);//跨城支付完成后才开始服务 + orderCrossCity.setPayType(3); + orderCrossCity.setPayMoney(orderMoney); + + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + //处理打车卡 + if (null != userTaxiCard) { + userTaxiCardService.updateById(userTaxiCard); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + + } else if (payType == 4) { + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + Double payMoney = orderCrossCity.getOrderMoney(); + Integer integer = paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 4, orderMoney, "", 1); + + resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4, orderId, 3, integer); + + } + + this.updateAllColumnById(orderCrossCity); + return resultUtil; + } + + + public static void main(String[] args) { + double a = 1.189999995; + double v = new BigDecimal(a).setScale(2, RoundingMode.HALF_UP).doubleValue(); + System.out.println(v); + } + + @Autowired + private AppOrderController appOrderController; + + /** + * 支付成功后的回调操作 + * + * @param id 订单=id + * @param order_id 工行支付单号 + * @param type 1=微信,2=支付宝 + * @throws Exception + */ + @Override + public void payOrderCrossCityCallback(Integer id, String order_id, Integer type, String no) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(id); + PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, Integer.valueOf(id), 3, type, 1); + if (null != query && query.getState() == 1) { + //添加交易明细 + transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); + orderCrossCity.setState(2);//先支付再服务 + orderCrossCity.setPayType(type); + orderCrossCity.setPayMoney(query.getAmount()); + orderCrossCity.setBillNo(no); + this.updateById(orderCrossCity); + + UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 + userInfoService.updateById(userInfo); + + //处理优惠券和红包 + if (null != orderCrossCity.getCouponId()) { + UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderCrossCity.getCouponId()); + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != orderCrossCity.getUserTaxiCardId()) { + UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderCrossCity.getUserTaxiCardId()); + if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { + JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + userTaxiCardService.updateById(userTaxiCard); + } + } + if (null != orderCrossCity.getRedPacketId()) { + UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderCrossCity.getRedPacketId()); + userRedPacketRecord.setState(2); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecordService.updateById(userRedPacketRecord); + } + + + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); + } + }).start(); + + + systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功完成出行订单支付,谢谢使用!", orderCrossCity.getUserId(), 1); + } else { + System.err.println("预支付数据异常(orderId = " + id + ")"); + } + } + + + /** + * 跨城下单操作 + * + * @param orderCrossCityWarpper + * @param uid + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil<BaseWarpper> orderCrossCity(OrderCrossCityWarpper orderCrossCityWarpper, Integer uid) throws Exception { + System.out.println("aaaaaaaaaaaaaaa" + orderCrossCityWarpper.getDriverId() + ":" + orderCrossCityWarpper.getLineShiftDriverId()); + /** + * 1.出租车、专车、跨城有待支付的订单不能叫车 + * 2.小件物流有未完成的订单可以下跨城、专车、出租车 + * 3.出租车、专车、跨城有预约单可以下即时单 + */ + List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderCrossCities1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + + List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(orderCrossCityWarpper.getDriverId(), orderCrossCityWarpper.getLineShiftDriverId(), Arrays.asList(5)); + if (orderCrossCities2.size() > 0) { + return ResultUtil.error("司机正在服务中"); + } + + /** + * 先判断司机座位数是否符合出行人数 + */ + LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCityWarpper.getLineShiftDriverId()); + if (orderCrossCityWarpper.getTravelMode() == 1) {//拼车判断座位数 + if (lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()) { + return ResultUtil.error("司机剩余座位数小于出行人数"); + } + } else { + if (lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()) { + return ResultUtil.error("司机车辆上已经有人占座了,不能下包车订单"); + } + if (lineShiftDriver.getLaveSeat() == 0) { + return ResultUtil.error("司机车辆没有剩余空位了"); + } + } + Driver driver = driverService.selectById(orderCrossCityWarpper.getDriverId()); + if (driver.getState() == 1) { + return ResultUtil.error("司机处于离线状态"); + } + OrderCrossCity orderCrossCity = new OrderCrossCity(); + orderCrossCity.setUserId(uid); + orderCrossCity.setServerCarModelId(orderCrossCityWarpper.getServerCarModelId()); + orderCrossCity.setDriverId(orderCrossCityWarpper.getDriverId()); + orderCrossCity.setLineId(orderCrossCityWarpper.getLineId()); + orderCrossCity.setLineShiftDriverId(orderCrossCityWarpper.getLineShiftDriverId()); + orderCrossCity.setCarId(orderCrossCityWarpper.getCarId()); + orderCrossCity.setOrderNum(this.getOrderNum(orderCrossCityWarpper.getDriverId(), orderCrossCityWarpper.getLineShiftDriverId())); + orderCrossCity.setPlacementLon(orderCrossCityWarpper.getPlacementLon()); + orderCrossCity.setPlacementLat(orderCrossCityWarpper.getPlacementLat()); + String placementAddress = orderCrossCityWarpper.getPlacementAddress(); + placementAddress = placementAddress.replaceAll("& #40;", "("); + placementAddress = placementAddress.replaceAll("& #41;", ")"); + orderCrossCity.setPlacementAddress(placementAddress); + orderCrossCity.setStartLon(orderCrossCityWarpper.getStartLon()); + orderCrossCity.setStartLat(orderCrossCityWarpper.getStartLat()); + String startAddress = orderCrossCityWarpper.getStartAddress(); + startAddress = startAddress.replaceAll("& #40;", "("); + startAddress = startAddress.replaceAll("& #41;", ")"); + orderCrossCity.setStartAddress(startAddress); + orderCrossCity.setEndLon(orderCrossCityWarpper.getEndLon()); + orderCrossCity.setEndLat(orderCrossCityWarpper.getEndLat()); + String endAddress = orderCrossCityWarpper.getEndAddress(); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + orderCrossCity.setEndAddress(endAddress); + orderCrossCity.setMileage(0D); + ResultUtil<Map<String, Object>> price = this.getPrice(orderCrossCityWarpper.getDistance(), orderCrossCityWarpper.getPeopleNumber(), orderCrossCityWarpper.getTravelMode(), orderCrossCityWarpper.getLineId(), + orderCrossCityWarpper.getServerCarModelId(), orderCrossCityWarpper.getTotalSeat(), orderCrossCityWarpper.getSeatNumber()); + Double money = Double.valueOf(price.getData().get("price").toString()); + orderCrossCity.setOrderMoney(money); + Integer companyId = driver.getCompanyId(); + orderCrossCity.setCompanyId(companyId); + UserInfo userInfo = userInfoService.selectById(uid); + orderCrossCity.setPassengers(userInfo.getNickName()); + orderCrossCity.setPassengersPhone(userInfo.getPhone()); + orderCrossCity.setPeopleNumber(orderCrossCityWarpper.getPeopleNumber()); + orderCrossCity.setSeatNumber(orderCrossCityWarpper.getSeatNumber()); + List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).eq("isDelete", 1)); + orderCrossCity.setSort(orderCrossCities.size() + 1); + orderCrossCity.setState(7);//待支付 + orderCrossCity.setInsertTime(new Date()); + orderCrossCity.setTravelTime(orderCrossCityWarpper.getTravelTime()); + orderCrossCity.setSnatchOrderTime(new Date()); + orderCrossCity.setTravelMode(orderCrossCityWarpper.getTravelMode()); + orderCrossCity.setOrderSource(orderCrossCityWarpper.getOrderSource()); + orderCrossCity.setIsDelete(1); + orderCrossCity.setRemark(orderCrossCityWarpper.getRemark()); + orderCrossCity.setIsReassign(1); // //调用高德创建轨迹 // String s = gdFalconUtil.selectTerminal(driver.getPhone()); // String track = gdFalconUtil.createTrack(s); // orderCrossCity.setTrackId(track); - if(orderCrossCity.getTravelMode() == 2){//包车 + if (orderCrossCity.getTravelMode() == 2) {//包车 // orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber()); // orderCrossCity.setPeopleNumber(lineShiftDriver.getLaveSeat()); - } - - //调用移动的小号接口 - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderCrossCity.setTelX(map.get("telX")); - orderCrossCity.setBindId(map.get("bindId")); - } - this.insert(orderCrossCity); - - if(driver.getState() == 2){ - driver.setState(3); - driverService.updateById(driver); - } - - //修改预约班次的数据 - if(orderCrossCity.getTravelMode() == 2){//包车 - lineShiftDriver.setLaveSeat(0); - lineShiftDriver.setLaveSeatNumber(""); - }else{//拼车 - lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()) < 0 ? 0 : lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()); - String[] split = orderCrossCity.getSeatNumber().split(","); - String[] split1 = lineShiftDriver.getLaveSeatNumber().split(","); - String seatNumber = ""; - //先判断选中座位号和剩余座位号是否匹配 - for(String spl : split){ - boolean b = true; - for(String sp : split1){ - if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){ - b = false; - break; - } - } - if(b){ - throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!"); - } - } - for(String sp : split1){ - boolean b = true; - for(String spl : split){ - if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){ - b = false; - break; - } - } - if(b && ToolUtil.isNotEmpty(sp)){ - seatNumber += (sp + ","); - } - } - lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ? - seatNumber.substring(0, seatNumber.length() - 1) : ""); - } - lineShiftDriverMapper.updateById(lineShiftDriver); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的跨城订单已下单成功!", orderCrossCity.getUserId(), 1); - - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setId(orderCrossCity.getId()); - - //创建定时任务,取消订单30分钟 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - OrderCrossCity orderCrossCity1 = orderCrossCityMapper.selectById(orderCrossCity.getId()); - if(orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null){ - orderCrossCity1.setState(10); - orderCrossCityMapper.updateById(orderCrossCity1); - - OrderCancel orderCancel = new OrderCancel(); - orderCancel.setOrderId(orderCrossCity.getId()); - orderCancel.setOrderType(3); - orderCancel.setReason("用户未及时付款,系统自动取消订单"); - orderCancel.setRemark("用户未及时付款,系统自动取消订单"); - orderCancel.setState(2); - orderCancel.setInsertTime(new Date()); - orderCancel.setUserType(2); - orderCancelService.insert(orderCancel); - - //修改司机座位 - LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); - lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); - lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); - lineShiftDriverMapper.updateById(lineShiftDriver); - - //修改司机为空闲 - List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); - if(orderCrossCities.size() == 0){ - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - driver.setState(2); - driverService.updateById(driver); - } - } - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 30 * 60 * 1000); - - return ResultUtil.success(baseWarpper); - } - - - /** - * 获取订单 - * @param uid - * @param state - * @return - * @throws Exception - */ - @Override - public List<OrderCrossCity> queryOrder(Integer uid, Integer... state) throws Exception { - return orderCrossCityMapper.queryByState(uid, state); - } - - /** - * 获取订单详情 - * @param orderId - * @return - * @throws Exception - */ - @Override - public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception { - Map<String, Object> map = orderCrossCityMapper.queryOrderInfo(orderId); - if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 - OrderCrossCity orderCrossCity = this.selectById(orderId); - orderCrossCity.setReassignNotice(0); - this.updateById(orderCrossCity); - } - if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ - map.put("state", map.get("oldState")); - } - Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString()); - map.put("startCity", geocode.get("city")); - geocode = gdMapGeocodingUtil.geocode(map.get("endLon").toString(), map.get("endLat").toString()); - map.put("endCity", geocode.get("city")); - - String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId")); - map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); - map.put("orderType", 3); - return map; - } - - /** - * 获取取消订单的支付费用 - * @param id - * @return - * @throws Exception - */ - @Override - public ResultUtil<BaseWarpper> queryCancleAmount(Integer id) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(id); - BaseWarpper baseWarpper = new BaseWarpper(); - if(null == orderCrossCity){ - return ResultUtil.error("获取数据失败,订单信息有误"); - } - double amount = 0; - CancleOrder query = cancleOrderService.query(1, 3, orderCrossCity.getCompanyId()); - if(null != orderCrossCity.getDriverId() && - (orderCrossCity.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况 - if(null != query){ - amount += query.getMoney(); - } - } - baseWarpper.setAmount(amount); - return ResultUtil.success(baseWarpper); - } - - - /** - * 取消订单操作 - * @param id - * @param payType - * @param cancleId - * @param type - * @return - * @throws Exception - */ - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil cancleOrderCrossCity(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(id); - Integer uid = orderCrossCity.getUserId(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - - if(null == orderCrossCity){ - return ResultUtil.error("取消订单失败,订单信息有误", ""); - } - if(orderCrossCity.getState() != 12){ - return ResultUtil.error("取消订单失败,不合法的操作", ""); - } - OrderCancel orderCancel = null; - if(null == cancleId){ - orderCancel = orderCancelService.query(id, 3, null, null, 1); - }else{ - orderCancel = orderCancelService.selectById(cancleId); - } - - CancleOrder query = cancleOrderService.query(1, 3, orderCrossCity.getCompanyId()); - if(null != query){ - if(payType == 1){//微信支付 - String value = (String) redisTemplate.opsForValue().get("appletOpenId"); - String appletsOpenId = null; - if(ToolUtil.isNotEmpty(value)){ - JSONObject jsonObject = JSON.parseObject(value); - appletsOpenId = jsonObject.getString(uid.toString()); - }else{ - appletsOpenId = userInfo.getAppletsOpenId(); - } - orderCancel.setPayType(1); - orderCancelService.updateById(orderCancel); - - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_3_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), "", 1);//添加预支付数据 + } + + //调用移动的小号接口 +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if(String.valueOf(map.get("code")).equals("200")){ +// orderCrossCity.setTelX(map.get("telX")); +// orderCrossCity.setBindId(map.get("bindId")); +// } + this.insert(orderCrossCity); + + if (driver.getState() == 2) { + driver.setState(3); + driverService.updateById(driver); + } + + //修改预约班次的数据 + if (orderCrossCity.getTravelMode() == 2) {//包车 + lineShiftDriver.setLaveSeat(0); + lineShiftDriver.setLaveSeatNumber(""); + } else {//拼车 + lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()) < 0 ? 0 : lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()); + String[] split = orderCrossCity.getSeatNumber().split(","); + String[] split1 = lineShiftDriver.getLaveSeatNumber().split(","); + String seatNumber = ""; + //先判断选中座位号和剩余座位号是否匹配 + for (String spl : split) { + boolean b = true; + for (String sp : split1) { + if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { + b = false; + break; + } + } + if (b) { + throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!"); + } + } + for (String sp : split1) { + boolean b = true; + for (String spl : split) { + if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { + b = false; + break; + } + } + if (b && ToolUtil.isNotEmpty(sp)) { + seatNumber += (sp + ","); + } + } + lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ? + seatNumber.substring(0, seatNumber.length() - 1) : ""); + } + lineShiftDriverMapper.updateById(lineShiftDriver); + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的跨城订单已下单成功!", orderCrossCity.getUserId(), 1); + + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(orderCrossCity.getId()); + + //创建定时任务,取消订单30分钟 + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + OrderCrossCity orderCrossCity1 = orderCrossCityMapper.selectById(orderCrossCity.getId()); + if (orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null) { + orderCrossCity1.setState(10); + orderCrossCityMapper.updateById(orderCrossCity1); + + OrderCancel orderCancel = new OrderCancel(); + orderCancel.setOrderId(orderCrossCity.getId()); + orderCancel.setOrderType(3); + orderCancel.setReason("用户未及时付款,系统自动取消订单"); + orderCancel.setRemark("用户未及时付款,系统自动取消订单"); + orderCancel.setState(2); + orderCancel.setInsertTime(new Date()); + orderCancel.setUserType(2); + orderCancelService.insert(orderCancel); + + //修改司机座位 + LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); + lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); + lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); + lineShiftDriverMapper.updateById(lineShiftDriver); + + //修改司机为空闲 + List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); + if (orderCrossCities.size() == 0) { + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + driver.setState(2); + driverService.updateById(driver); + } + } + } + }; + Timer timer = new Timer(); + timer.schedule(timerTask, 30 * 60 * 1000); + + return ResultUtil.success(baseWarpper); + } + + + /** + * 获取订单 + * + * @param uid + * @param state + * @return + * @throws Exception + */ + @Override + public List<OrderCrossCity> queryOrder(Integer uid, Integer... state) throws Exception { + return orderCrossCityMapper.queryByState(uid, state); + } + + /** + * 获取订单详情 + * + * @param orderId + * @return + * @throws Exception + */ + @Override + public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception { + Map<String, Object> map = orderCrossCityMapper.queryOrderInfo(orderId); + if (null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2) {//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 + OrderCrossCity orderCrossCity = this.selectById(orderId); + orderCrossCity.setReassignNotice(0); + this.updateById(orderCrossCity); + } + if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { + map.put("state", map.get("oldState")); + } + Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString()); + map.put("startCity", geocode.get("city")); + geocode = gdMapGeocodingUtil.geocode(map.get("endLon").toString(), map.get("endLat").toString()); + map.put("endCity", geocode.get("city")); + + String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId")); + map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); + map.put("orderType", 3); + return map; + } + + /** + * 获取取消订单的支付费用 + * + * @param id + * @return + * @throws Exception + */ + @Override + public ResultUtil<BaseWarpper> queryCancleAmount(Integer id) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(id); + BaseWarpper baseWarpper = new BaseWarpper(); + if (null == orderCrossCity) { + return ResultUtil.error("获取数据失败,订单信息有误"); + } + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + double amount = 0; + CancleOrder query = cancleOrderService.query(1, 3, openCity.getId()); + if (null != orderCrossCity.getDriverId() && + (orderCrossCity.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()) {//收费的情况 + if (null != query) { + amount += query.getMoney(); + } + } + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); + } + + + /** + * 取消订单操作 + * + * @param id + * @param payType + * @param cancleId + * @param type + * @return + * @throws Exception + */ + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil cancleOrderCrossCity(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(id); + Integer uid = orderCrossCity.getUserId(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + + if (null == orderCrossCity) { + return ResultUtil.error("取消订单失败,订单信息有误", ""); + } + if (orderCrossCity.getState() != 12) { + return ResultUtil.error("取消订单失败,不合法的操作", ""); + } + OrderCancel orderCancel = null; + if (null == cancleId) { + orderCancel = orderCancelService.query(id, 3, null, null, 1); + } else { + orderCancel = orderCancelService.selectById(cancleId); + } + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + CancleOrder query = cancleOrderService.query(1, 3, openCity.getId()); + if (null != query) { + if (payType == 1) {//微信支付 + String value = (String) redisTemplate.opsForValue().get("appletOpenId"); + String appletsOpenId = null; + if (ToolUtil.isNotEmpty(value)) { + JSONObject jsonObject = JSON.parseObject(value); + appletsOpenId = jsonObject.getString(uid.toString()); + } else { + appletsOpenId = userInfo.getAppletsOpenId(); + } + orderCancel.setPayType(1); + orderCancelService.updateById(orderCancel); + + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_3_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), "", 1);//添加预支付数据 // Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",3", 9, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/wxCancelOrderTaxi", "", type, appletsOpenId); // if(map.get("code").equals("200")){ @@ -1506,13 +1514,13 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } - } - if(payType == 2){//支付宝支付 - orderCancel.setPayType(2); - orderCancelService.updateById(orderCancel); - - resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_3_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 2, query.getMoney(), "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + orderCancel.setPayType(2); + orderCancelService.updateById(orderCancel); + + resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_3_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 2, query.getMoney(), "", 1);//添加预支付数据 // Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",3", 10, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/aliCancelOrderTaxi", "", type, null); // if(map.get("code").equals("200")){ @@ -1521,39 +1529,39 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } - } - if(payType == 3) {//余额支付 - if (userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()) { - return ResultUtil.error("余额不足,无法完成支付"); - } + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()) { + return ResultUtil.error("余额不足,无法完成支付"); + } // resultUtil= appOrderController.moneyPay(id,userInfo.getId(),query.getMoney()); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - //添加交易明细 - transactionDetailsService.saveData(uid, "跨城出行取消订单", query.getMoney(), 2, 1, 1, 3, id); - userInfoService.updateById(userInfo); - - //解除小号绑定 - if (orderCrossCity.getBindId() != null) { - chinaMobileUtil.midAxbUnBindSend(orderCrossCity.getBindId(), orderCrossCity.getTelX(), (System.currentTimeMillis() + 600000)); - } - - orderCrossCity.setState(10); - orderCrossCity.setTelX(""); - orderCrossCity.setBindId(""); - this.updateById(orderCrossCity); - - orderCancel.setState(2); - orderCancel.setPayType(3); - orderCancelService.updateById(orderCancel); - - //添加已收入明细 - incomeService.saveData(1, orderCrossCity.getCompanyId(), 3, orderCrossCity.getId(), 3, query.getMoney()); - - this.deleteTask(id);//删除定时任务 + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + //添加交易明细 + transactionDetailsService.saveData(uid, "跨城出行取消订单", query.getMoney(), 2, 1, 1, 3, id); + userInfoService.updateById(userInfo); + + //解除小号绑定 + if (orderCrossCity.getBindId() != null) { + chinaMobileUtil.midAxbUnBindSend(orderCrossCity.getBindId(), orderCrossCity.getTelX(), (System.currentTimeMillis() + 600000)); + } + + orderCrossCity.setState(10); + orderCrossCity.setTelX(""); + orderCrossCity.setBindId(""); + this.updateById(orderCrossCity); + + orderCancel.setState(2); + orderCancel.setPayType(3); + orderCancelService.updateById(orderCancel); + + //添加已收入明细 + incomeService.saveData(1, orderCrossCity.getCompanyId(), 3, orderCrossCity.getId(), 3, query.getMoney()); + + this.deleteTask(id);//删除定时任务 // new Thread(new Runnable() { // @Override @@ -1561,1097 +1569,1117 @@ // pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); // } // }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderCrossCity.getUserId(), 1); - - - }else if(payType == 4){ - Double payMoney = orderCrossCity.getOrderMoney(); - Integer integer = paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 4, query.getMoney(), "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(query.getMoney()), 4,id,4,integer); - - } - } - return resultUtil; - } - - - /** - * 计算价格 - * @param distance - * @param peopleNumber - * @param travelMode - * @param lineId - * @param serverCarModelId - * @param totalSeat - * @param seatNumber - * @return - */ - public ResultUtil<Map<String, Object>> getPrice(Double distance, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber){ - if(0 >= peopleNumber && peopleNumber > 6){ - return ResultUtil.error("请输入正确的乘车人数"); - } - - Map<String, Object> map = new HashMap<>(); - double distance1 = distance.doubleValue() / 1000;//公里 - map.put("distance", distance); - - /** - * 1.固定价格的包车是整车价格 - * 2.五座车和七座车的优惠系数是中间特殊位置的优惠折扣 - * 3.包车的情况不享受中间特殊位置的优惠折扣 - * 4.浮动计费拼车如果选中中间特殊位置既享受优惠系数又享受中间特殊位置的优惠折扣 - */ - Map<String, Object> query = linePriceMapper.query(lineId, serverCarModelId); - if(null == query){ - map.put("distance", 0); - map.put("price", 0); - return ResultUtil.success(map); - } - String content = query.get("content").toString(); - JSONObject jsonObject = JSON.parseObject(content); - if(Integer.valueOf(query.get("type").toString()) == 1){//固定金额 - double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue(); - double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue(); - double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue(); - double num4 = Double.valueOf(jsonObject.getString("num4")).doubleValue(); - if(travelMode == 1){//拼车 - String[] split = seatNumber.split(","); - boolean b = false; - for(String s : split){ - if((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))){ - b = true; - break; - } - } - double price1 = 0D; - if(b){ - price1 = num1 * (totalSeat == 4 ? num3 : num4); - peopleNumber -= 1; - } - double price = (num1 * peopleNumber) + price1; - map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - }else{ - map.put("price", num2);//包车价 - } - - }else{//浮动计费 - //计算公式:实际历程 * 基础单价 * (参考费用 / (参考里程 * 基础单价)) + (实际历程 - 参考里程) * 基础单价 * 优惠系数 - double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue();//参考价格 - double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue();//参考里程 - double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue();//保底价 - double num4 = Double.valueOf(jsonObject.getString("num4")).doubleValue();//超出参考里程优惠系数 - double num5 = Double.valueOf(jsonObject.getString("num5")).doubleValue();//低于参考里程优惠系数 - double num6 = Double.valueOf(jsonObject.getString("num6")).doubleValue();//包车系数 - double num7 = Double.valueOf(jsonObject.getString("num7")).doubleValue();//五座系数 - double num8 = Double.valueOf(jsonObject.getString("num8")).doubleValue();//七座系数 - - - /** - * 1、实际里程>=参考里程 - * 参考价+((实际里程-参考里程)*(参考价/参考里程)*超出参考里程优惠系数) - * - * 2、实际里程<参考里程 - * 参考价-(参考里程-实际路程)*(参考价/参考里程)*低于参考里程优惠系数 - */ - double unitPrice = 0d; - if(distance1 > num2){//1 - unitPrice = num1 + ((distance1 - num2) * (num1 / num2) * num4); - } - if(distance1 < num2){//2 - unitPrice = num1 - ((num2 - distance1) * (num1 / num2) * num5); - } - if(distance1 == num2){ - unitPrice = num1; - } - if(travelMode == 1){//拼车 - String[] split = seatNumber.split(","); - boolean b = false; - for(String s : split){ - if((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))){ - b = true; - break; - } - } - double price1 = 0D; - if(b){ - price1 = unitPrice * (totalSeat == 4 ? num7 : num8); - peopleNumber -= 1; - } - double price = (unitPrice * peopleNumber) + price1; - map.put("price", new BigDecimal(num3 > price ? num3 : price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - }else{ - double price = unitPrice * totalSeat * num6; - map.put("price", new BigDecimal(num3 > price ? num3 : price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - } - } - return ResultUtil.success(map); - } - - /** - * 删除定时任务 - * @param orderId - */ - @Override - public void deleteTask(Integer orderId){ - //发送验证码短信 - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("orderId", orderId + ""); - params.add("orderType", "3"); - HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用driver-server出错了"); - } - } - - /** - * 获取红包 - * @param orderId - * @return - * @throws Exception - */ - @Override - public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - Integer companyId = orderCrossCity.getCompanyId(); - - Map<String, Object> query = userActivityRedenvelopeService.query(companyId, orderCrossCity.getTravelTime()); - Double money = 0D; - BaseWarpper baseWarpper = new BaseWarpper(); - if(null != query){ - Integer type = Integer.valueOf(String.valueOf(query.get("type"))); - if(type == 1){//固定金额 - money = Double.valueOf(String.valueOf(query.get("money"))); - }else{//随机金额 - Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); - Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); - int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); - Random random = new Random(); - int num = random.nextInt(i); - money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - } - //判断当前红包是否大于剩余可领取总金额 - if(money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0){ - baseWarpper.setAmount(0D); - return ResultUtil.success(baseWarpper); - } - } - baseWarpper.setAmount(money); - - if(money > 0){ - //添加临时红包数据 - UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); - userRedPacketRecord.setMoney(money); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); - userRedPacketRecord.setExpirationTime(calendar.getTime()); - userRedPacketRecord.setInsertTime(new Date()); - userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); - userRedPacketRecord.setState(0); - userRedPacketRecord.setOrderId(orderCrossCity.getId()); - userRedPacketRecord.setOrderType(3); - userRedPacketRecord.setUserId(orderCrossCity.getUserId()); - userRedPacketRecordService.insert(userRedPacketRecord); - } - appOrderController.moneyPay(orderCrossCity.getId(),orderCrossCity.getUserId(),money); - return ResultUtil.success(baseWarpper); - } - - - /** - * 分享成功后添加红包 - * @param orderId - * @return - * @throws Exception - */ - @Override - public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - UserRedPacketRecord query = userRedPacketRecordService.query_(orderCrossCity.getUserId(), orderCrossCity.getCompanyId(), 0, 3, null); - if(null != query){ - Double money = query.getMoney(); - Map<String, Object> map = userActivityRedenvelopeService.query(orderCrossCity.getCompanyId(), orderCrossCity.getTravelTime()); - Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); - if(money.compareTo(laveMoney) > 0){ - return ResultUtil.error("手速太慢了,红包已派发完啦!"); - } - //判断当前红包是否大于剩余可领取总金额 - if(money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0){ - return ResultUtil.error("手速太慢了,红包已派发完啦!"); - } - double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); - - UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); - id.setLaveMoney(v); - id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - userActivityRedenvelopeService.updateById(id); - - query.setState(1); - query.setRedPacketActivityId(id.getId()); - userRedPacketRecordService.updateById(query); - } - return ResultUtil.success(); - } - - - /** - * 取消订单支付后的处理 - * @param id 订单=id - * @param order_id 工行支付单号 - * @param type 1=微信,2=支付宝 - * @throws Exception - */ - @Override - public void payCancelOrderCrossCity(Integer id, String order_id, Integer type) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(id); - PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, Integer.valueOf(id), 3, type, 1); - if(null != query){ - //添加交易明细 - transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); - orderCrossCity.setState(10); - //解除小号绑定 - if(orderCrossCity.getBindId() != null){ - chinaMobileUtil.midAxbUnBindSend(orderCrossCity.getBindId(), orderCrossCity.getTelX(), (System.currentTimeMillis() + 600000)); - } - orderCrossCity.setBindId(""); - orderCrossCity.setTelX(""); - this.updateById(orderCrossCity); - - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); - if (null != query1){ - query1.setState(2); - orderCancelService.updateById(query1); - } - - //添加已收入明细 - incomeService.saveData(1, orderCrossCity.getCompanyId(), 3, orderCrossCity.getId(), 3, query.getAmount()); - - this.deleteTask(orderCrossCity.getId());//删除定时任务 - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderCrossCity.getUserId(), 1); + + + } else if (payType == 4) { + Double payMoney = orderCrossCity.getOrderMoney(); + Integer integer = paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 4, query.getMoney(), "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(query.getMoney()), 4, id, 4, integer); + + } + } + return resultUtil; + } + + + /** + * 计算价格 + * + * @param distance + * @param peopleNumber + * @param travelMode + * @param lineId + * @param serverCarModelId + * @param totalSeat + * @param seatNumber + * @return + */ + public ResultUtil<Map<String, Object>> getPrice(Double distance, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber) { + if (0 >= peopleNumber && peopleNumber > 6) { + return ResultUtil.error("请输入正确的乘车人数"); + } + + Map<String, Object> map = new HashMap<>(); + double distance1 = distance.doubleValue() / 1000;//公里 + map.put("distance", distance); + + /** + * 1.固定价格的包车是整车价格 + * 2.五座车和七座车的优惠系数是中间特殊位置的优惠折扣 + * 3.包车的情况不享受中间特殊位置的优惠折扣 + * 4.浮动计费拼车如果选中中间特殊位置既享受优惠系数又享受中间特殊位置的优惠折扣 + */ + Map<String, Object> query = linePriceMapper.query(lineId, serverCarModelId); + if (null == query) { + map.put("distance", 0); + map.put("price", 0); + return ResultUtil.success(map); + } + String content = query.get("content").toString(); + JSONObject jsonObject = JSON.parseObject(content); + if (Integer.valueOf(query.get("type").toString()) == 1) {//固定金额 + double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue(); + double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue(); + double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue(); + double num4 = Double.valueOf(jsonObject.getString("num4")).doubleValue(); + if (travelMode == 1) {//拼车 + String[] split = seatNumber.split(","); + boolean b = false; + for (String s : split) { + if ((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))) { + b = true; + break; + } + } + double price1 = 0D; + if (b) { + price1 = num1 * (totalSeat == 4 ? num3 : num4); + peopleNumber -= 1; + } + double price = (num1 * peopleNumber) + price1; + map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + } else { + map.put("price", num2);//包车价 + } + + } else {//浮动计费 + //计算公式:实际历程 * 基础单价 * (参考费用 / (参考里程 * 基础单价)) + (实际历程 - 参考里程) * 基础单价 * 优惠系数 + double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue();//参考价格 + double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue();//参考里程 + double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue();//保底价 + double num4 = Double.valueOf(jsonObject.getString("num4")).doubleValue();//超出参考里程优惠系数 + double num5 = Double.valueOf(jsonObject.getString("num5")).doubleValue();//低于参考里程优惠系数 + double num6 = Double.valueOf(jsonObject.getString("num6")).doubleValue();//包车系数 + double num7 = Double.valueOf(jsonObject.getString("num7")).doubleValue();//五座系数 + double num8 = Double.valueOf(jsonObject.getString("num8")).doubleValue();//七座系数 + + + /** + * 1、实际里程>=参考里程 + * 参考价+((实际里程-参考里程)*(参考价/参考里程)*超出参考里程优惠系数) + * + * 2、实际里程<参考里程 + * 参考价-(参考里程-实际路程)*(参考价/参考里程)*低于参考里程优惠系数 + */ + double unitPrice = 0d; + if (distance1 > num2) {//1 + unitPrice = num1 + ((distance1 - num2) * (num1 / num2) * num4); + } + if (distance1 < num2) {//2 + unitPrice = num1 - ((num2 - distance1) * (num1 / num2) * num5); + } + if (distance1 == num2) { + unitPrice = num1; + } + if (travelMode == 1) {//拼车 + String[] split = seatNumber.split(","); + boolean b = false; + for (String s : split) { + if ((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))) { + b = true; + break; + } + } + double price1 = 0D; + if (b) { + price1 = unitPrice * (totalSeat == 4 ? num7 : num8); + peopleNumber -= 1; + } + double price = (unitPrice * peopleNumber) + price1; + map.put("price", new BigDecimal(num3 > price ? num3 : price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + } else { + double price = unitPrice * totalSeat * num6; + map.put("price", new BigDecimal(num3 > price ? num3 : price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + } + } + return ResultUtil.success(map); + } + + /** + * 删除定时任务 + * + * @param orderId + */ + @Override + public void deleteTask(Integer orderId) { + //发送验证码短信 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("orderId", orderId + ""); + params.add("orderType", "3"); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); + JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); + if (jsonObject.getIntValue("code") != 200) { + System.err.println("调用driver-server出错了"); + } + } + + /** + * 获取红包 + * + * @param orderId + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + Integer companyId = orderCrossCity.getCompanyId(); + + Map<String, Object> query = userActivityRedenvelopeService.query(companyId, orderCrossCity.getTravelTime()); + Double money = 0D; + BaseWarpper baseWarpper = new BaseWarpper(); + if (null != query) { + Integer type = Integer.valueOf(String.valueOf(query.get("type"))); + if (type == 1) {//固定金额 + money = Double.valueOf(String.valueOf(query.get("money"))); + } else {//随机金额 + Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); + Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); + int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); + Random random = new Random(); + int num = random.nextInt(i); + money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + } + //判断当前红包是否大于剩余可领取总金额 + if (money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0) { + baseWarpper.setAmount(0D); + return ResultUtil.success(baseWarpper); + } + } + baseWarpper.setAmount(money); + + if (money > 0) { + //添加临时红包数据 + UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); + userRedPacketRecord.setMoney(money); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); + userRedPacketRecord.setExpirationTime(calendar.getTime()); + userRedPacketRecord.setInsertTime(new Date()); + userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); + userRedPacketRecord.setState(0); + userRedPacketRecord.setOrderId(orderCrossCity.getId()); + userRedPacketRecord.setOrderType(3); + userRedPacketRecord.setUserId(orderCrossCity.getUserId()); + userRedPacketRecordService.insert(userRedPacketRecord); + } + appOrderController.moneyPay(orderCrossCity.getId(), orderCrossCity.getUserId(), money); + return ResultUtil.success(baseWarpper); + } + + + /** + * 分享成功后添加红包 + * + * @param orderId + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + UserRedPacketRecord query = userRedPacketRecordService.query_(orderCrossCity.getUserId(), orderCrossCity.getCompanyId(), 0, 3, null); + if (null != query) { + Double money = query.getMoney(); + Map<String, Object> map = userActivityRedenvelopeService.query(orderCrossCity.getCompanyId(), orderCrossCity.getTravelTime()); + Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); + if (money.compareTo(laveMoney) > 0) { + return ResultUtil.error("手速太慢了,红包已派发完啦!"); + } + //判断当前红包是否大于剩余可领取总金额 + if (money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0) { + return ResultUtil.error("手速太慢了,红包已派发完啦!"); + } + double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); + + UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); + id.setLaveMoney(v); + id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + userActivityRedenvelopeService.updateById(id); + + query.setState(1); + query.setRedPacketActivityId(id.getId()); + userRedPacketRecordService.updateById(query); + } + return ResultUtil.success(); + } + + + /** + * 取消订单支付后的处理 + * + * @param id 订单=id + * @param order_id 工行支付单号 + * @param type 1=微信,2=支付宝 + * @throws Exception + */ + @Override + public void payCancelOrderCrossCity(Integer id, String order_id, Integer type) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(id); + PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, Integer.valueOf(id), 3, type, 1); + if (null != query) { + //添加交易明细 + transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); + orderCrossCity.setState(10); + //解除小号绑定 + if (orderCrossCity.getBindId() != null) { + chinaMobileUtil.midAxbUnBindSend(orderCrossCity.getBindId(), orderCrossCity.getTelX(), (System.currentTimeMillis() + 600000)); + } + orderCrossCity.setBindId(""); + orderCrossCity.setTelX(""); + this.updateById(orderCrossCity); + + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); + if (null != query1) { + query1.setState(2); + orderCancelService.updateById(query1); + } + + //添加已收入明细 + incomeService.saveData(1, orderCrossCity.getCompanyId(), 3, orderCrossCity.getId(), 3, query.getAmount()); + + this.deleteTask(orderCrossCity.getId());//删除定时任务 + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 // new Thread(new Runnable() { // @Override // public void run() { // pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); // } // }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type==2?"支付宝":"云闪付")) + "成功支付取消订单费用,谢谢使用!", orderCrossCity.getUserId(), 1); - }else{ - System.err.println("预支付数据异常(orderId = " + id + ")"); - } - } - - /** - * 获取个人中心订单列表 - * @param uid - * @param pageNum - * @param size - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { - pageNum = (pageNum - 1) * size; - List<Map<String, Object>> maps = orderCrossCityMapper.queryMyOrderList(uid, pageNum, size); - for(Map<String, Object> map : maps){ - if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ - map.put("state", map.get("oldState")); - } - } - return maps; - } - - @Override - public List<Map<String, Object>> queryMyTravelRecord(Integer uid) { - return orderCrossCityMapper.queryMyTravelRecord(uid); - } - - @Override - public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid) throws Exception { - startTime = dateUtil.getStartOrEndDate(startTime, "start"); - endTime = dateUtil.getStartOrEndDate(endTime, "end"); - return orderCrossCityMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); - } - - - /** - * 获取红包使用记录 - * @param uid - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception { - return orderCrossCityMapper.queryRedEnvelope(uid); - } - - - /** - * 添加跨城取消(直接取消不需要支付费用,退款) - * @param id - * @param reason - * @param remark - * @param uid - * @return - * @throws Exception - */ - @Override - public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { - if(ToolUtil.isNotEmpty(remark)){ - if(ToolUtil.isNotEmpty(remark)){ - List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); - for(SensitiveWords s : sensitiveWords){ - remark = remark.replaceAll(s.getContent(), "***"); - } - } - } - - OrderCrossCity orderCrossCity = this.selectById(id); - Integer integer = null; - if(null == orderCrossCity){ - return ResultUtil.error("取消订单失败,订单信息有误"); - } - if(orderCrossCity.getState() >= 5 && orderCrossCity.getState() != 7 && orderCrossCity.getState() != 11){ - return ResultUtil.error("取消订单失败,不合法的操作"); - } - - //还原座位 - CancleOrder query1 = cancleOrderService.query(1, 3, orderCrossCity.getCompanyId()); - if (null != query1) { - if((orderCrossCity.getSnatchOrderTime().getTime() + query1.getMinuteNum() * 60 * 1000) < new Date().getTime() && query1.getMoney().compareTo(0D) > 0){//需要付费的情况 - integer = orderCancelService.saveData(id, 3, reason, remark, null, query1.getMoney(), 1, 1, uid); - orderCrossCity.setState(12); - }else{ - integer = orderCancelService.saveData(id, 3, reason, remark, null, null, 2, 1, uid); - orderCrossCity.setState(10); - } - this.updateById(orderCrossCity); - - if(orderCrossCity.getState() != 7){//已经支付的情况推送给司机提醒 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - System.err.println("推送取消操作---------------------"); - } - }).start(); - } - - //修改司机座位 - LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); - lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); - lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); - lineShiftDriverMapper.updateById(lineShiftDriver); - - //修改司机为空闲 - List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); - if(orderCrossCities.size() == 0){ - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - driver.setState(2); - driverService.updateById(driver); - } - }else{ - return ResultUtil.error("请完善后台取消规则设置"); - } - - //已支付的情况下进行退款操作 - if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){ - // 退款 - if(orderCrossCity.getPayType()==5){ - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - if(orderCrossCity.getPayMoney()!=null && orderCrossCity.getPayMoney()>0) { - appOrderController.createAllocationReqDriver(1, driver.getId(), 1, orderCrossCity.getPayMoney()); - } - } - - if(orderCrossCity.getPayType() == 3){//余额支付 - UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); - userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney()); - userInfoService.updateById(userInfo); - //添加交易明细 - transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", orderCrossCity.getPayMoney(), 1, 1, 1, 3, id); - appOrderController.createAllocationReqUser(1, orderCrossCity.getUserId(), 1,orderCrossCity.getPayMoney()); - }else{ - PaymentRecord query = null; - if(orderCrossCity.getOrderSource() == 4){ - query = paymentRecordService.query(1, orderCrossCity.getDriverId(), 2, id, 3, orderCrossCity.getPayType(), 2); - if(ToolUtil.isEmpty(query)){ - query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, id, 3, orderCrossCity.getPayType(), 2); - } - }else{ - query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, id, 3, orderCrossCity.getPayType(), 2); - } - - if(null == query){ - return ResultUtil.error("订单还未进行支付"); - } - - if(query.getPayType() == 1){//微信 - - Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), id + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay"); - if(!"SUCCESS".equals(map.get("return_code"))){ - return ResultUtil.error(map.get("return_msg")); - } - }else if(query.getPayType()==4){ // 云闪付 - // TODO 退款 - UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); - userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney()); - userInfoService.updateById(userInfo); - //添加交易明细 - transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", orderCrossCity.getPayMoney(), 1, 1, 1, 3, id); - if(orderCrossCity.getOrderSource() == 4){ - // 退给司机 - appOrderController.createAllocationReqDriver(1,orderCrossCity.getDriverId(),1,orderCrossCity.getPayMoney()); - }else { - appOrderController.createAllocationReqUser(1, orderCrossCity.getUserId(), 1,orderCrossCity.getPayMoney()); - } - }else{//支付宝 - Map<String, String> map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString()); - if(!"10000".equals(map.get("code"))){ - return ResultUtil.error(map.get("msg")); - } - //添加交易明细 - transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id); - } - } - - //添加负的收入明细 - List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", id).eq("orderType", 3)); - for(Income income : incomes){ - if(income.getUserType() == 2){//处理司机的收入 - Driver driver = driverService.selectById(income.getObjectId()); - driver.setBalance(driver.getBalance() - income.getMoney()); - driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); - driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); - driverService.updateById(driver); - } - Income income1 = new Income(); - BeanUtils.copyProperties(income, income1); - income1.setMoney(income.getMoney() * -1); - income1.setId(null); - income1.setInsertTime(new Date()); - incomeService.insert(income1); - } - - - } - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderCrossCity.getUserId(), 1); - Map<String, Object> map = new HashMap<>(); - map.put("id", integer); - return ResultUtil.success(map); - } - - - /** - * 获取服务中的订单数据 - * @param uid - * @return - * @throws Exception - */ - @Override - public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - //计算预计距离和剩余时间 - String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderCrossCity.getDriverId())); - if(null == value || "".equals(value)){ - System.err.println("司机没有上传位置信息"); - - //调用获取轨迹中的数据 - List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 3); - if(list.size() > 0){ - Map<String, Object> map = list.get(list.size() - 1); - value = map.get("lon") + "," + map.get("lat"); - } - } - - OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); - orderServerWarpper.setOrderId(orderCrossCity.getId()); - orderServerWarpper.setOrderType(3); - orderServerWarpper.setState(orderCrossCity.getState()); - orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); - orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); - orderServerWarpper.setReassignNotice(orderCrossCity.getReassignNotice()); - if(orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3){//前往预约地 - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), 1); - String d = "0"; - String t = "0"; - if(null == distance){ - System.err.println("查询距离出错了"); - }else{ - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; - } - orderServerWarpper.setReservationMileage(d); - orderServerWarpper.setReservationTime(t); - orderServerWarpper.setServedMileage("0"); - orderServerWarpper.setServedTime("0"); - orderServerWarpper.setLaveMileage("0"); - orderServerWarpper.setLaveTime("0"); - } - if(orderCrossCity.getState() == 5 || orderCrossCity.getState() == 6){//服务中 - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat(), 1); - String d = "0"; - String t = "0"; - if(null == distance){ - System.err.println("查询距离出错了"); - }else{ - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; - } - orderServerWarpper.setReservationMileage("0"); - orderServerWarpper.setReservationTime("0"); - orderServerWarpper.setServedMileage(String.valueOf(orderCrossCity.getMileage() / 1000)); - orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderCrossCity.getStartServiceTime().getTime()) / 60000).intValue() + ""); - orderServerWarpper.setLaveMileage(d); - orderServerWarpper.setLaveTime(t); - } - - return orderServerWarpper; - } - - - /** - * 摆渡下单 - * @param serverCarModelIds - * @param travelTime - * @param placementLon - * @param placementLat - * @param startLon - * @param startLat - * @param startAddress - * @param endLon - * @param endLat - * @param endAddress - * @return - */ - @Override - public ResultUtil<BaseWarpper> saveOrderFerry(String serverCarModelIds, Date travelTime, String placementLon, String placementLat, String startLon, - String startLat, String startAddress, String endLon, String endLat, String endAddress, Integer crossCityOrderId, - Integer place, Integer orderSource, Integer uid) throws Exception { - if(ToolUtil.isEmpty(serverCarModelIds)){ - return ResultUtil.error("请选择服务车型"); - } - Map<String, String> geocode = gdMapGeocodingUtil.geocode(startLon, startLat); - boolean b = openCityService.openCity(geocode.get("districtCode")); - if(!b){ - return ResultUtil.error("起点暂未开通"); - } - - String[] split = serverCarModelIds.split(","); - List<Map<String, Integer>> list = new ArrayList<>(); - Integer orderId = null; - for(String serverModelId : split){ - Map<String, Integer> map = new HashMap<>(); - if(serverModelId.equals("0")){//出租车 - ResultUtil<BaseWarpper> resultUtil = this.orderText(travelTime, placementLon, placementLat, startLon, startLat, startAddress, endLon, endLat, endAddress, crossCityOrderId, place, orderSource, uid); - if(resultUtil.getCode() != 200){ - return resultUtil; - } - map.put("orderType", 2); - map.put("orderId", resultUtil.getData().getId()); - }else{ - ResultUtil<BaseWarpper> resultUtil = this.orderPrivateCar(Integer.valueOf(serverModelId), travelTime, placementLon, placementLat, startLon, startLat, startAddress, endLon, endLat, endAddress, crossCityOrderId, place, orderSource, uid); - if(resultUtil.getCode() != 200){ - return resultUtil; - } - map.put("orderType", 1); - map.put("orderId", resultUtil.getData().getId()); - orderId = resultUtil.getData().getId(); - } - list.add(map); - } - //推单操作 - this.pushOrder(list); - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setId(null == orderId ? list.get(0).get("orderId") : orderId); - return ResultUtil.success(baseWarpper); - } - - - /** - * 出租车摆渡单 - * @param travelTime - * @param placementLon - * @param placementLat - * @param startLon - * @param startLat - * @param startAddress - * @param endLon - * @param endLat - * @param endAddress - * @param orderSource - * @param uid - * @return - * @throws Exception - */ - private synchronized ResultUtil<BaseWarpper> orderText(Date travelTime, String placementLon, String placementLat, String startLon, String startLat, - String startAddress, String endLon, String endLat, String endAddress, Integer crossCityOrderId, Integer place, Integer orderSource, Integer uid) throws Exception{ - //定义用户所属公司 - OrderTaxi orderTaxi = new OrderTaxi(); - UserInfo userInfo1 = userInfoService.selectById(uid); - Company query = companyCityService.query(startLon, startLat); - if(null == query){ - return ResultUtil.error("出发点暂未开通"); - } - if(null != userInfo1.getCompanyId() && 0 != userInfo1.getCompanyId()){ - userInfo1.setCompanyId(query.getId()); - userInfoService.updateById(userInfo1); - } - - if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ - orderTaxi.setOrderType(2); - } - - orderTaxi.setType(2); - orderTaxi.setCrossCityOrderId(crossCityOrderId); - orderTaxi.setPlace(place); - orderTaxi.setSubstitute(0); - orderTaxi.setOrderType(1); - orderTaxi.setOrderSource(orderSource); - orderTaxi.setTravelTime(travelTime); - orderTaxi.setPlacementLon(Double.valueOf(placementLon)); - orderTaxi.setPlacementLat(Double.valueOf(placementLat)); - orderTaxi.setStartLon(Double.valueOf(startLon)); - orderTaxi.setStartLat(Double.valueOf(startLat)); - orderTaxi.setStartAddress(startAddress); - orderTaxi.setEndLon(Double.valueOf(endLon)); - orderTaxi.setEndLat(Double.valueOf(endLat)); - orderTaxi.setEndAddress(endAddress); - orderTaxi.setOrderNum(orderTaxiService.getOrderNum()); - Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); - orderTaxi.setPlacementAddress(geocode.get("address")); - String startAddress1 = orderTaxi.getStartAddress(); - startAddress1 = startAddress1.replaceAll("& #40;", "("); - startAddress1 = startAddress1.replaceAll("& #41;", ")"); - orderTaxi.setStartAddress(startAddress1);//特殊字符转义 - String endAddress1 = orderTaxi.getEndAddress(); - endAddress1 = endAddress1.replaceAll("& #40;", "("); - endAddress1 = endAddress1.replaceAll("& #41;", ")"); - orderTaxi.setEndAddress(endAddress1); - orderTaxi.setUserId(uid); - orderTaxi.setMileage(0D); - orderTaxi.setOrderMoney(0D); - orderTaxi.setTravelMoney(0D); - orderTaxi.setParkMoney(0D); - orderTaxi.setRoadTollMoney(0D); - orderTaxi.setRedPacketMoney(0D); - orderTaxi.setCouponMoney(0D); - orderTaxi.setInsertTime(new Date()); - orderTaxi.setIsReassign(1); - if(orderTaxi.getSubstitute() == 0){//不是代下单 - UserInfo userInfo = userInfoService.selectById(uid); - if(ToolUtil.isEmpty(userInfo.getPhone())){ - return ResultUtil.error("请先绑定手机号码"); - } - orderTaxi.setPassengers(userInfo.getName()); - orderTaxi.setPassengersPhone(userInfo.getPhone()); - } - orderTaxi.setState(1);//待接单 - - orderTaxiService.insert(orderTaxi); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); - - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setId(orderTaxi.getId()); - return ResultUtil.success(baseWarpper); - } - - - /** - * 专车摆渡单 - * @param serverCarModelId - * @param travelTime - * @param placementLon - * @param placementLat - * @param startLon - * @param startLat - * @param startAddress - * @param endLon - * @param endLat - * @param endAddress - * @param orderSource - * @param uid - * @return - * @throws Exception - */ - private synchronized ResultUtil<BaseWarpper> orderPrivateCar(Integer serverCarModelId, Date travelTime, String placementLon, String placementLat, String startLon, String startLat, - String startAddress, String endLon, String endLat, String endAddress, Integer crossCityOrderId, Integer place, Integer orderSource, Integer uid) throws Exception{ - //如果出行时间大于当前10分钟则默认为预约单 - Integer reservation = 1; - if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ - reservation = 2; - } - - startAddress = startAddress.replaceAll("& #40;", "("); - startAddress = startAddress.replaceAll("& #41;", ")"); - endAddress = endAddress.replaceAll("& #40;", "("); - endAddress = endAddress.replaceAll("& #41;", ")"); - if((orderSource == 1 || orderSource == 3) && null == serverCarModelId){ - return ResultUtil.error("请选择服务车型"); - } - - OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); - orderPrivateCar.setType(2); - orderPrivateCar.setCrossCityOrderId(crossCityOrderId); - orderPrivateCar.setPlace(place); - orderPrivateCar.setUserId(uid); - orderPrivateCar.setServerCarModelId(serverCarModelId); - orderPrivateCar.setOrderNum(orderPrivateCarService.getOrderNum()); - orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); - orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); - Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); - orderPrivateCar.setPlacementAddress(geocode.get("address")); - 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.setSubstitute(0); - if(orderPrivateCar.getSubstitute() == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){ - UserInfo userInfo = userInfoService.selectById(uid); - if(ToolUtil.isEmpty(userInfo.getPhone())){ - return ResultUtil.error("请先绑定手机号码"); - } - orderPrivateCar.setPassengers(userInfo.getName()); - orderPrivateCar.setPassengersPhone(userInfo.getPhone()); - } - orderPrivateCar.setState(1); - orderPrivateCar.setInsertTime(new Date()); - orderPrivateCar.setTravelTime(travelTime); - orderPrivateCar.setOrderType(reservation); - orderPrivateCar.setOrderSource(orderSource); - - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - orderPrivateCarMapper.insert(orderPrivateCar); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); - - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setId(orderPrivateCar.getId()); - return ResultUtil.success(baseWarpper); - } - - - /** - * 摆渡车推单操作 - * @param list - * @throws Exception - */ - public void pushOrder(List<Map<String, Integer>> list) throws Exception{ - for(Map<String, Integer> map : list){ - Integer orderType = map.get("orderType"); - Integer orderId = map.get("orderId"); - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - List<Map<String, Integer>> datas = list; - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - List<Integer> integers = new ArrayList<>(); - if(ToolUtil.isNotEmpty(vehicle)){ - integers = JSON.parseArray(vehicle).toJavaList(Integer.class); - } - try { - if(orderType == 1){//专车 - OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); - OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 - Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司 - List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 - for(int i = 1; i <= querys.size(); i++){ - //订单被抢后的处理 - Integer state = orderPrivateCarMapper.selectById(orderId).getState(); - if(state != 1){ - //关闭其他推送线程 - Set<String> keySet = threadMap.keySet(); - for(String key : keySet){ - if(!key.equals(orderId + "_1")){ - Thread thread1 = threadMap.get(key);//中断线程 - if(null != thread1){ - thread1.interrupt(); - } - threadMap.remove(key); - } - } - //删除其他无效数据 - for(Map<String, Integer> map : datas){ - Integer orderType = map.get("orderType"); - Integer orderId = map.get("orderId"); - if(orderType == 1 && orderId != orderPrivateCar.getId()){ - orderPrivateCarMapper.deleteById(orderId); - } - if(orderType == 2){ - orderTaxiMapper.deleteById(orderId); - } - } - break; - } - - //开始进行推送的处理 - PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0); - //获取空闲司机 - List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 - if(list.size() > 0){ - double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 - int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) - list = list.subList(0, lastIndex);//获取空闲司机中占比数据 - for(Driver driver : list){//开始进行推送 - boolean bo = false; - for(Integer integer : integers){ - if(integer.compareTo(driver.getId()) == 0){ - bo = true; - break; - } - } - if(bo){ - continue; - } - pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); - } - } - - //所有推送完后的处理 - Boolean b = pushEndMap.get(orderPrivateCar.getCrossCityOrderId()); - if(i == querys.size() && state == 1 && (null != b && !b.booleanValue())){ - pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); - OrderPrivateCarServiceImpl.orderIds.remove(orderPrivateCar.getId()); - pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识 - break; - } - Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 - } - } - - if(orderType == 2){//出租车 - OrderTaxi orderTaxi = orderTaxiMapper.selectById(orderId); - OrderTaxiServiceImpl.orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单 - Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat()));//获取起点所属分公司 - List<PushOrder> querys = pushOrderService.querys(null, 2, query.getId());//获取需要推送的次数 - for(int i = 1; i <= querys.size(); i++){ - //处理订单被抢 - Integer state = orderTaxiMapper.selectById(orderId).getState(); - if(state != 1){ - //关闭其他推送任务 - Set<String> keySet = threadMap.keySet(); - for(String key : keySet){ - if(!key.equals(orderId + "_2")){ - Thread thread1 = threadMap.get(key);//中断线程 - if(null != thread1){ - thread1.interrupt(); - } - threadMap.remove(key); - } - } - //删除其他无效数据 - for(Map<String, Integer> map : datas){ - Integer orderType = map.get("orderType"); - Integer orderId = map.get("orderId"); - if(orderType == 1){ - orderPrivateCarMapper.deleteById(orderId); - } - if(orderType == 2 && orderId != orderTaxi.getId()){ - orderTaxiMapper.deleteById(orderId); - } - } - break; - } - - //开始进行推送 - PushOrder pushOrder = pushOrderService.querys(i, 2, query.getId()).get(0); - //获取空闲司机 - List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 - if(list.size() > 0){ - double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 - int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) - list = list.subList(0, lastIndex);//获取空闲司机中占比数据 - for(Driver driver : list){//开始进行推送 - boolean bo = false; - for(Integer integer : integers){ - if(integer.compareTo(driver.getId()) == 0){ - bo = true; - break; - } - } - if(bo){ - continue; - } - - - pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); - } - } - - //所有推送完后的处理 - Boolean b = pushEndMap.get(orderTaxi.getCrossCityOrderId()); - if(i == querys.size() && state == 1 && (null != b && !b.booleanValue())){ - pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2); - OrderTaxiServiceImpl.orderIds.remove(orderTaxi.getId()); - pushEndMap.put(orderTaxi.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识 - } - Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 - } - } - }catch (Exception e){ - e.printStackTrace(); - } - } - }); - thread.start(); - threadMap.put(orderId + "_" + orderType, thread); - } - } - - @Override - public List<OrderCrossCity> queryListOrder(Integer driverId, Integer lineShiftId, List<Integer> state, String day) throws Exception { - return orderCrossCityMapper.queryListOrder(driverId, lineShiftId, state, day); - } - - /** - * 获取订单编号 - * @return - * @throws Exception - */ - - public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception{ - System.out.println(driverId+"|"+lineShiftDriverId); - List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryOrders(driverId, lineShiftDriverId, Arrays.asList(2, 3, 4, 7)); - if(orderCrossCities.size() > 0){ - return orderCrossCities.get(0).getOrderNum(); - } - int size = this.selectCount(null); - while (true){ - String orderNum = "CROSS" + String.valueOf(1000000 + size + 1).substring(1); - List<OrderCrossCity> orderNum1 = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderNum)); - if(orderNum1.size() == 0){ - return orderNum; - } - size++; - } - - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception { - UserInfo userInfo = userInfoService.selectById(uid); - OrderCrossCity orderCrossCity = this.selectById(orderId); - ResultUtil resultUtil = ResultUtil.success(); - if(payType == 1){//微信支付 - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); - paymentRecordService.saveData(1, uid, 1, orderId, 3, 2, money, "", 1);//添加预支付数据 - } - if(payType == 3) {//余额支付 - if (userInfo.getBalance() == null || userInfo.getBalance() < money) { - return ResultUtil.error("余额不足,无法完成支付"); - } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功支付取消订单费用,谢谢使用!", orderCrossCity.getUserId(), 1); + } else { + System.err.println("预支付数据异常(orderId = " + id + ")"); + } + } + + /** + * 获取个人中心订单列表 + * + * @param uid + * @param pageNum + * @param size + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { + pageNum = (pageNum - 1) * size; + List<Map<String, Object>> maps = orderCrossCityMapper.queryMyOrderList(uid, pageNum, size); + for (Map<String, Object> map : maps) { + if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { + map.put("state", map.get("oldState")); + } + } + return maps; + } + + @Override + public List<Map<String, Object>> queryMyTravelRecord(Integer uid) { + return orderCrossCityMapper.queryMyTravelRecord(uid); + } + + @Override + public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid) throws Exception { + startTime = dateUtil.getStartOrEndDate(startTime, "start"); + endTime = dateUtil.getStartOrEndDate(endTime, "end"); + return orderCrossCityMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); + } + + + /** + * 获取红包使用记录 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception { + return orderCrossCityMapper.queryRedEnvelope(uid); + } + + + /** + * 添加跨城取消(直接取消不需要支付费用,退款) + * + * @param id + * @param reason + * @param remark + * @param uid + * @return + * @throws Exception + */ + @Override + public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { + if (ToolUtil.isNotEmpty(remark)) { + if (ToolUtil.isNotEmpty(remark)) { + List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); + for (SensitiveWords s : sensitiveWords) { + remark = remark.replaceAll(s.getContent(), "***"); + } + } + } + + OrderCrossCity orderCrossCity = this.selectById(id); + Integer integer = null; + if (null == orderCrossCity) { + return ResultUtil.error("取消订单失败,订单信息有误"); + } + if (orderCrossCity.getState() >= 5 && orderCrossCity.getState() != 7 && orderCrossCity.getState() != 11) { + return ResultUtil.error("取消订单失败,不合法的操作"); + } + + //还原座位 + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + CancleOrder query1 = cancleOrderService.query(1, 3, openCity.getId()); + if (null != query1) { + if ((orderCrossCity.getSnatchOrderTime().getTime() + query1.getMinuteNum() * 60 * 1000) < new Date().getTime() && query1.getMoney().compareTo(0D) > 0) {//需要付费的情况 + integer = orderCancelService.saveData(id, 3, reason, remark, null, query1.getMoney(), 1, 1, uid); + orderCrossCity.setState(12); + } else { + integer = orderCancelService.saveData(id, 3, reason, remark, null, null, 2, 1, uid); + orderCrossCity.setState(10); + } + this.updateById(orderCrossCity); + + if (orderCrossCity.getState() != 7) {//已经支付的情况推送给司机提醒 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + System.err.println("推送取消操作---------------------"); + } + }).start(); + } + + //修改司机座位 + LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); + lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); + lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); + lineShiftDriverMapper.updateById(lineShiftDriver); + + //修改司机为空闲 + List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); + if (orderCrossCities.size() == 0) { + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + driver.setState(2); + driverService.updateById(driver); + } + } else { + return ResultUtil.error("请完善后台取消规则设置"); + } + + //已支付的情况下进行退款操作 + if (null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()) { + // 退款 + if (orderCrossCity.getPayType() == 5) { + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + if (orderCrossCity.getPayMoney() != null && orderCrossCity.getPayMoney() > 0) { + appOrderController.createAllocationReqDriver(1, driver.getId(), 1, orderCrossCity.getPayMoney()); + } + } + + if (orderCrossCity.getPayType() == 3) {//余额支付 + UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); + userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney()); + userInfoService.updateById(userInfo); + //添加交易明细 + transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", orderCrossCity.getPayMoney(), 1, 1, 1, 3, id); + appOrderController.createAllocationReqUser(1, orderCrossCity.getUserId(), 1, orderCrossCity.getPayMoney()); + } else { + PaymentRecord query = null; + if (orderCrossCity.getOrderSource() == 4) { + query = paymentRecordService.query(1, orderCrossCity.getDriverId(), 2, id, 3, orderCrossCity.getPayType(), 2); + if (ToolUtil.isEmpty(query)) { + query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, id, 3, orderCrossCity.getPayType(), 2); + } + } else { + query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, id, 3, orderCrossCity.getPayType(), 2); + } + + if (null == query) { + return ResultUtil.error("订单还未进行支付"); + } + + if (query.getPayType() == 1) {//微信 + + Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), id + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay"); + if (!"SUCCESS".equals(map.get("return_code"))) { + return ResultUtil.error(map.get("return_msg")); + } + } else if (query.getPayType() == 4) { // 云闪付 + // TODO 退款 + UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); + userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney()); + userInfoService.updateById(userInfo); + //添加交易明细 + transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", orderCrossCity.getPayMoney(), 1, 1, 1, 3, id); + if (orderCrossCity.getOrderSource() == 4) { + // 退给司机 + appOrderController.createAllocationReqDriver(1, orderCrossCity.getDriverId(), 1, orderCrossCity.getPayMoney()); + } else { + appOrderController.createAllocationReqUser(1, orderCrossCity.getUserId(), 1, orderCrossCity.getPayMoney()); + } + } else {//支付宝 + Map<String, String> map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString()); + if (!"10000".equals(map.get("code"))) { + return ResultUtil.error(map.get("msg")); + } + //添加交易明细 + transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id); + } + } + + //添加负的收入明细 + List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", id).eq("orderType", 3)); + for (Income income : incomes) { + if (income.getUserType() == 2) {//处理司机的收入 + Driver driver = driverService.selectById(income.getObjectId()); + driver.setBalance(driver.getBalance() - income.getMoney()); + driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); + driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); + driverService.updateById(driver); + } + Income income1 = new Income(); + BeanUtils.copyProperties(income, income1); + income1.setMoney(income.getMoney() * -1); + income1.setId(null); + income1.setInsertTime(new Date()); + incomeService.insert(income1); + } + + + } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderCrossCity.getUserId(), 1); + Map<String, Object> map = new HashMap<>(); + map.put("id", integer); + return ResultUtil.success(map); + } + + + /** + * 获取服务中的订单数据 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + //计算预计距离和剩余时间 + String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderCrossCity.getDriverId())); + if (null == value || "".equals(value)) { + System.err.println("司机没有上传位置信息"); + + //调用获取轨迹中的数据 + List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 3); + if (list.size() > 0) { + Map<String, Object> map = list.get(list.size() - 1); + value = map.get("lon") + "," + map.get("lat"); + } + } + + OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); + orderServerWarpper.setOrderId(orderCrossCity.getId()); + orderServerWarpper.setOrderType(3); + orderServerWarpper.setState(orderCrossCity.getState()); + orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); + orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); + orderServerWarpper.setReassignNotice(orderCrossCity.getReassignNotice()); + if (orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3) {//前往预约地 + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), 1); + String d = "0"; + String t = "0"; + if (null == distance) { + System.err.println("查询距离出错了"); + } else { + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage(d); + orderServerWarpper.setReservationTime(t); + orderServerWarpper.setServedMileage("0"); + orderServerWarpper.setServedTime("0"); + orderServerWarpper.setLaveMileage("0"); + orderServerWarpper.setLaveTime("0"); + } + if (orderCrossCity.getState() == 5 || orderCrossCity.getState() == 6) {//服务中 + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat(), 1); + String d = "0"; + String t = "0"; + if (null == distance) { + System.err.println("查询距离出错了"); + } else { + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage("0"); + orderServerWarpper.setReservationTime("0"); + orderServerWarpper.setServedMileage(String.valueOf(orderCrossCity.getMileage() / 1000)); + orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderCrossCity.getStartServiceTime().getTime()) / 60000).intValue() + ""); + orderServerWarpper.setLaveMileage(d); + orderServerWarpper.setLaveTime(t); + } + + return orderServerWarpper; + } + + + /** + * 摆渡下单 + * + * @param serverCarModelIds + * @param travelTime + * @param placementLon + * @param placementLat + * @param startLon + * @param startLat + * @param startAddress + * @param endLon + * @param endLat + * @param endAddress + * @return + */ + @Override + public ResultUtil<BaseWarpper> saveOrderFerry(String serverCarModelIds, Date travelTime, String placementLon, String placementLat, String startLon, + String startLat, String startAddress, String endLon, String endLat, String endAddress, Integer crossCityOrderId, + Integer place, Integer orderSource, Integer uid) throws Exception { + if (ToolUtil.isEmpty(serverCarModelIds)) { + return ResultUtil.error("请选择服务车型"); + } + Map<String, String> geocode = gdMapGeocodingUtil.geocode(startLon, startLat); + boolean b = openCityService.openCity(geocode.get("districtCode")); + if (!b) { + return ResultUtil.error("起点暂未开通"); + } + + String[] split = serverCarModelIds.split(","); + List<Map<String, Integer>> list = new ArrayList<>(); + Integer orderId = null; + for (String serverModelId : split) { + Map<String, Integer> map = new HashMap<>(); + if (serverModelId.equals("0")) {//出租车 + ResultUtil<BaseWarpper> resultUtil = this.orderText(travelTime, placementLon, placementLat, startLon, startLat, startAddress, endLon, endLat, endAddress, crossCityOrderId, place, orderSource, uid); + if (resultUtil.getCode() != 200) { + return resultUtil; + } + map.put("orderType", 2); + map.put("orderId", resultUtil.getData().getId()); + } else { + ResultUtil<BaseWarpper> resultUtil = this.orderPrivateCar(Integer.valueOf(serverModelId), travelTime, placementLon, placementLat, startLon, startLat, startAddress, endLon, endLat, endAddress, crossCityOrderId, place, orderSource, uid); + if (resultUtil.getCode() != 200) { + return resultUtil; + } + map.put("orderType", 1); + map.put("orderId", resultUtil.getData().getId()); + orderId = resultUtil.getData().getId(); + } + list.add(map); + } + //推单操作 + this.pushOrder(list); + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(null == orderId ? list.get(0).get("orderId") : orderId); + return ResultUtil.success(baseWarpper); + } + + + /** + * 出租车摆渡单 + * + * @param travelTime + * @param placementLon + * @param placementLat + * @param startLon + * @param startLat + * @param startAddress + * @param endLon + * @param endLat + * @param endAddress + * @param orderSource + * @param uid + * @return + * @throws Exception + */ + private synchronized ResultUtil<BaseWarpper> orderText(Date travelTime, String placementLon, String placementLat, String startLon, String startLat, + String startAddress, String endLon, String endLat, String endAddress, Integer crossCityOrderId, Integer place, Integer orderSource, Integer uid) throws Exception { + //定义用户所属公司 + OrderTaxi orderTaxi = new OrderTaxi(); + UserInfo userInfo1 = userInfoService.selectById(uid); + Company query = companyCityService.query(startLon, startLat); + if (null == query) { + return ResultUtil.error("出发点暂未开通"); + } + if (null != userInfo1.getCompanyId() && 0 != userInfo1.getCompanyId()) { + userInfo1.setCompanyId(query.getId()); + userInfoService.updateById(userInfo1); + } + + if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) { + orderTaxi.setOrderType(2); + } + + orderTaxi.setType(2); + orderTaxi.setCrossCityOrderId(crossCityOrderId); + orderTaxi.setPlace(place); + orderTaxi.setSubstitute(0); + orderTaxi.setOrderType(1); + orderTaxi.setOrderSource(orderSource); + orderTaxi.setTravelTime(travelTime); + orderTaxi.setPlacementLon(Double.valueOf(placementLon)); + orderTaxi.setPlacementLat(Double.valueOf(placementLat)); + orderTaxi.setStartLon(Double.valueOf(startLon)); + orderTaxi.setStartLat(Double.valueOf(startLat)); + orderTaxi.setStartAddress(startAddress); + orderTaxi.setEndLon(Double.valueOf(endLon)); + orderTaxi.setEndLat(Double.valueOf(endLat)); + orderTaxi.setEndAddress(endAddress); + orderTaxi.setOrderNum(orderTaxiService.getOrderNum()); + Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); + orderTaxi.setPlacementAddress(geocode.get("address")); + String startAddress1 = orderTaxi.getStartAddress(); + startAddress1 = startAddress1.replaceAll("& #40;", "("); + startAddress1 = startAddress1.replaceAll("& #41;", ")"); + orderTaxi.setStartAddress(startAddress1);//特殊字符转义 + String endAddress1 = orderTaxi.getEndAddress(); + endAddress1 = endAddress1.replaceAll("& #40;", "("); + endAddress1 = endAddress1.replaceAll("& #41;", ")"); + orderTaxi.setEndAddress(endAddress1); + orderTaxi.setUserId(uid); + orderTaxi.setMileage(0D); + orderTaxi.setOrderMoney(0D); + orderTaxi.setTravelMoney(0D); + orderTaxi.setParkMoney(0D); + orderTaxi.setRoadTollMoney(0D); + orderTaxi.setRedPacketMoney(0D); + orderTaxi.setCouponMoney(0D); + orderTaxi.setInsertTime(new Date()); + orderTaxi.setIsReassign(1); + if (orderTaxi.getSubstitute() == 0) {//不是代下单 + UserInfo userInfo = userInfoService.selectById(uid); + if (ToolUtil.isEmpty(userInfo.getPhone())) { + return ResultUtil.error("请先绑定手机号码"); + } + orderTaxi.setPassengers(userInfo.getName()); + orderTaxi.setPassengersPhone(userInfo.getPhone()); + } + orderTaxi.setState(1);//待接单 + + orderTaxiService.insert(orderTaxi); + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); + + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(orderTaxi.getId()); + return ResultUtil.success(baseWarpper); + } + + + /** + * 专车摆渡单 + * + * @param serverCarModelId + * @param travelTime + * @param placementLon + * @param placementLat + * @param startLon + * @param startLat + * @param startAddress + * @param endLon + * @param endLat + * @param endAddress + * @param orderSource + * @param uid + * @return + * @throws Exception + */ + private synchronized ResultUtil<BaseWarpper> orderPrivateCar(Integer serverCarModelId, Date travelTime, String placementLon, String placementLat, String startLon, String startLat, + String startAddress, String endLon, String endLat, String endAddress, Integer crossCityOrderId, Integer place, Integer orderSource, Integer uid) throws Exception { + //如果出行时间大于当前10分钟则默认为预约单 + Integer reservation = 1; + if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) { + reservation = 2; + } + + startAddress = startAddress.replaceAll("& #40;", "("); + startAddress = startAddress.replaceAll("& #41;", ")"); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + if ((orderSource == 1 || orderSource == 3) && null == serverCarModelId) { + return ResultUtil.error("请选择服务车型"); + } + + OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); + orderPrivateCar.setType(2); + orderPrivateCar.setCrossCityOrderId(crossCityOrderId); + orderPrivateCar.setPlace(place); + orderPrivateCar.setUserId(uid); + orderPrivateCar.setServerCarModelId(serverCarModelId); + orderPrivateCar.setOrderNum(orderPrivateCarService.getOrderNum()); + orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); + orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); + Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); + orderPrivateCar.setPlacementAddress(geocode.get("address")); + 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.setSubstitute(0); + if (orderPrivateCar.getSubstitute() == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())) { + UserInfo userInfo = userInfoService.selectById(uid); + if (ToolUtil.isEmpty(userInfo.getPhone())) { + return ResultUtil.error("请先绑定手机号码"); + } + orderPrivateCar.setPassengers(userInfo.getName()); + orderPrivateCar.setPassengersPhone(userInfo.getPhone()); + } + orderPrivateCar.setState(1); + orderPrivateCar.setInsertTime(new Date()); + orderPrivateCar.setTravelTime(travelTime); + orderPrivateCar.setOrderType(reservation); + orderPrivateCar.setOrderSource(orderSource); + + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + orderPrivateCarMapper.insert(orderPrivateCar); + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); + + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(orderPrivateCar.getId()); + return ResultUtil.success(baseWarpper); + } + + + /** + * 摆渡车推单操作 + * + * @param list + * @throws Exception + */ + public void pushOrder(List<Map<String, Integer>> list) throws Exception { + for (Map<String, Integer> map : list) { + Integer orderType = map.get("orderType"); + Integer orderId = map.get("orderId"); + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + List<Map<String, Integer>> datas = list; + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + List<Integer> integers = new ArrayList<>(); + if (ToolUtil.isNotEmpty(vehicle)) { + integers = JSON.parseArray(vehicle).toJavaList(Integer.class); + } + try { + if (orderType == 1) {//专车 + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); + OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数 + for (int i = 1; i <= querys.size() + 5; i++) { + //订单被抢后的处理 + Integer state = orderPrivateCarMapper.selectById(orderId).getState(); + if (state != 1) { + //关闭其他推送线程 + Set<String> keySet = threadMap.keySet(); + for (String key : keySet) { + if (!key.equals(orderId + "_1")) { + Thread thread1 = threadMap.get(key);//中断线程 + if (null != thread1) { + thread1.interrupt(); + } + threadMap.remove(key); + } + } + //删除其他无效数据 + for (Map<String, Integer> map : datas) { + Integer orderType = map.get("orderType"); + Integer orderId = map.get("orderId"); + if (orderType == 1 && orderId != orderPrivateCar.getId()) { + orderPrivateCarMapper.deleteById(orderId); + } + if (orderType == 2) { + orderTaxiMapper.deleteById(orderId); + } + } + break; + } + + //开始进行推送的处理 + int finalI = i; + 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 (list.size() > 0) { + double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 + int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) + list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + for (Driver driver : list) {//开始进行推送 + boolean bo = false; + for (Integer integer : integers) { + if (integer.compareTo(driver.getId()) == 0) { + bo = true; + break; + } + } + if (bo) { + continue; + } + pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); + } + } + + //所有推送完后的处理 + Boolean b = pushEndMap.get(orderPrivateCar.getCrossCityOrderId()); + if (i == querys.size() + 5 && state == 1 && (null != b && !b.booleanValue())) { + pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); + OrderPrivateCarServiceImpl.orderIds.remove(orderPrivateCar.getId()); + pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识 + break; + } + Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 + } + } + + if (orderType == 2) {//出租车 + OrderTaxi orderTaxi = orderTaxiMapper.selectById(orderId); + OrderTaxiServiceImpl.orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单 + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数 + for (int i = 1; i <= querys.size() + 5; i++) { + //处理订单被抢 + Integer state = orderTaxiMapper.selectById(orderId).getState(); + if (state != 1) { + //关闭其他推送任务 + Set<String> keySet = threadMap.keySet(); + for (String key : keySet) { + if (!key.equals(orderId + "_2")) { + Thread thread1 = threadMap.get(key);//中断线程 + if (null != thread1) { + thread1.interrupt(); + } + threadMap.remove(key); + } + } + //删除其他无效数据 + for (Map<String, Integer> map : datas) { + Integer orderType = map.get("orderType"); + Integer orderId = map.get("orderId"); + if (orderType == 1) { + orderPrivateCarMapper.deleteById(orderId); + } + if (orderType == 2 && orderId != orderTaxi.getId()) { + orderTaxiMapper.deleteById(orderId); + } + } + break; + } + + //开始进行推送 + int finalI = i; + 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 (list.size() > 0) { + double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 + int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) + list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + for (Driver driver : list) {//开始进行推送 + boolean bo = false; + for (Integer integer : integers) { + if (integer.compareTo(driver.getId()) == 0) { + bo = true; + break; + } + } + if (bo) { + continue; + } + + + pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); + } + } + + //所有推送完后的处理 + Boolean b = pushEndMap.get(orderTaxi.getCrossCityOrderId()); + if (i == querys.size() + 5 && state == 1 && (null != b && !b.booleanValue())) { + pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2); + OrderTaxiServiceImpl.orderIds.remove(orderTaxi.getId()); + pushEndMap.put(orderTaxi.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识 + } + Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + thread.start(); + threadMap.put(orderId + "_" + orderType, thread); + } + } + + @Override + public List<OrderCrossCity> queryListOrder(Integer driverId, Integer lineShiftId, List<Integer> state, String day) throws Exception { + return orderCrossCityMapper.queryListOrder(driverId, lineShiftId, state, day); + } + + /** + * 获取订单编号 + * + * @return + * @throws Exception + */ + + public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception { + System.out.println(driverId + "|" + lineShiftDriverId); + List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryOrders(driverId, lineShiftDriverId, Arrays.asList(2, 3, 4, 7)); + if (orderCrossCities.size() > 0) { + return orderCrossCities.get(0).getOrderNum(); + } + int size = this.selectCount(null); + while (true) { + String orderNum = "CROSS" + String.valueOf(1000000 + size + 1).substring(1); + List<OrderCrossCity> orderNum1 = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderNum)); + if (orderNum1.size() == 0) { + return orderNum; + } + size++; + } + + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception { + UserInfo userInfo = userInfoService.selectById(uid); + OrderCrossCity orderCrossCity = this.selectById(orderId); + ResultUtil resultUtil = ResultUtil.success(); + if (payType == 1) {//微信支付 + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); + paymentRecordService.saveData(1, uid, 1, orderId, 3, 2, money, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < money) { + return ResultUtil.error("余额不足,无法完成支付"); + } // resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),money); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "跨城出行-感谢费", money, 2, 1, 1, 3, orderId); - userInfoService.updateById(userInfo); - - orderCrossCity.setThankYouFee(money); - this.updateById(orderCrossCity); - - //添加已收入明细 - incomeService.saveData(2, orderCrossCity.getDriverId(), 6, orderCrossCity.getId(), 3, money); - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1); - - } - if(payType==4){ - Double payMoney = orderCrossCity.getThankYouFee(); - Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 3, 4, money, "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4,orderId,2,integer); - } - return resultUtil; - } - - @Override - public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception { - OrderCrossCity orderCrossCity = this.selectById(orderId); - UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); - PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 3, payType, 1); - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(userInfo.getId(), "跨城出行-感谢费", query.getAmount(), 2, 1, 1, 3, orderId); - userInfoService.updateById(userInfo); - - orderCrossCity.setThankYouFee(query.getAmount()); - this.updateById(orderCrossCity); - - //添加已收入明细 - incomeService.saveData(2, orderCrossCity.getDriverId(), 6, orderCrossCity.getId(), 3, query.getAmount()); - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType==2?"支付宝":"云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1); - } - - @Override - public List<UnPayOrderVO> getUnpayCrossCityOrders(Integer uid) throws Exception { - EntityWrapper<OrderCrossCity> query = new EntityWrapper<>(); - query.eq("userId", uid).eq("state", 7); - // 查询未支付订单 - List<OrderCrossCity> orderCrossCities = this.selectList(query); - List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>(); - for(OrderCrossCity orderCrossCity : orderCrossCities){ - - UnPayOrderVO unPayOrderVO = new UnPayOrderVO(); - //添加司机信息 - DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper(); - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - BeanUtils.copyProperties(driver, driverInfoWarpper); unPayOrderVO.setDriverInfoWarpper(driverInfoWarpper); - //其余信息 - BeanUtils.copyProperties(orderCrossCity, unPayOrderVO); - unPayOrderVOList.add(unPayOrderVO); - } - return unPayOrderVOList; - } + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "跨城出行-感谢费", money, 2, 1, 1, 3, orderId); + userInfoService.updateById(userInfo); + + orderCrossCity.setThankYouFee(money); + this.updateById(orderCrossCity); + + //添加已收入明细 + incomeService.saveData(2, orderCrossCity.getDriverId(), 6, orderCrossCity.getId(), 3, money); + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1); + + } + if (payType == 4) { + Double payMoney = orderCrossCity.getThankYouFee(); + Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 3, 4, money, "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4, orderId, 2, integer); + } + return resultUtil; + } + + @Override + public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception { + OrderCrossCity orderCrossCity = this.selectById(orderId); + UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); + PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 3, payType, 1); + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(userInfo.getId(), "跨城出行-感谢费", query.getAmount(), 2, 1, 1, 3, orderId); + userInfoService.updateById(userInfo); + + orderCrossCity.setThankYouFee(query.getAmount()); + this.updateById(orderCrossCity); + + //添加已收入明细 + incomeService.saveData(2, orderCrossCity.getDriverId(), 6, orderCrossCity.getId(), 3, query.getAmount()); + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType == 2 ? "支付宝" : "云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1); + } + + @Override + public List<UnPayOrderVO> getUnpayCrossCityOrders(Integer uid) throws Exception { + EntityWrapper<OrderCrossCity> query = new EntityWrapper<>(); + query.eq("userId", uid).eq("state", 7); + // 查询未支付订单 + List<OrderCrossCity> orderCrossCities = this.selectList(query); + List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>(); + for (OrderCrossCity orderCrossCity : orderCrossCities) { + + UnPayOrderVO unPayOrderVO = new UnPayOrderVO(); + //添加司机信息 + DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper(); + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + BeanUtils.copyProperties(driver, driverInfoWarpper); + unPayOrderVO.setDriverInfoWarpper(driverInfoWarpper); + //其余信息 + BeanUtils.copyProperties(orderCrossCity, unPayOrderVO); + unPayOrderVOList.add(unPayOrderVO); + } + return unPayOrderVOList; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/newlyAdded/NewlyAddedController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/newlyAdded/NewlyAddedController.java index c975f99..753583e 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/newlyAdded/NewlyAddedController.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/newlyAdded/NewlyAddedController.java @@ -8,7 +8,6 @@ import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.ResultUtil; -import com.stylefeng.guns.modular.system.warpper.CouponWarpper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -25,7 +24,6 @@ import java.util.Calendar; import java.util.Date; import java.util.List; -import java.util.Map; @Api("新增2.0") @RestController @@ -63,6 +61,9 @@ @Autowired private ICompanyService companyService; + + @Autowired + private IOpenCityService openCityService; @@ -223,17 +224,20 @@ @ResponseBody @PostMapping("/base/newlyAdded/getShowModular") - @ApiOperation(value = "获取显示模块设置", tags = {"用户端-2.0新增"}, notes = "") + @ApiOperation(value = "获取显示模块设置(黔云通)", tags = {"用户端-2.0新增"}, notes = "") @ApiImplicitParams({ + @ApiImplicitParam(value = "当前经度", name = "lon", required = true, dataType = "String"), + @ApiImplicitParam(value = "当前纬度", name = "lon", required = true, dataType = "String"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) - public ResultUtil<List<TbShowModular>> getShowModular(HttpServletRequest request){ + public ResultUtil<List<TbShowModular>> getShowModular(String lon, String lat, HttpServletRequest request){ try { // Integer uid = userInfoService.getUserIdFormRedis(request); // if(null == uid){ // return ResultUtil.tokenErr(); // } - return ResultUtil.success(showModularService.selectList(null)); + OpenCity openCity = openCityService.openCity1(lon, lat); + return ResultUtil.success(showModularService.selectList(new EntityWrapper<TbShowModular>().eq("openCityId",openCity.getId()))); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java index 197f3fe..b916a87 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java @@ -194,7 +194,7 @@ Double price1 = 0D; Double price2 = 0D; if(type == 4){//同城 - Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null); + Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null, null); if(null == query1){ return ResultUtil.error("请先完善价格设定"); } @@ -203,7 +203,7 @@ price1 = jsonObject.getDouble("num2"); price2 = jsonObject.getDouble("num13"); }else{ - Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null); + Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null, null); if(null == query1){ return ResultUtil.error("请先完善价格设定"); } @@ -398,7 +398,7 @@ // TODO: 2023/11/4 无法修改 Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, location, 1); double distance1 = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null); + Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null, null); if(null != query1){ if(type == 4){ JSONObject jsonObject = JSON.parseObject(query1.get("content").toString()); @@ -496,7 +496,7 @@ Double price1 = 0D; Double price2 = 0D; if(type == 4){//同城 - Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null); + Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null, null); // TODO: 2023/11/4 已优化 if(null == dist){ Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, endLon + "," + endLat, 1); @@ -539,7 +539,7 @@ price2 = jsonObject.getDouble("num22"); } }else{ - Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null); + Map<String, Object> query1 = systemPriceMapper.query(query.getId(), type, null, null); String content = String.valueOf(query1.get("content")); JSONObject jsonObject = JSON.parseObject(content); price1 = jsonObject.getDouble("num1"); @@ -570,14 +570,15 @@ if(ToolUtil.isNotEmpty(vehicle)){ integers = JSON.parseArray(vehicle).toJavaList(Integer.class); } - Company query = companyCityService.query(String.valueOf(orderLogistics.getStartLon()), String.valueOf(orderLogistics.getStartLat()));//获取起点所属分公司 - List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//用专车的推单配置 - for(int i = 1; i <= querys.size(); i++){ + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//用专车的推单配置 + for(int i = 1; i <= querys.size() + 5; i++){ // OrderLogistics orderLogistics = orderLogisticsMapper.selectById(id); // if (null == orderLogistics || orderLogistics.getState() > 1) { // break; // } - PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0); + int finalI = i; + PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); int i2 = pushOrder.getPushTime() / 10; if(i2==0){ @@ -615,7 +616,7 @@ orderIds.remove(orderLogistics.getId()); return; } - if (i == querys.size() && state == 1) { + if (i == querys.size() + 5 && state == 1) { orderIds.remove(orderLogistics.getId()); } } @@ -664,8 +665,9 @@ } userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 //添加交易明细 @@ -788,7 +790,8 @@ // } userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 //添加交易明细 @@ -877,7 +880,8 @@ userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 //添加交易明细 @@ -960,7 +964,8 @@ this.updateById(orderLogistics); UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId()); - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 userInfoService.updateById(userInfo); @@ -1024,7 +1029,8 @@ orderLogisticsSpreadService.updateById(orderLogisticsSpread); UserInfo userInfo = userInfoService.selectById(orderLogistics.getUserId()); - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 userInfoService.updateById(userInfo); @@ -1628,7 +1634,8 @@ userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 //添加交易明细 @@ -1665,8 +1672,9 @@ query.setState(2); query.setCode(order_id); paymentRecordService.updateById(query); - - SysIntegral query1 = sysIntegralMapper.query(orderLogistics.getCompanyId()); + + OpenCity openCity = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 //添加交易明细 diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 332558f..b704f9f 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -47,6 +47,7 @@ import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -54,2667 +55,2636 @@ @Service public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService { - - @Resource - private OrderPrivateCarMapper orderPrivateCarMapper; - - @Resource - private CarServiceMapper carServiceMapper; - - @Resource - private OrderTaxiMapper orderTaxiMapper; - - @Resource - private SensitiveWordsMapper sensitiveWordsMapper; - - @Resource - private UserActivityDiscount1Mapper userActivityDiscount1Mapper; - - @Resource - private SysIntegralMapper sysIntegralMapper; - - @Resource - private OrderCrossCityMapper orderCrossCityMapper; - - @Resource - private RegionMapper regionMapper; - - @Autowired - private DateUtil dateUtil; - - @Autowired - private IUserInfoService userInfoService; - - @Autowired - private IDriverService driverService; - - @Autowired - private IDriverServiceService driverServiceService; - - @Autowired - private PushUtil pushUtil; - - @Autowired - private ICompanyCityService companyCityService; - - @Autowired - private IPushOrderService pushOrderService; - - @Autowired - private ISystemNoticeService systemNoticeService; - - @Autowired - private ICancleOrderService cancleOrderService; - - @Autowired - private IOrderCancelService orderCancelService; - - @Autowired - private RestTemplate internalRestTemplate; - - @Autowired - private IPaymentRecordService paymentRecordService; - - @Autowired - private ITransactionDetailsService transactionDetailsService; - - @Autowired - private ChinaMobileUtil chinaMobileUtil; - - @Autowired - private IIncomeService incomeService; - - @Autowired - private IUserCouponRecordService userCouponRecordService; - - @Autowired - private IUserRedPacketRecordService userRedPacketRecordService; - - @Autowired - private ICompanyService companyService; - - @Autowired - private IUserActivityRedenvelopeService userActivityRedenvelopeService; - - @Resource - private RedisTemplate<String, Object> redisTemplate; - - @Autowired - private GDFalconUtil gdFalconUtil; - - @Autowired - private GDMapGeocodingUtil gdMapGeocodingUtil; - - @Autowired - private GDMapElectricFenceUtil gdMapElectricFenceUtil; - - @Autowired - private IOrderPositionService orderPositionService; - - @Autowired - private PushMinistryOfTransportUtil pushMinistryOfTransportUtil; - - @Autowired - private IOrderCrossCityService orderCrossCityService; - - @Autowired - private IOrderTaxiService orderTaxiService; - - @Autowired - private PayMoneyUtil payMoneyUtil; - - @Autowired - private IOrderLogisticsService orderLogisticsService; - - @Autowired - private ITaxiCardPaymentService taxiCardPaymentService; - - @Autowired - private ITaxiCardService taxiCardService; - - @Autowired - private IOpenCityService openCityService; - - @Autowired - private IUserUserService userUserService; - - @Autowired - private IUserTaxiCardService userTaxiCardService; - - @Autowired - private IRegionService regionService; - - public static List<Integer> orderIds = new ArrayList<>(); - - @Value("${callbackPath}") - private String callbackPath; - - @Value("${pushMinistryOfTransport}") - private boolean pushMinistryOfTransport; - - @Autowired - private ITbSpellOrderRuleService spellOrderRuleService; - - @Autowired - private GeodesyUtil geodesyUtil; - - private Lock lock = new ReentrantLock(); - - /** - * 专车下单操作 - * @param serverCarModelId 服务车型id - * @param travelTime 出行时间 - * @param reservation 是否预约(1=否,2=是) - * @param instead 是否代下单(0=否,1=是) - * @param startLon 起点经度 - * @param startLat 起点纬度 - * @param startAddress 起点详细地址 - * @param endLon 终点经度 - * @param endLat 终点纬度 - * @param endAddress 终点详细地址 - * @param name 乘客姓名 - * @param phone 乘客电话 - * @return - * @throws Exception - */ - @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 { - BaseWarpper baseWarpper = new BaseWarpper(); - if (lock.tryLock()) { - try{ - //如果出行时间大于当前10分钟则默认为预约单 - if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ - reservation = 2; - } - /** - * 1.出租车、专车、跨城有待支付的订单不能叫车 - * 2.小件物流有未完成的订单可以下跨城、专车、出租车 - * 3.出租车、专车、跨城有预约单可以下即时单 - */ - List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, null, 1, 7, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, null, 1, 7, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 7, 12); - if(orderCrossCities1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - if(reservation == 1){ - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - } - - List<OrderPrivateCar> orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, null, 3, 7, 12); - if(orderPrivateCars1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list1 = orderTaxiMapper.queryByState_(uid, null, 3, 7, 12); - if(list1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities11 = orderCrossCityMapper.queryByState(uid, 7, 12); - if(orderCrossCities11.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - if(reservation == 1){ - orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - list1 = orderTaxiMapper.queryByState_(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - } - - - - - startAddress = startAddress.replaceAll("& #40;", "("); - startAddress = startAddress.replaceAll("& #41;", ")"); - endAddress = endAddress.replaceAll("& #40;", "("); - endAddress = endAddress.replaceAll("& #41;", ")"); - if((orderSource == 1 || orderSource == 3) && null == serverCarModelId){ - return ResultUtil.error("请选择服务车型"); - } - - OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); - orderPrivateCar.setPeopleNum(peopleNum); - orderPrivateCar.setRideType(rideType); - orderPrivateCar.setType(type); - orderPrivateCar.setUserId(uid); - orderPrivateCar.setServerCarModelId(serverCarModelId); - orderPrivateCar.setOrderNum(this.getOrderNum()); - orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); - orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); - Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); - orderPrivateCar.setPlacementAddress(geocode.get("address")); - 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.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(instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){ - UserInfo userInfo = userInfoService.selectById(uid); - if(ToolUtil.isEmpty(userInfo.getPhone())){ - return ResultUtil.error("请先绑定手机号码"); - } - orderPrivateCar.setPassengers(userInfo.getName()); - orderPrivateCar.setPassengersPhone(userInfo.getPhone()); - } - orderPrivateCar.setState(1); - orderPrivateCar.setInsertTime(new Date()); - orderPrivateCar.setTravelTime(travelTime); - orderPrivateCar.setOrderType(reservation); - orderPrivateCar.setOrderSource(orderSource); - if(orderSource == 2){//扫码下单 - Driver driver = driverService.selectById(driverId); - if(null == driver){ - return ResultUtil.error("司机信息有误,无法完成下单"); - } - if(driver.getAuthState() == 1){ - return ResultUtil.error("司机信息还未完成审核,无法完成下单"); - } - if(driver.getAuthState() == 3){ - return ResultUtil.error("司机账户已被冻结,无法提供服务"); - } - if(driver.getAuthState() == 4){ - return ResultUtil.error("司机信息未通过审核,无法提供服务"); - } - if(driver.getState() == 1){ - return ResultUtil.error("司机还未上线,无法提供服务"); - } - if(driver.getState() == 3){ - return ResultUtil.error("司机正在服务中,无法提供服务"); - } - // Integer orderType = orderPrivateCar.getRideType()==1?1:orderPrivateCar.getRideType()==2?9:8; - Integer orderType = 1; - Integer integer = driverServiceService.query_(driverId, orderType); - if(null == integer){ - return ResultUtil.error("该司机不能服务此业务"); - } - - orderPrivateCar.setDriverId(driverId); - orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( - driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); - orderPrivateCar.setState(2); - orderPrivateCar.setCarId(driver.getCarId()); - CarService query1 = carServiceMapper.query(1, driver.getCarId()); - orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); - orderPrivateCar.setSnatchOrderTime(new Date()); - - // //调用高德创建轨迹 - // String s = gdFalconUtil.selectTerminal(driver.getPhone()); - // String track = gdFalconUtil.createTrack(s); - // orderPrivateCar.setTrackId(track); - // - //调用移动的小号接口 - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderPrivateCar.setTelX(map.get("telX")); - orderPrivateCar.setBindId(map.get("bindId")); - } - - driver.setState(3); - driverService.updateById(driver); - } - //判断独享,一口价,拼车 - if(orderPrivateCar.getRideType()!=3){ - orderPrivateCar.setTotalPeopleNum(peopleNum); - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - this.insert(orderPrivateCar); - - if(orderSource == 2){//扫码下单 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); - } - }).start(); - } - - //推单操作-独享 - if(orderPrivateCar.getState() == 1){ - this.pushOrder(orderPrivateCar); - } - }else{ - OrderPrivateCar orderPrivateCar1 = null; - //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 - List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).in("state","2,3,4").le("totalPeopleNum",4-peopleNum)); - for(OrderPrivateCar order:orderList){ - TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId())); - if(spellOrderRule!=null){ - JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); - //判断时间 - - 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 已改成计算直线距离 - 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"); - //判断距离 - if(dis1<=jsonObject.getInteger("num1")*1000 && dis2<=jsonObject.getInteger("num2")*1000){ - orderPrivateCar1=order; - break; - } - } - } - } - if(orderPrivateCar1==null){ - orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).eq("state",5).le("totalPeopleNum",4-peopleNum)); - for(OrderPrivateCar order:orderList){ - TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId())); - if(spellOrderRule!=null){ - JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); - //判断时间 - if(travelTime.getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && travelTime.getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){ - String value = (String) redisTemplate.opsForValue().get("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 已改成计算直线距离 - 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"); - //判断距离 - if(dis1<=jsonObject.getInteger("num3")*1000 && dis2<=jsonObject.getInteger("num4")*1000){ - orderPrivateCar1=order; - break; - } - } - } - } - } - if(orderPrivateCar1==null){ - orderPrivateCar.setTotalPeopleNum(peopleNum); - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - this.insert(orderPrivateCar); - this.pushOrder(orderPrivateCar); - }else{ - Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); - orderPrivateCar.setDriverId(driverId); - orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( - driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); - orderPrivateCar.setState(2); - orderPrivateCar.setDriverId(driver.getId()); - orderPrivateCar.setCarId(driver.getCarId()); - CarService query1 = carServiceMapper.query(1, driver.getCarId()); - orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); - orderPrivateCar.setSnatchOrderTime(new Date()); - orderPrivateCar.setTotalPeopleNum(peopleNum+orderPrivateCar1.getTotalPeopleNum()); - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - orderPrivateCar.setPid(orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()); - this.insert(orderPrivateCar); - //修改总订单人数 - OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); - orderPrivateCar2.setSpellSuccess(1); - orderPrivateCar2.setTotalPeopleNum(peopleNum+orderPrivateCar1.getTotalPeopleNum()); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6)); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6)); - // - //调用移动的小号接口 - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderPrivateCar.setTelX(map.get("telX")); - orderPrivateCar.setBindId(map.get("bindId")); - } - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); - - } - }).start(); - List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid())); - for(OrderPrivateCar orderPrivateCar3:orderList1){ - pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); - } - OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); - pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); - } - - } - - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); - baseWarpper.setId(orderPrivateCar.getId()); - }catch (Exception e) { - e.printStackTrace(); - } finally { - lock.unlock(); - } - }else { - return ResultUtil.error("系统繁忙,请稍后再试!"); - } - return ResultUtil.success(baseWarpper); - } - - - /** - * 批量订单 - * - * @throws Exception - */ - @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 { - BaseWarpper baseWarpper = new BaseWarpper(); - if (lock.tryLock()) { - try { - //如果出行时间大于当前10分钟则默认为预约单 - if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) { - reservation = 2; - } - - /** - * 1.出租车、专车、跨城有待支付的订单不能叫车 - * 2.小件物流有未完成的订单可以下跨城、专车、出租车 - * 3.出租车、专车、跨城有预约单可以下即时单 - */ - List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, null, 1, 7, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, null, 1, 7, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 7, 12); - if(orderCrossCities1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - if(reservation == 1){ - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - } - - - List<OrderPrivateCar> orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, null, 3, 7, 12); - if(orderPrivateCars1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list1 = orderTaxiMapper.queryByState_(uid, null, 3, 7, 12); - if(list1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities11 = orderCrossCityMapper.queryByState(uid, 7, 12); - if(orderCrossCities11.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - if(reservation == 1){ - orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - list1 = orderTaxiMapper.queryByState_(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - } - - startAddress = startAddress.replaceAll("& #40;", "("); - startAddress = startAddress.replaceAll("& #41;", ")"); - endAddress = endAddress.replaceAll("& #40;", "("); - endAddress = endAddress.replaceAll("& #41;", ")"); - if(ToolUtil.isEmpty(serverCarModel)){ - return ResultUtil.error("请选择服务车型"); - } - - OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); - orderPrivateCar.setPeopleNum(peopleNum); - orderPrivateCar.setType(3); - orderPrivateCar.setUserId(uid); - orderPrivateCar.setServerCarModel(serverCarModel); - orderPrivateCar.setOrderNum(this.getOrderNum()); - orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); - orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); - Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); - orderPrivateCar.setPlacementAddress(geocode.get("address")); - 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.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(instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){ - UserInfo userInfo = userInfoService.selectById(uid); - if(ToolUtil.isEmpty(userInfo.getPhone())){ - return ResultUtil.error("请先绑定手机号码"); - } - orderPrivateCar.setPassengers(userInfo.getName()); - orderPrivateCar.setPassengersPhone(userInfo.getPhone()); - } - orderPrivateCar.setState(1); - orderPrivateCar.setInsertTime(new Date()); - orderPrivateCar.setTravelTime(travelTime); - orderPrivateCar.setOrderType(reservation); - orderPrivateCar.setOrderSource(orderSource); - orderPrivateCar.setTotalPeopleNum(peopleNum); - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - this.insert(orderPrivateCar); - - //判断独享,一口价,拼车 - JSONArray jsonArray = JSON.parseArray(serverCarModel); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject1 = jsonArray.getJSONObject(i); - Integer serverCarModelId = jsonObject1.getInteger("serverCarModelId"); - Integer rideType = jsonObject1.getInteger("rideType"); - if(0 == serverCarModelId){ - OrderTaxi orderTaxi = new OrderTaxi(); - orderTaxi.setId(orderPrivateCar.getId()); - orderTaxi.setState(1); - orderTaxi.setUserId(orderPrivateCar.getUserId()); - orderTaxi.setStartLon(orderPrivateCar.getStartLon()); - orderTaxi.setStartLat(orderPrivateCar.getStartLat()); - orderTaxiService.pushOrder(orderTaxi, 3); - } - - if(rideType!=3){ - //推单操作-独享 - this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); - }else{ - OrderPrivateCar orderPrivateCar1 = null; - //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 - List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).in("state","2,3,4").le("totalPeopleNum",4-peopleNum)); - for(OrderPrivateCar order:orderList){ - TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId())); - if(spellOrderRule!=null){ - JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); - //判断时间 - - 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 已改成计算直线距离 - 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"); - //判断距离 - if(dis1<=jsonObject.getInteger("num1")*1000 && dis2<=jsonObject.getInteger("num2")*1000){ - orderPrivateCar1=order; - break; - } - } - } - } - if(orderPrivateCar1==null){ - orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).eq("state",5).le("totalPeopleNum",4-peopleNum)); - for(OrderPrivateCar order:orderList){ - TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId())); - if(spellOrderRule!=null){ - JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); - //判断时间 - if(travelTime.getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && travelTime.getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){ - String value = (String) redisTemplate.opsForValue().get("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 已改成计算直线距离 - 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"); - //判断距离 - if(dis1<=jsonObject.getInteger("num3")*1000 && dis2<=jsonObject.getInteger("num4")*1000){ - orderPrivateCar1=order; - break; - } - } - } - } - } - if(orderPrivateCar1==null){ - this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); - }else{ - Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); - orderPrivateCar.setDriverId(driverId); - orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( - driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); - orderPrivateCar.setState(2); - orderPrivateCar.setDriverId(driver.getId()); - orderPrivateCar.setCarId(driver.getCarId()); - CarService query1 = carServiceMapper.query(1, driver.getCarId()); - orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); - orderPrivateCar.setRideType(3); - orderPrivateCar.setSnatchOrderTime(new Date()); - orderPrivateCar.setTotalPeopleNum(peopleNum+orderPrivateCar1.getTotalPeopleNum()); - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - orderPrivateCar.setPid(orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()); - this.insertOrUpdate(orderPrivateCar); - //修改总订单人数 - OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); - orderPrivateCar2.setSpellSuccess(1); - orderPrivateCar2.setTotalPeopleNum(peopleNum+orderPrivateCar1.getTotalPeopleNum()); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6)); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6)); - // - //调用移动的小号接口 - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderPrivateCar.setTelX(map.get("telX")); - orderPrivateCar.setBindId(map.get("bindId")); - } - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); - - } - }).start(); - List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid())); - for(OrderPrivateCar orderPrivateCar3:orderList1){ - pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); - } - OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); - pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); - } - } - } - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); - - baseWarpper.setId(orderPrivateCar.getId()); - }catch (Exception e) { - e.printStackTrace(); - } finally { - lock.unlock(); - } - }else { - return ResultUtil.error("系统繁忙,请稍后再试!"); - } - return ResultUtil.success(baseWarpper); - } - - /** - * 下单后继续等待 - * @param id - * @return - * @throws Exception - */ - @Override - public ResultUtil pushOrderPrivateCar(Integer id) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(id); - if(null == orderPrivateCar){ - return ResultUtil.error("推送订单失败,订单信息有误"); - } - if(orderPrivateCar.getState() != 1){ - return ResultUtil.error("订单已被司机接单,不能重复推送"); - } - //处理摆渡订单的继续推单操作 - if(orderPrivateCar.getType() == 2){ - OrderCrossCityServiceImpl.pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), false);//还原标识数据 - List<OrderPrivateCar> list = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); - List<Map<String, Integer>> orders = new ArrayList<>(); - for(OrderPrivateCar orderPrivateCar1 : list){ - if(orderPrivateCar1.getState() != 1){ - return ResultUtil.error("订单已被司机接单,推单取消"); - } - Map<String, Integer> map = new HashMap<>(); - map.put("orderType", 1); - map.put("orderId", orderPrivateCar1.getId()); - orders.add(map); - } - List<OrderTaxi> list1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); - for(OrderTaxi orderTaxi : list1){ - if(orderTaxi.getState() != 1){ - return ResultUtil.error("订单已被司机接单,推单取消"); - } - Map<String, Integer> map = new HashMap<>(); - map.put("orderType", 2); - map.put("orderId", orderTaxi.getId()); - orders.add(map); - } - //开始重新推单 - orderCrossCityService.pushOrder(orders); - - }else{ - //判断独享,一口价,拼车 - if(orderPrivateCar.getRideType()!=3){ - this.pushOrder(orderPrivateCar); - }else{ - OrderPrivateCar orderPrivateCar1 = null; - //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 - List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).in("state","2,3,4").le("totalPeopleNum",4-orderPrivateCar.getPeopleNum())); - for(OrderPrivateCar order:orderList){ - TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId())); - if(spellOrderRule!=null){ - JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); - //判断时间 - if(orderPrivateCar.getTravelTime().getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && orderPrivateCar.getTravelTime().getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){ + + public static List<Integer> orderIds = new ArrayList<>(); + @Resource + private OrderPrivateCarMapper orderPrivateCarMapper; + @Resource + private CarServiceMapper carServiceMapper; + @Resource + private OrderTaxiMapper orderTaxiMapper; + @Resource + private SensitiveWordsMapper sensitiveWordsMapper; + @Resource + private UserActivityDiscount1Mapper userActivityDiscount1Mapper; + @Resource + private SysIntegralMapper sysIntegralMapper; + @Resource + private OrderCrossCityMapper orderCrossCityMapper; + @Resource + private RegionMapper regionMapper; + @Autowired + private DateUtil dateUtil; + @Autowired + private IUserInfoService userInfoService; + @Autowired + private IDriverService driverService; + @Autowired + private IDriverServiceService driverServiceService; + @Autowired + private PushUtil pushUtil; + @Autowired + private ICompanyCityService companyCityService; + @Autowired + private IPushOrderService pushOrderService; + @Autowired + private ISystemNoticeService systemNoticeService; + @Autowired + private ICancleOrderService cancleOrderService; + @Autowired + private IOrderCancelService orderCancelService; + @Autowired + private RestTemplate internalRestTemplate; + @Autowired + private IPaymentRecordService paymentRecordService; + @Autowired + private ITransactionDetailsService transactionDetailsService; + @Autowired + private ChinaMobileUtil chinaMobileUtil; + @Autowired + private IIncomeService incomeService; + @Autowired + private IUserCouponRecordService userCouponRecordService; + @Autowired + private IUserRedPacketRecordService userRedPacketRecordService; + @Autowired + private ICompanyService companyService; + @Autowired + private IUserActivityRedenvelopeService userActivityRedenvelopeService; + @Resource + private RedisTemplate<String, Object> redisTemplate; + @Autowired + private GDFalconUtil gdFalconUtil; + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; + @Autowired + private GDMapElectricFenceUtil gdMapElectricFenceUtil; + @Autowired + private IOrderPositionService orderPositionService; + @Autowired + private PushMinistryOfTransportUtil pushMinistryOfTransportUtil; + @Autowired + private IOrderCrossCityService orderCrossCityService; + @Autowired + private IOrderTaxiService orderTaxiService; + @Autowired + private PayMoneyUtil payMoneyUtil; + @Autowired + private IOrderLogisticsService orderLogisticsService; + @Autowired + private ITaxiCardPaymentService taxiCardPaymentService; + @Autowired + private ITaxiCardService taxiCardService; + @Autowired + private IOpenCityService openCityService; + @Autowired + private IUserUserService userUserService; + @Autowired + private IUserTaxiCardService userTaxiCardService; + @Autowired + private IRegionService regionService; + @Value("${callbackPath}") + private String callbackPath; + + @Value("${pushMinistryOfTransport}") + private boolean pushMinistryOfTransport; + + @Autowired + private ITbSpellOrderRuleService spellOrderRuleService; + + @Autowired + private GeodesyUtil geodesyUtil; + + private Lock lock = new ReentrantLock(); + @Autowired + private AppOrderController appOrderController; + + /** + * 专车下单操作 + * + * @param serverCarModelId 服务车型id + * @param travelTime 出行时间 + * @param reservation 是否预约(1=否,2=是) + * @param instead 是否代下单(0=否,1=是) + * @param startLon 起点经度 + * @param startLat 起点纬度 + * @param startAddress 起点详细地址 + * @param endLon 终点经度 + * @param endLat 终点纬度 + * @param endAddress 终点详细地址 + * @param name 乘客姓名 + * @param phone 乘客电话 + * @return + * @throws Exception + */ + @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 { + BaseWarpper baseWarpper = new BaseWarpper(); + if (lock.tryLock()) { + try { + //如果出行时间大于当前10分钟则默认为预约单 + if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) { + reservation = 2; + } + /** + * 1.出租车、专车、跨城有待支付的订单不能叫车 + * 2.小件物流有未完成的订单可以下跨城、专车、出租车 + * 3.出租车、专车、跨城有预约单可以下即时单 + */ + List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, null, 1, 7, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, null, 1, 7, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 7, 12); + if (orderCrossCities1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + if (reservation == 1) { + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + } + + List<OrderPrivateCar> orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, null, 3, 7, 12); + if (orderPrivateCars1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list1 = orderTaxiMapper.queryByState_(uid, null, 3, 7, 12); + if (list1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities11 = orderCrossCityMapper.queryByState(uid, 7, 12); + if (orderCrossCities11.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + if (reservation == 1) { + orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + list1 = orderTaxiMapper.queryByState_(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + } + + + startAddress = startAddress.replaceAll("& #40;", "("); + startAddress = startAddress.replaceAll("& #41;", ")"); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + if ((orderSource == 1 || orderSource == 3) && null == serverCarModelId) { + return ResultUtil.error("请选择服务车型"); + } + + OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); + orderPrivateCar.setPeopleNum(peopleNum); + orderPrivateCar.setRideType(rideType); + orderPrivateCar.setType(type); + orderPrivateCar.setUserId(uid); + orderPrivateCar.setServerCarModelId(serverCarModelId); + orderPrivateCar.setOrderNum(this.getOrderNum()); + orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); + orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); + Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); + orderPrivateCar.setPlacementAddress(geocode.get("address")); + 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.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 (instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())) { + UserInfo userInfo = userInfoService.selectById(uid); + if (ToolUtil.isEmpty(userInfo.getPhone())) { + return ResultUtil.error("请先绑定手机号码"); + } + orderPrivateCar.setPassengers(userInfo.getName()); + orderPrivateCar.setPassengersPhone(userInfo.getPhone()); + } + orderPrivateCar.setState(1); + orderPrivateCar.setInsertTime(new Date()); + orderPrivateCar.setTravelTime(travelTime); + orderPrivateCar.setOrderType(reservation); + orderPrivateCar.setOrderSource(orderSource); + if (orderSource == 2) {//扫码下单 + Driver driver = driverService.selectById(driverId); + if (null == driver) { + return ResultUtil.error("司机信息有误,无法完成下单"); + } + if (driver.getAuthState() == 1) { + return ResultUtil.error("司机信息还未完成审核,无法完成下单"); + } + if (driver.getAuthState() == 3) { + return ResultUtil.error("司机账户已被冻结,无法提供服务"); + } + if (driver.getAuthState() == 4) { + return ResultUtil.error("司机信息未通过审核,无法提供服务"); + } + if (driver.getState() == 1) { + return ResultUtil.error("司机还未上线,无法提供服务"); + } + if (driver.getState() == 3) { + return ResultUtil.error("司机正在服务中,无法提供服务"); + } + // Integer orderType = orderPrivateCar.getRideType()==1?1:orderPrivateCar.getRideType()==2?9:8; + Integer orderType = 1; + Integer integer = driverServiceService.query_(driverId, orderType); + if (null == integer) { + return ResultUtil.error("该司机不能服务此业务"); + } + + orderPrivateCar.setDriverId(driverId); + orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( + driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); + orderPrivateCar.setState(2); + orderPrivateCar.setCarId(driver.getCarId()); + CarService query1 = carServiceMapper.query(1, driver.getCarId()); + orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); + orderPrivateCar.setSnatchOrderTime(new Date()); + + // //调用高德创建轨迹 + // String s = gdFalconUtil.selectTerminal(driver.getPhone()); + // String track = gdFalconUtil.createTrack(s); + // orderPrivateCar.setTrackId(track); + // + //调用移动的小号接口 +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if (String.valueOf(map.get("code")).equals("200")) { +// orderPrivateCar.setTelX(map.get("telX")); +// orderPrivateCar.setBindId(map.get("bindId")); +// } + + driver.setState(3); + driverService.updateById(driver); + } + //判断独享,一口价,拼车 + if (orderPrivateCar.getRideType() != 3) { + orderPrivateCar.setTotalPeopleNum(peopleNum); + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + this.insert(orderPrivateCar); + + if (orderSource == 2) {//扫码下单 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); + } + }).start(); + } + + //推单操作-独享 + if (orderPrivateCar.getState() == 1) { + this.pushOrder(orderPrivateCar); + } + } else { + OrderPrivateCar orderPrivateCar1 = null; + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 + List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - peopleNum)); + for (OrderPrivateCar order : orderList) { + + TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); + if (spellOrderRule != null) { + JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); + //判断时间 + + 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 已改成计算直线距离 + 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"); + //判断距离 + if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) { + orderPrivateCar1 = order; + break; + } + } + } + } + if (orderPrivateCar1 == null) { + orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - peopleNum)); + for (OrderPrivateCar order : orderList) { + TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); + if (spellOrderRule != null) { + JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); + //判断时间 + if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { + String value = (String) redisTemplate.opsForValue().get("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 已改成计算直线距离 + 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"); + //判断距离 + if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) { + orderPrivateCar1 = order; + break; + } + } + } + } + } + if (orderPrivateCar1 == null) { + orderPrivateCar.setTotalPeopleNum(peopleNum); + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + this.insert(orderPrivateCar); + this.pushOrder(orderPrivateCar); + } else { + Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); + orderPrivateCar.setDriverId(driverId); + orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( + driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); + orderPrivateCar.setState(2); + orderPrivateCar.setDriverId(driver.getId()); + orderPrivateCar.setCarId(driver.getCarId()); + CarService query1 = carServiceMapper.query(1, driver.getCarId()); + orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); + orderPrivateCar.setSnatchOrderTime(new Date()); + orderPrivateCar.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); + this.insert(orderPrivateCar); + //修改总订单人数 + OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); + orderPrivateCar2.setSpellSuccess(1); + orderPrivateCar2.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); + // + //调用移动的小号接口 +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if (String.valueOf(map.get("code")).equals("200")) { +// orderPrivateCar.setTelX(map.get("telX")); +// orderPrivateCar.setBindId(map.get("bindId")); +// } + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); + + } + }).start(); + List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid())); + for (OrderPrivateCar orderPrivateCar3 : orderList1) { + pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); + } + OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); + pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); + } + + } + + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); + baseWarpper.setId(orderPrivateCar.getId()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + lock.unlock(); + } + } else { + return ResultUtil.error("系统繁忙,请稍后再试!"); + } + return ResultUtil.success(baseWarpper); + } + + /** + * 批量订单 + * + * @throws Exception + */ + @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 { + BaseWarpper baseWarpper = new BaseWarpper(); + String key = "saveOrderPrivateCar:" + uid; + Boolean hasKey = redisTemplate.hasKey(key); + if (!hasKey) { + redisTemplate.opsForValue().set(key, uid, 30, TimeUnit.SECONDS); + try { + //如果出行时间大于当前10分钟则默认为预约单 + if (travelTime.getTime() > (System.currentTimeMillis() + 600000)) { + reservation = 2; + } + + /** + * 1.出租车、专车、跨城有待支付的订单不能叫车 + * 2.小件物流有未完成的订单可以下跨城、专车、出租车 + * 3.出租车、专车、跨城有预约单可以下即时单 + */ + List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, null, 1, 7, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, null, 1, 7, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 7, 12); + if (orderCrossCities1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + if (reservation == 1) { + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + } + + + List<OrderPrivateCar> orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, null, 3, 7, 12); + if (orderPrivateCars1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list1 = orderTaxiMapper.queryByState_(uid, null, 3, 7, 12); + if (list1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities11 = orderCrossCityMapper.queryByState(uid, 7, 12); + if (orderCrossCities11.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + if (reservation == 1) { + orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + list1 = orderTaxiMapper.queryByState_(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + } + + startAddress = startAddress.replaceAll("& #40;", "("); + startAddress = startAddress.replaceAll("& #41;", ")"); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + if (ToolUtil.isEmpty(serverCarModel)) { + return ResultUtil.error("请选择服务车型"); + } + + OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); + orderPrivateCar.setPeopleNum(peopleNum); + orderPrivateCar.setType(3); + orderPrivateCar.setUserId(uid); + orderPrivateCar.setServerCarModel(serverCarModel); + orderPrivateCar.setOrderNum(this.getOrderNum()); + orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); + orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); + Map<String, String> geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); + orderPrivateCar.setPlacementAddress(geocode.get("address")); + 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.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 (instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())) { + UserInfo userInfo = userInfoService.selectById(uid); + if (ToolUtil.isEmpty(userInfo.getPhone())) { + return ResultUtil.error("请先绑定手机号码"); + } + orderPrivateCar.setPassengers(userInfo.getName()); + orderPrivateCar.setPassengersPhone(userInfo.getPhone()); + } + orderPrivateCar.setState(1); + orderPrivateCar.setInsertTime(new Date()); + orderPrivateCar.setTravelTime(travelTime); + orderPrivateCar.setOrderType(reservation); + orderPrivateCar.setOrderSource(orderSource); + orderPrivateCar.setTotalPeopleNum(peopleNum); + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + this.insert(orderPrivateCar); + + //判断独享,一口价,拼车 + JSONArray jsonArray = JSON.parseArray(serverCarModel); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject1 = jsonArray.getJSONObject(i); + Integer serverCarModelId = jsonObject1.getInteger("serverCarModelId"); + Integer rideType = jsonObject1.getInteger("rideType"); + if (0 == serverCarModelId) { + OrderTaxi orderTaxi = new OrderTaxi(); + orderTaxi.setId(orderPrivateCar.getId()); + orderTaxi.setState(1); + orderTaxi.setUserId(orderPrivateCar.getUserId()); + orderTaxi.setStartLon(orderPrivateCar.getStartLon()); + orderTaxi.setStartLat(orderPrivateCar.getStartLat()); + orderTaxiService.pushOrder(orderTaxi, 3); + } + + if (rideType != 3) { + //推单操作-独享 + this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); + } else { + OrderPrivateCar orderPrivateCar1 = null; + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 + List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - peopleNum)); + for (OrderPrivateCar order : orderList) { + TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); + if (spellOrderRule != null) { + JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); + //判断时间 + + 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 已改成计算直线距离 + 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"); + //判断距离 + if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) { + orderPrivateCar1 = order; + break; + } + } + } + } + if (orderPrivateCar1 == null) { + orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - peopleNum)); + for (OrderPrivateCar order : orderList) { + TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); + if (spellOrderRule != null) { + JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); + //判断时间 + if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { + String value = (String) redisTemplate.opsForValue().get("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 已改成计算直线距离 + 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"); + //判断距离 + if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) { + orderPrivateCar1 = order; + break; + } + } + } + } + } + if (orderPrivateCar1 == null) { + this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); + } else { + Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); + orderPrivateCar.setDriverId(driverId); + orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( + driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); + orderPrivateCar.setState(2); + orderPrivateCar.setDriverId(driver.getId()); + orderPrivateCar.setCarId(driver.getCarId()); + CarService query1 = carServiceMapper.query(1, driver.getCarId()); + orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); + orderPrivateCar.setRideType(3); + orderPrivateCar.setSnatchOrderTime(new Date()); + orderPrivateCar.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); + this.insertOrUpdate(orderPrivateCar); + //修改总订单人数 + OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); + orderPrivateCar2.setSpellSuccess(1); + orderPrivateCar2.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); + // + //调用移动的小号接口 +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if (String.valueOf(map.get("code")).equals("200")) { +// orderPrivateCar.setTelX(map.get("telX")); +// orderPrivateCar.setBindId(map.get("bindId")); +// } + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); + + } + }).start(); + List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid())); + for (OrderPrivateCar orderPrivateCar3 : orderList1) { + pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); + } + OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); + pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); + } + } + } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); + + baseWarpper.setId(orderPrivateCar.getId()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + redisTemplate.delete(key); + } + } else { + return ResultUtil.error("系统繁忙,请稍后再试!"); + } + return ResultUtil.success(baseWarpper); + } + + /** + * 下单后继续等待 + * + * @param id + * @return + * @throws Exception + */ + @Override + public ResultUtil pushOrderPrivateCar(Integer id) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(id); + if (null == orderPrivateCar) { + return ResultUtil.error("推送订单失败,订单信息有误"); + } + if (orderPrivateCar.getState() != 1) { + return ResultUtil.error("订单已被司机接单,不能重复推送"); + } + //处理摆渡订单的继续推单操作 + if (orderPrivateCar.getType() == 2) { + OrderCrossCityServiceImpl.pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), false);//还原标识数据 + List<OrderPrivateCar> list = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); + List<Map<String, Integer>> orders = new ArrayList<>(); + for (OrderPrivateCar orderPrivateCar1 : list) { + if (orderPrivateCar1.getState() != 1) { + return ResultUtil.error("订单已被司机接单,推单取消"); + } + Map<String, Integer> map = new HashMap<>(); + map.put("orderType", 1); + map.put("orderId", orderPrivateCar1.getId()); + orders.add(map); + } + List<OrderTaxi> list1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); + for (OrderTaxi orderTaxi : list1) { + if (orderTaxi.getState() != 1) { + return ResultUtil.error("订单已被司机接单,推单取消"); + } + Map<String, Integer> map = new HashMap<>(); + map.put("orderType", 2); + map.put("orderId", orderTaxi.getId()); + orders.add(map); + } + //开始重新推单 + orderCrossCityService.pushOrder(orders); + + } else { + //判断独享,一口价,拼车 + if (orderPrivateCar.getRideType() != 3) { + this.pushOrder(orderPrivateCar); + } else { + OrderPrivateCar orderPrivateCar1 = null; + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 + List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - orderPrivateCar.getPeopleNum())); + for (OrderPrivateCar order : orderList) { + TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); + if (spellOrderRule != null) { + JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); + //判断时间 + 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 已改成计算直线距离 - 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"); - //判断距离 - if(dis1<=jsonObject.getInteger("num1")*1000 && dis2<=jsonObject.getInteger("num2")*1000){ - orderPrivateCar1=orderPrivateCar; - break; - } - } - } - } - if(orderPrivateCar1==null){ - orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType",3).eq("state",5).le("totalPeopleNum",4-orderPrivateCar.getPeopleNum())); - for(OrderPrivateCar order:orderList){ - TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("companyId",order.getCompanyId())); - if(spellOrderRule!=null){ - JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); - //判断时间 - if(orderPrivateCar.getTravelTime().getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && orderPrivateCar.getTravelTime().getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){ - String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(order.getDriverId())); + // TODO: 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"); + //判断距离 + if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) { + orderPrivateCar1 = orderPrivateCar; + break; + } + } + } + } + if (orderPrivateCar1 == null) { + orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - orderPrivateCar.getPeopleNum())); + for (OrderPrivateCar order : orderList) { + TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); + if (spellOrderRule != null) { + JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); + //判断时间 + if (orderPrivateCar.getTravelTime().getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && orderPrivateCar.getTravelTime().getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { + String value = (String) redisTemplate.opsForValue().get("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 已改成计算直线距离 - 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"); - //判断距离 - if(dis1<=jsonObject.getInteger("num3")*1000 && dis2<=jsonObject.getInteger("num4")*1000){ - orderPrivateCar1=order; - break; - } - } - } - } - } - if(orderPrivateCar1==null){ - this.pushOrder(orderPrivateCar); - }else{ - Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); - orderPrivateCar.setDriverId(orderPrivateCar1.getDriverId()); - orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( - driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); - orderPrivateCar.setState(2); - orderPrivateCar.setCarId(driver.getCarId()); - orderPrivateCar.setDriverId(driver.getId()); - CarService query1 = carServiceMapper.query(1, driver.getCarId()); - orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); - orderPrivateCar.setSnatchOrderTime(new Date()); - - orderPrivateCar.setTotalPeopleNum(orderPrivateCar.getPeopleNum()+orderPrivateCar1.getTotalPeopleNum()); - orderPrivateCar.setPid(orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()); - orderPrivateCar.setIsReassign(1); - orderPrivateCar.setIsDelete(1); - this.updateById(orderPrivateCar); - //修改总订单人数 - OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); - orderPrivateCar2.setTotalPeopleNum(orderPrivateCar.getPeopleNum()+orderPrivateCar1.getTotalPeopleNum()); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6)); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar1.getPid()==null?orderPrivateCar1.getId():orderPrivateCar1.getPid()).lt("state",6)); - //调用移动的小号接口 - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderPrivateCar.setTelX(map.get("telX")); - orderPrivateCar.setBindId(map.get("bindId")); - } - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2, 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); - pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); - } - }).start(); - List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid())); - for(OrderPrivateCar orderPrivateCar3:orderList1){ - pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); - } - OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); - pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); - } - } - - } - return ResultUtil.success(); - } - - @Override - public ResultUtil<BaseWarpper> queryCancleAmount(Integer id) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(id); - if(null == orderPrivateCar){ - return ResultUtil.error("获取数据失败,订单信息有误"); - } - double amount = 0; - CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); - if(null != orderPrivateCar.getDriverId() && - (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况 - if(null != query){ - amount += query.getMoney(); - } - } - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setAmount(amount); - return ResultUtil.success(baseWarpper); - } - - @Override - public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { - if(ToolUtil.isNotEmpty(remark)){ - if(ToolUtil.isNotEmpty(remark)){ - List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); - for(SensitiveWords s : sensitiveWords){ - remark = remark.replaceAll(s.getContent(), "***"); - } - } - } - - OrderPrivateCar orderPrivateCar = this.selectById(id); - Integer integer = null; - if(null == orderPrivateCar){ - return ResultUtil.error("取消订单失败,订单信息有误"); - } + // TODO: 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"); + //判断距离 + if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) { + orderPrivateCar1 = order; + break; + } + } + } + } + } + if (orderPrivateCar1 == null) { + this.pushOrder(orderPrivateCar); + } else { + Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); + orderPrivateCar.setDriverId(orderPrivateCar1.getDriverId()); + orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( + driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); + orderPrivateCar.setState(2); + orderPrivateCar.setCarId(driver.getCarId()); + orderPrivateCar.setDriverId(driver.getId()); + CarService query1 = carServiceMapper.query(1, driver.getCarId()); + orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); + orderPrivateCar.setSnatchOrderTime(new Date()); + + orderPrivateCar.setTotalPeopleNum(orderPrivateCar.getPeopleNum() + orderPrivateCar1.getTotalPeopleNum()); + orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); + orderPrivateCar.setIsReassign(1); + orderPrivateCar.setIsDelete(1); + this.updateById(orderPrivateCar); + //修改总订单人数 + OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); + orderPrivateCar2.setTotalPeopleNum(orderPrivateCar.getPeopleNum() + orderPrivateCar1.getTotalPeopleNum()); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); + //调用移动的小号接口 +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if (String.valueOf(map.get("code")).equals("200")) { +// orderPrivateCar.setTelX(map.get("telX")); +// orderPrivateCar.setBindId(map.get("bindId")); +// } + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2, 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); + pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); + } + }).start(); + List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid())); + for (OrderPrivateCar orderPrivateCar3 : orderList1) { + pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); + } + OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); + pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); + } + } + + } + return ResultUtil.success(); + } + + @Override + public ResultUtil<BaseWarpper> queryCancleAmount(Integer id) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(id); + if (null == orderPrivateCar) { + return ResultUtil.error("获取数据失败,订单信息有误"); + } + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + double amount = 0; + CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, openCity.getId()); + if (null != orderPrivateCar.getDriverId() && + (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()) {//收费的情况 + if (null != query) { + amount += query.getMoney(); + } + } + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); + } + + @Override + public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { + if (ToolUtil.isNotEmpty(remark)) { + if (ToolUtil.isNotEmpty(remark)) { + List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); + for (SensitiveWords s : sensitiveWords) { + remark = remark.replaceAll(s.getContent(), "***"); + } + } + } + + OrderPrivateCar orderPrivateCar = this.selectById(id); + Integer integer = null; + if (null == orderPrivateCar) { + return ResultUtil.error("取消订单失败,订单信息有误"); + } // if(orderPrivateCar.getState() == 4){ // return ResultUtil.error("司机已到达预约点,取消会产生一定的费用"); // } - if(orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11){ - return ResultUtil.error("取消订单失败,不合法的操作"); - } - Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6)); - Integer number2 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6)); - if(number1+number2==1){ - OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); - orderPrivateCar2.setTotalPeopleNum(orderPrivateCar.getTotalPeopleNum()-orderPrivateCar.getPeopleNum()); - orderPrivateCar2.setSpellSuccess(0); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6)); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6)); - - }else{ - OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); - orderPrivateCar2.setTotalPeopleNum(orderPrivateCar.getTotalPeopleNum()-orderPrivateCar.getPeopleNum()); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("pid",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6)); - this.update(orderPrivateCar2,new EntityWrapper<OrderPrivateCar>().eq("id",orderPrivateCar.getPid()==null?orderPrivateCar.getId():orderPrivateCar.getPid()).lt("state",6)); - } - if(null == orderPrivateCar.getDriverId()){//没有接单的情况 - if(orderPrivateCar.getType() == 2){//摆渡车 - OrderCrossCityServiceImpl.pushEndMap.remove(orderPrivateCar.getCrossCityOrderId());//删除标识数据 - List<OrderPrivateCar> list = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); - for(OrderPrivateCar orderPrivateCar1 : list){ - orderCancelService.saveData(orderPrivateCar1.getId(), 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); - orderPrivateCar1.setState(10); - this.updateById(orderPrivateCar1); - } - List<OrderTaxi> list1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); - for(OrderTaxi orderTaxi : list1){ - orderCancelService.saveData(orderTaxi.getId(), 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); - orderTaxi.setState(10); - orderTaxiService.updateById(orderTaxi); - } - }else{ - integer = orderCancelService.saveData(id, 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); - orderPrivateCar.setState(10); - this.updateById(orderPrivateCar); - } - }else { - CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); - if (null != query) { - if ((orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况 - orderPrivateCar.setState(12); - this.updateById(orderPrivateCar); - integer = orderCancelService.saveData(id, 1, reason, remark, null, query.getMoney(), 1, 1, uid); - } else { - integer = orderCancelService.saveData(id, 1, reason, remark, null, null, 2, 1, uid); - - orderPrivateCar.setState(10); - this.updateById(orderPrivateCar); - } - this.deleteTask(id);//删除定时任务 - - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - System.err.println("推送取消操作---------------------"); - } - }).start(); - - //修改司机为空闲 - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setState(2); - driverService.updateById(driver); - - // 解绑手机 - - //解除小号绑定 - if(orderPrivateCar.getBindId() != null){ - Map<String, String> map = chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 86400000)); - } - }else{ - return ResultUtil.error("请完善后台取消规则设置"); - } - - } - - new Thread(new Runnable() { - @Override - public void run() { - if(pushMinistryOfTransport){ - //上传数据 - pushMinistryOfTransportUtil.orderCancel(orderPrivateCar.getId()); - } - } - }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderPrivateCar.getUserId(), 1); - Map<String, Object> map = new HashMap<>(); - map.put("id", integer); - return ResultUtil.success(map); - } - - - /** - * 取消订单操作 - * @param id - * @return - * @throws Exception - */ - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(id); - Integer uid = orderPrivateCar.getUserId(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - - if(null == orderPrivateCar){ - return ResultUtil.error("取消订单失败,订单信息有误", ""); - } - if(orderPrivateCar.getState() != 12){ - return ResultUtil.error("取消订单失败,不合法的操作", ""); - } - OrderCancel orderCancel = null; - if(null == cancleId){ - orderCancel = orderCancelService.query(id, 1, null, null, 1); - }else{ - orderCancel = orderCancelService.selectById(cancleId); - } - - CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); - if(null != query){ - if(payType == 1){//微信支付 - String value = (String) redisTemplate.opsForValue().get("appletOpenId"); - String appletsOpenId = null; - if(ToolUtil.isNotEmpty(value)){ - JSONObject jsonObject = JSON.parseObject(value); - appletsOpenId = jsonObject.getString(uid.toString()); - }else{ - appletsOpenId = userInfo.getAppletsOpenId(); - } - orderCancel.setPayType(1); - orderCancelService.updateById(orderCancel); - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - orderCancel.setPayType(2); - orderCancelService.updateById(orderCancel); - - resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); - paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 2, query.getMoney(), "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if (userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()) { - return ResultUtil.error("余额不足,无法完成支付"); - } + if (orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11) { + return ResultUtil.error("取消订单失败,不合法的操作"); + } + Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); + Integer number2 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); + if (number1 + number2 == 1) { + OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); + orderPrivateCar2.setTotalPeopleNum(orderPrivateCar.getTotalPeopleNum() - orderPrivateCar.getPeopleNum()); + orderPrivateCar2.setSpellSuccess(0); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); + + } else { + OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); + orderPrivateCar2.setTotalPeopleNum(orderPrivateCar.getTotalPeopleNum() - orderPrivateCar.getPeopleNum()); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); + this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); + } + if (null == orderPrivateCar.getDriverId()) {//没有接单的情况 + if (orderPrivateCar.getType() == 2) {//摆渡车 + OrderCrossCityServiceImpl.pushEndMap.remove(orderPrivateCar.getCrossCityOrderId());//删除标识数据 + List<OrderPrivateCar> list = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); + for (OrderPrivateCar orderPrivateCar1 : list) { + orderCancelService.saveData(orderPrivateCar1.getId(), 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); + orderPrivateCar1.setState(10); + this.updateById(orderPrivateCar1); + } + List<OrderTaxi> list1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); + for (OrderTaxi orderTaxi : list1) { + orderCancelService.saveData(orderTaxi.getId(), 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); + orderTaxi.setState(10); + orderTaxiService.updateById(orderTaxi); + } + } else { + integer = orderCancelService.saveData(id, 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); + orderPrivateCar.setState(10); + this.updateById(orderPrivateCar); + } + } else { + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, openCity.getId()); + if (null != query) { + if ((orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况 + orderPrivateCar.setState(12); + this.updateById(orderPrivateCar); + integer = orderCancelService.saveData(id, 1, reason, remark, null, query.getMoney(), 1, 1, uid); + } else { + integer = orderCancelService.saveData(id, 1, reason, remark, null, null, 2, 1, uid); + + orderPrivateCar.setState(10); + this.updateById(orderPrivateCar); + } + this.deleteTask(id);//删除定时任务 + + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + System.err.println("推送取消操作---------------------"); + } + }).start(); + + //修改司机为空闲 + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setState(2); + driverService.updateById(driver); + + // 解绑手机 + + //解除小号绑定 + if (orderPrivateCar.getBindId() != null) { + Map<String, String> map = chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 86400000)); + } + } else { + return ResultUtil.error("请完善后台取消规则设置"); + } + + } + + new Thread(new Runnable() { + @Override + public void run() { + if (pushMinistryOfTransport) { + //上传数据 + pushMinistryOfTransportUtil.orderCancel(orderPrivateCar.getId()); + } + } + }).start(); + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderPrivateCar.getUserId(), 1); + Map<String, Object> map = new HashMap<>(); + map.put("id", integer); + return ResultUtil.success(map); + } + + /** + * 取消订单操作 + * + * @param id + * @return + * @throws Exception + */ + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(id); + Integer uid = orderPrivateCar.getUserId(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + + if (null == orderPrivateCar) { + return ResultUtil.error("取消订单失败,订单信息有误", ""); + } + if (orderPrivateCar.getState() != 12) { + return ResultUtil.error("取消订单失败,不合法的操作", ""); + } + OrderCancel orderCancel = null; + if (null == cancleId) { + orderCancel = orderCancelService.query(id, 1, null, null, 1); + } else { + orderCancel = orderCancelService.selectById(cancleId); + } + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, openCity.getId()); + if (null != query) { + if (payType == 1) {//微信支付 + String value = (String) redisTemplate.opsForValue().get("appletOpenId"); + String appletsOpenId = null; + if (ToolUtil.isNotEmpty(value)) { + JSONObject jsonObject = JSON.parseObject(value); + appletsOpenId = jsonObject.getString(uid.toString()); + } else { + appletsOpenId = userInfo.getAppletsOpenId(); + } + orderCancel.setPayType(1); + orderCancelService.updateById(orderCancel); + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + orderCancel.setPayType(2); + orderCancelService.updateById(orderCancel); + + resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); + paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 2, query.getMoney(), "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()) { + return ResultUtil.error("余额不足,无法完成支付"); + } // resultUtil= appOrderController.moneyPay(id,userInfo.getId(),query.getMoney()); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - //添加交易明细 - transactionDetailsService.saveData(uid, "快车取消订单", query.getMoney(), 2, 1, 1, 1, id); - userInfoService.updateById(userInfo); - - //解除小号绑定 - if (orderPrivateCar.getBindId() != null) { - chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000)); - } - - orderPrivateCar.setState(10); - orderPrivateCar.setTelX(""); - orderPrivateCar.setBindId(""); - this.updateById(orderPrivateCar); - - orderCancel.setState(2); - orderCancel.setPayType(3); - orderCancelService.updateById(orderCancel); - - //添加已收入明细 - incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney()); - - this.deleteTask(id);//删除定时任务 - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); - - }else if(payType == 4){ - Double payMoney = orderPrivateCar.getOrderMoney(); - Integer integer = paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 4, query.getMoney(), "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(query.getMoney()), 4,id,1,integer); - - } - } - return resultUtil; - } - - @Override - public Map<String, Object> queryOrderInfo(Integer uid, Integer orderId) throws Exception { - Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId); - if(null == map){ - OrderTaxi orderTaxi = orderTaxiService.selectOne(new EntityWrapper<OrderTaxi>() - .eq("userId", uid) - .eq("isDelete", 1) - .in("state", Arrays.asList(2, 3, 4, 5, 6, 7)) - ); - return orderTaxiService.queryOrderInfo(orderTaxi.getId()); - } - if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - orderPrivateCar.setReassignNotice(0); - this.updateById(orderPrivateCar); - } - if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ - map.put("state", map.get("oldState")); - } - if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){ - map.put("redPacketMoney", null); - map.put("couponMoney", null); - } - - String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId")); - map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); - map.put("orderType", 1); - return map; - } - - /** - * 获取服务中的订单数据 - * @param uid - * @return - * @throws Exception - */ - @Override - public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - if(null == orderPrivateCar){ - return orderTaxiService.queryOrderServer(orderId, uid); - } - //计算预计距离和剩余时间 - String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); - if(null == value || "".equals(value)){ - System.err.println("司机没有上传位置信息"); - - //调用获取轨迹中的数据 - List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2); - if(list.size() > 0){ - Map<String, Object> map = list.get(list.size() - 1); - value = map.get("lon") + "," + map.get("lat"); - } - - } - - OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); - orderServerWarpper.setOrderId(orderPrivateCar.getId()); - orderServerWarpper.setOrderType(1); - orderServerWarpper.setState(orderPrivateCar.getState()); - orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); - orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); - orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice()); - if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地 - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1); - String d = "0"; - String t = "0"; - if(null == distance){ - System.err.println("查询距离出错了"); - }else{ - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; - } - orderServerWarpper.setReservationMileage(d); - orderServerWarpper.setReservationTime(t); - orderServerWarpper.setServedMileage("0"); - orderServerWarpper.setServedTime("0"); - orderServerWarpper.setLaveMileage("0"); - orderServerWarpper.setLaveTime("0"); - } - if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中 - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1); - String d = "0"; - String t = "0"; - if(null == distance){ - System.err.println("查询距离出错了"); - }else{ - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; - } - orderServerWarpper.setReservationMileage("0"); - orderServerWarpper.setReservationTime("0"); - orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000)); - orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + ""); - orderServerWarpper.setLaveMileage(d); - orderServerWarpper.setLaveTime(t); - } - - return orderServerWarpper; - } - - - - - - @Override - public synchronized String getOrderNum() throws Exception{ - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - return "PR" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5); - } - - /** - * 删除定时任务 - * @param orderId - */ - @Override - public void deleteTask(Integer orderId){ - //发送验证码短信 - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("orderId", orderId + ""); - params.add("orderType", "1"); - HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用driver-server出错了"); - } - } - - @Override - public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { - Map<String, Object> map = new HashMap<>(); - UserInfo userInfo = userInfoService.selectById(uid); - map.put("balance", userInfo.getBalance()); - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - int i = userCouponRecordService.queryAvailable(uid, orderPrivateCar.getCompanyId(), 1, 1, orderPrivateCar.getOrderMoney()); - i = i + userCouponRecordService.queryAvailable(uid, orderPrivateCar.getCompanyId(), 1, 0, orderPrivateCar.getOrderMoney()); - map.put("coupon", i); - return map; - } - - @Override - public PreferentialDataVo queryBalance1(Integer orderId, Integer uid) throws Exception { - UserInfo userInfo = userInfoService.selectById(uid); - PreferentialDataVo preferentialDataVo = new PreferentialDataVo(); - preferentialDataVo.setBalance(userInfo.getBalance()); - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - Integer ids = userInfoService.getDiscount(); - if(ids!=null){ - List<UserActivityDiscount1> userActivityId = userActivityDiscount1Mapper.selectList(new EntityWrapper<UserActivityDiscount1>().eq("userActivityId", ids)); - if(userActivityId.size()>0){ - - preferentialDataVo.setDiscount(userActivityId.get(0).getSpecial()); - } - } - // 查出当前用户的红包 并将订单的修改 - List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).gt("expirationTime", new Date()).gt("endTime", new Date())); - if(userRedPacketRecords.size()>0){ - - preferentialDataVo.setRedPacket(userRedPacketRecords.get(0).getMoney()); - orderPrivateCar.setRedPacketId(userRedPacketRecords.get(0).getId()); - orderPrivateCar.setRedPacketMoney(userRedPacketRecords.get(0).getMoney()); - this.updateById(orderPrivateCar); - } - - - //获取优惠券中最优数据 - List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderPrivateCar.getCompanyId()).eq("state", 1).le("money",orderPrivateCar.getOrderMoney()).in("couponUseType", Arrays.asList(0, 1)).eq("userId", uid).where("now() < expirationTime")); - Integer id = null; - Double price = 0d; - Integer type = 0; - for (UserCouponRecord userCouponRecord : list){ - if(userCouponRecord.getCouponType() == 1){//抵扣券 - if(price.compareTo(userCouponRecord.getMoney()) < 0){ - price = userCouponRecord.getMoney(); - id = userCouponRecord.getId(); - type = 1; - } - }else{//满减券 - if(orderPrivateCar.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) >= 0 && price.compareTo(userCouponRecord.getMoney()) < 0){ - price = userCouponRecord.getMoney(); - id = userCouponRecord.getId(); - type = 1; - } - } - } - - //获取打车卡中最优数 - Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); - CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); - } - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); - } - List<UserTaxiCard> userTaxiCards =new ArrayList<>(); - if(companyCity!=null) { - userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().like("companyCityId", "%" + companyCity.getId() + "%") - .in("type", Arrays.asList(1, 2, 3, 4)).eq("userId", uid).where("now() between startTime and endTime")); - } - //全国卡 - List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards2); - } - //亲密账户中有相同的卡优先使用自己的 - // 因为比对中只有优惠金额最高的才会被替换,所以先查找自己的数据再查找亲密账户的数据 - Map<String, Object> map = getOptimalTaxiCards(orderPrivateCar, price, id, type, userTaxiCards); - price = Double.valueOf(map.get("price").toString()); - id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; - type = Integer.valueOf(map.get("type").toString()); - - //亲密账户 - List<UserTaxiCard> userTaxiCards_ = new ArrayList<>(); - List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); - CompanyCity finalCompanyCity = companyCity; - bindUserId.forEach(userUser -> { - if(finalCompanyCity!=null) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) - .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); - userTaxiCards_.addAll(userTaxiCards1); - } - - //全国卡 - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards_.addAll(userTaxiCards2); - } - }); - map = getOptimalTaxiCards(orderPrivateCar, price, id, type, userTaxiCards_); - price = Double.valueOf(map.get("price").toString()); - id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; - type = Integer.valueOf(map.get("type").toString()); - System.out.println(price); - System.out.println(orderPrivateCar.getOrderMoney()); - System.out.println(type); - - if(orderPrivateCar.getOrderMoney()!=null && price<=orderPrivateCar.getOrderMoney() || type==2){ - preferentialDataVo.setDiscountAmount(price); - preferentialDataVo.setType(type); - preferentialDataVo.setObjectId(id); - } - return preferentialDataVo; - } - - - /** - * 获取最优打车卡数据 - * @param orderPrivateCar - * @param price - * @param id - * @param type - * @param userTaxiCards - * @throws Exception - */ - public Map<String, Object> getOptimalTaxiCards(OrderPrivateCar orderPrivateCar, Double price, Integer id, Integer type, List<UserTaxiCard> userTaxiCards) throws Exception{ - Map<String, Object> map = new HashMap<>(); - for(UserTaxiCard t : userTaxiCards){ - JSONObject jsonObject = JSON.parseObject(t.getContent()); - List<Integer> integers = jsonObject.getJSONArray("businessTypes").toJavaList(Integer.class); - if(!integers.contains(1)){ - continue; - } - if(t.getType() == 1){//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discount = jsonObject.getDouble("discount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - double v = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - } - } - - } - if(t.getType() == 2){//优惠卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - for(int j = fullReduction.size() - 1; j >= 0; j--){ - JSONArray jsonArray = fullReduction.getJSONArray(j); - Double p = jsonArray.getDouble(0);//满金额 - Double y = jsonArray.getDouble(1);//优惠金额 - if(orderPrivateCar.getOrderMoney().compareTo(p) >= 0 && price.compareTo(y) < 0){ - price = y; - id = t.getId(); - type = 2; - } - } - } - } - } - if(t.getType() == 3){//次数卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"time":1,"discountAmount":10} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discountAmount = jsonObject.getDouble("discountAmount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - if(price.compareTo(discountAmount) < 0){ - price = discountAmount; - id = t.getId(); - type = 2; - } - } - } - } - if(t.getType() == 4){//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - Double discount = jsonObject.getDouble("discount");//折扣 - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - double v = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - } - } - } - } - map.put("price", price); - map.put("id", id); - map.put("type", type); - return map; - } - - - - - @Override - public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderPrivateCar.getCompanyId(), 1, 1, orderPrivateCar.getOrderMoney(), pageNum, size); - List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderPrivateCar.getCompanyId(), 1, 0, orderPrivateCar.getOrderMoney(), pageNum, size); - list.addAll(list1); - return list; - } - - @Override - public List<CouponsListVo> queryCouponList(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { - pageNum = (pageNum - 1) * size; - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - List<CouponsListVo> rows = new ArrayList<>(); - List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderPrivateCar.getCompanyId()) - .eq("state", 1).in("couponUseType", Arrays.asList(0, 1)).eq("userId", uid).where("expirationTime >= now()")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - for (UserCouponRecord userCouponRecord : list){ - if(userCouponRecord.getCouponType() == 2){//满减券 - if(orderPrivateCar.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) < 0){ - continue; - } - } - CouponsListVo couponsListVo = new CouponsListVo(); - couponsListVo.setId(userCouponRecord.getId()); - couponsListVo.setDataType(1); - couponsListVo.setMoney(userCouponRecord.getMoney()); - couponsListVo.setUserType(userCouponRecord.getCouponUseType()); - couponsListVo.setTime(sdf.format(userCouponRecord.getExpirationTime())); - couponsListVo.setType(userCouponRecord.getCouponType()); - couponsListVo.setFullMoney(userCouponRecord.getFullMoney()); - couponsListVo.setState(userCouponRecord.getState()); - Company company = companyService.selectById(userCouponRecord.getCompanyId()); - couponsListVo.setCompany(company.getName()); - rows.add(couponsListVo); - } - - Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); - CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); - } - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); - } - List<UserTaxiCard> userTaxiCards ; - if(companyCity!=null){ - userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).like("companyCityId", "%" + companyCity.getId() + "%").where("now() between startTime and endTime")); - }else { - userTaxiCards =new ArrayList<>(); - } - - //全国卡 - List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards1); - } - - - //亲密账户 - List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); - CompanyCity finalCompanyCity = companyCity; - bindUserId.forEach(userUser -> { - if(finalCompanyCity!=null) { - List<UserTaxiCard> taxiCardPayments1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) - .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); - userTaxiCards.addAll(taxiCardPayments1); - } - - //全国卡 - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards1); - } - }); - - for(UserTaxiCard t : userTaxiCards){ - try { - CouponsListVo couponsListVo = new CouponsListVo(); - couponsListVo.setId(t.getId()); - couponsListVo.setDataType(2); - couponsListVo.setUserType(1); - couponsListVo.setTime(sdf.format(t.getEndTime())); - couponsListVo.setState(1); - couponsListVo.setTaxiCardType(t.getType()); - Company company = companyService.selectById(t.getCompanyId()); - couponsListVo.setCompany(company.getName()); - couponsListVo.setName(taxiCardService.selectById(t.getTaxiCardId()).getName()); - - - JSONObject jsonObject = JSON.parseObject(t.getContent()); - JSONArray businessTypes = jsonObject.getJSONArray("businessTypes"); - if(!businessTypes.toJavaList(Integer.class).contains(1)){ - continue; - } - if(t.getType() == 1){//{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discount")); - couponsListVo.setType(1); - } - if(t.getType() == 2){//{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - b = true; - for(int i = fullReduction.size() - 1; i >= 0; i--){ - JSONArray jsonArray = fullReduction.getJSONArray(i); - Double m = jsonArray.getDouble(0); - Double j = jsonArray.getDouble(1); - if(orderPrivateCar.getOrderMoney().compareTo(m) >= 0){ - couponsListVo.setFullMoney(m); - couponsListVo.setMoney(j); - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setType(2); - } - if(t.getType() == 3){//{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setFullMoney(0D); - couponsListVo.setMoney(jsonObject.getDouble("discountAmount")); - couponsListVo.setType(2); - } - if(t.getType() == 4){//{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discount")); - couponsListVo.setType(1); - } - - - String str = ""; - TaxiCard taxiCard = taxiCardService.selectById(t.getTaxiCardId()); - if(taxiCard.getTaxiCardType() == 1){ - String[] split = taxiCard.getCompanyCityId().split(";"); - for(String c : split){ - CompanyCity companyCity1 = companyCityService.selectById(c); - if(ToolUtil.isNotEmpty(companyCity1.getAreaCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getAreaCode())); - str += region.getName() + ";"; - continue; - } - if(ToolUtil.isNotEmpty(companyCity1.getCityCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getCityCode())); - str += region.getName() + ";"; - continue; - } - if(ToolUtil.isNotEmpty(companyCity1.getProvinceCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getProvinceCode())); - str += region.getName() + ";"; - continue; - } - } - }else{ - str = "全国;"; - } - couponsListVo.setCity(str.substring(0, str.length() - 1)); - - - rows.add(couponsListVo); - }catch (Exception e){ - e.printStackTrace(); - } - } - Collections.sort(rows, new Comparator<CouponsListVo>() { - public int compare(CouponsListVo s1, CouponsListVo s2) { - return Integer.compare(s1.getId(), s2.getId()); - } - }); - - if(rows.size() >= (pageNum + 1) * size){ - rows = rows.subList(pageNum, pageNum + size); - }else if(pageNum < rows.size() && rows.size() < (pageNum + 1) * size){ - rows = rows.subList(pageNum, rows.size()); - }else{ - rows = new ArrayList<>(); - } - System.out.println(rows); - System.out.println(orderPrivateCar.getOrderMoney()); - rows = rows.stream().filter(e->e.getMoney()<=orderPrivateCar.getOrderMoney() || e.getDataType()==2).collect(Collectors.toList()); - System.out.println(rows); - return rows; - } - - @Override - public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){ - return ResultUtil.error("订单已完成支付,不允许重复支付", ""); - } - if(orderPrivateCar.getState() != 7){ - return ResultUtil.error("订单不在待支付状态,不允许支付", ""); - } - Integer uid = orderPrivateCar.getUserId(); - Double orderMoney = orderPrivateCar.getOrderMoney(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - orderPrivateCar.setCouponMoney(0D);//初始化历史数据 - orderPrivateCar.setCouponId(null); - - //计算优惠券 - UserCouponRecord userCouponRecord = null; - if(null != couponId){ - userCouponRecord = userCouponRecordService.selectById(couponId); - if(userCouponRecord.getCompanyId() != orderPrivateCar.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", ""); - } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", ""); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 1){ - return ResultUtil.error("优惠券不能用于此类型订单", ""); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - orderMoney = orderMoney - userCouponRecord.getMoney(); - orderPrivateCar.setCouponMoney(userCouponRecord.getMoney()); - orderPrivateCar.setCouponId(couponId); - } - - - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderPrivateCar.getCompanyId(), 1, 1, orderMoney); - if(null != query && query.getMoney().compareTo(orderMoney) < 0){ - orderMoney = orderMoney - query.getMoney(); - orderPrivateCar.setRedPacketMoney(query.getMoney()); - orderPrivateCar.setRedPacketId(query.getId()); - } - - //计算折扣 - UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderPrivateCar.getCompanyId()); - if(null != query2){ - Double special = query2.getSpecial(); - orderPrivateCar.setDiscount(special); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderPrivateCar.setDiscountMoney(orderMoney - v); - orderPrivateCar.setActivityId(query2.getId()); - orderMoney = v; - } - } - orderMoney = orderMoney < 0 ? 0 : orderMoney; - if(payType == 1){//微信支付 - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 2) {//支付宝支付 - resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); - paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ - return ResultUtil.error("余额不足,无法完成支付", ""); - } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId); - userInfoService.updateById(userInfo); - - orderPrivateCar.setState(8); - orderPrivateCar.setPayType(3); - orderPrivateCar.setPayMoney(orderMoney); - - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); - } - //添加收入 - Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney()); - orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - } - }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); - - new Thread(new Runnable() { - @Override - public void run() { - if(pushMinistryOfTransport){//上传数据 - pushMinistryOfTransportUtil.operatePay(orderId); - } - } - }).start(); - } - - this.updateAllColumnById(orderPrivateCar); - return resultUtil; - } - - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil payPrivateCarOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception { - - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){ - return ResultUtil.error("订单已完成支付,不允许重复支付", new ArrayList<>()); - } - if(orderPrivateCar.getState() != 7){ - return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>()); - } - Integer uid = orderPrivateCar.getUserId(); - Double orderMoney = orderPrivateCar.getOrderMoney(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - orderPrivateCar.setCouponMoney(0D);//初始化历史数据 - orderPrivateCar.setCouponId(null); - System.out.println("!!!"+orderMoney+"!!!!"); - //计算优惠券 - UserCouponRecord userCouponRecord = null; - if(null != objectId && objectType == 1){ - userCouponRecord = userCouponRecordService.selectById(objectId); - if(userCouponRecord.getCompanyId() != orderPrivateCar.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", new ArrayList<>()); - } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", new ArrayList<>()); - } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", new ArrayList<>()); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 1){ - return ResultUtil.error("优惠券不能用于此类型订单", new ArrayList<>()); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", new ArrayList<>()); - } - orderMoney = orderMoney - userCouponRecord.getMoney(); - orderPrivateCar.setCouponMoney(userCouponRecord.getMoney()); - orderPrivateCar.setCouponId(objectId); - System.out.println("!!!"+orderMoney+"!!!!"); - } - - //打车卡 - UserTaxiCard userTaxiCard = null; - if(null != objectId && objectType == 2){ - userTaxiCard = userTaxiCardService.selectById(objectId); - TaxiCard taxiCard = taxiCardService.selectById(userTaxiCard.getTaxiCardId()); - if(taxiCard.getTaxiCardType() == 1 && userTaxiCard.getCompanyId() != orderPrivateCar.getCompanyId()){ - return ResultUtil.error("打车卡不能用于此订单", new ArrayList<>()); - } - if(System.currentTimeMillis() > userTaxiCard.getEndTime().getTime()){ - return ResultUtil.error("打车卡已过期", new ArrayList<>()); - } - if(userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3){ - Integer time = JSON.parseObject(userTaxiCard.getContent()).getInteger("time"); - if(0 == time){ - return ResultUtil.error("打车卡已使用完", new ArrayList<>()); - } - } - List<Integer> integers = JSON.parseObject(userTaxiCard.getContent()).getJSONArray("businessTypes").toJavaList(Integer.class); - if(!integers.contains(1)){ - return ResultUtil.error("打车卡不能用于此类型订单", new ArrayList<>()); - } - - Double yh = 0D; - JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); - if(userTaxiCard.getType() == 1){//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discount = jsonObject.getDouble("discount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - break; - } - } - - } - if(userTaxiCard.getType() == 2){//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - for(int j = fullReduction.size() - 1; j >= 0; j--){ - JSONArray jsonArray = fullReduction.getJSONArray(j); - Double p = jsonArray.getDouble(0);//满金额 - if(orderPrivateCar.getOrderMoney().compareTo(p) >= 0){ - yh = jsonArray.getDouble(1);//优惠金额 - break; - } - } - } - } - - } - if(userTaxiCard.getType() == 3){//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = jsonObject.getDouble("discountAmount"); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - } - } - - } - if(userTaxiCard.getType() == 4){//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - Double discount = jsonObject.getDouble("discount");//折扣 - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - break; - } - } - } - - orderMoney = orderMoney - yh; - orderPrivateCar.setTaxiCardId(userTaxiCard.getTaxiCardId()); - orderPrivateCar.setUserTaxiCardId(objectId); - orderPrivateCar.setDiscountAmount(yh); - } - - System.out.println("!!!"+orderMoney+"!!!!"); - - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderPrivateCar.getCompanyId(), 1, 1, orderMoney); - if(null != query && query.getMoney().compareTo(orderMoney) < 0){ - orderMoney = orderMoney - query.getMoney(); - orderPrivateCar.setRedPacketMoney(query.getMoney()); - orderPrivateCar.setRedPacketId(query.getId()); - } - - System.out.println("!!!"+orderMoney+"!!!!"); - //计算折扣 - UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderPrivateCar.getCompanyId()); - if(null != query2){ - Double special = query2.getSpecial(); - orderPrivateCar.setDiscount(special); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderPrivateCar.setDiscountMoney(orderMoney - v); - orderPrivateCar.setActivityId(query2.getId()); - orderMoney = v; - } - } - orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue(); - System.out.println("!!!"+orderMoney+"!!!!"); - orderMoney = orderMoney < 0 ? 0 : orderMoney; - if(payType == 1){//微信支付 - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 2) {//支付宝支付 - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); - paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ - return ResultUtil.error("余额不足,无法完成支付"); - } + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + //添加交易明细 + transactionDetailsService.saveData(uid, "快车取消订单", query.getMoney(), 2, 1, 1, 1, id); + userInfoService.updateById(userInfo); + + //解除小号绑定 + if (orderPrivateCar.getBindId() != null) { + chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000)); + } + + orderPrivateCar.setState(10); + orderPrivateCar.setTelX(""); + orderPrivateCar.setBindId(""); + this.updateById(orderPrivateCar); + + orderCancel.setState(2); + orderCancel.setPayType(3); + orderCancelService.updateById(orderCancel); + + //添加已收入明细 + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney()); + + this.deleteTask(id);//删除定时任务 + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); + + } else if (payType == 4) { + Double payMoney = orderPrivateCar.getOrderMoney(); + Integer integer = paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 4, query.getMoney(), "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(query.getMoney()), 4, id, 1, integer); + + } + } + return resultUtil; + } + + @Override + public synchronized String getOrderNum() throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + return "PR" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5); + } + + /** + * 删除定时任务 + * + * @param orderId + */ + @Override + public void deleteTask(Integer orderId) { + //发送验证码短信 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("orderId", orderId + ""); + params.add("orderType", "1"); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); + JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); + if (jsonObject.getIntValue("code") != 200) { + System.err.println("调用driver-server出错了"); + } + } + + @Override + public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { + Map<String, Object> map = new HashMap<>(); + UserInfo userInfo = userInfoService.selectById(uid); + map.put("balance", userInfo.getBalance()); + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + int i = userCouponRecordService.queryAvailable(uid, orderPrivateCar.getCompanyId(), 1, 1, orderPrivateCar.getOrderMoney()); + i = i + userCouponRecordService.queryAvailable(uid, orderPrivateCar.getCompanyId(), 1, 0, orderPrivateCar.getOrderMoney()); + map.put("coupon", i); + return map; + } + + @Override + public PreferentialDataVo queryBalance1(Integer orderId, Integer uid) throws Exception { + UserInfo userInfo = userInfoService.selectById(uid); + PreferentialDataVo preferentialDataVo = new PreferentialDataVo(); + preferentialDataVo.setBalance(userInfo.getBalance()); + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + Integer ids = userInfoService.getDiscount(); + if (ids != null) { + List<UserActivityDiscount1> userActivityId = userActivityDiscount1Mapper.selectList(new EntityWrapper<UserActivityDiscount1>().eq("userActivityId", ids)); + if (userActivityId.size() > 0) { + + preferentialDataVo.setDiscount(userActivityId.get(0).getSpecial()); + } + } + // 查出当前用户的红包 并将订单的修改 + List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).gt("expirationTime", new Date()).gt("endTime", new Date())); + if (userRedPacketRecords.size() > 0) { + + preferentialDataVo.setRedPacket(userRedPacketRecords.get(0).getMoney()); + orderPrivateCar.setRedPacketId(userRedPacketRecords.get(0).getId()); + orderPrivateCar.setRedPacketMoney(userRedPacketRecords.get(0).getMoney()); + this.updateById(orderPrivateCar); + } + + + //获取优惠券中最优数据 + List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderPrivateCar.getCompanyId()).eq("state", 1).le("money", orderPrivateCar.getOrderMoney()).in("couponUseType", Arrays.asList(0, 1)).eq("userId", uid).where("now() < expirationTime")); + Integer id = null; + Double price = 0d; + Integer type = 0; + for (UserCouponRecord userCouponRecord : list) { + if (userCouponRecord.getCouponType() == 1) {//抵扣券 + if (price.compareTo(userCouponRecord.getMoney()) < 0) { + price = userCouponRecord.getMoney(); + id = userCouponRecord.getId(); + type = 1; + } + } else {//满减券 + if (orderPrivateCar.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) >= 0 && price.compareTo(userCouponRecord.getMoney()) < 0) { + price = userCouponRecord.getMoney(); + id = userCouponRecord.getId(); + type = 1; + } + } + } + + //获取打车卡中最优数 + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); + } + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); + } + List<UserTaxiCard> userTaxiCards = new ArrayList<>(); + if (companyCity != null) { + userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().like("companyCityId", "%" + companyCity.getId() + "%") + .in("type", Arrays.asList(1, 2, 3, 4)).eq("userId", uid).where("now() between startTime and endTime")); + } + //全国卡 + List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards2); + } + //亲密账户中有相同的卡优先使用自己的 + // 因为比对中只有优惠金额最高的才会被替换,所以先查找自己的数据再查找亲密账户的数据 + Map<String, Object> map = getOptimalTaxiCards(orderPrivateCar, price, id, type, userTaxiCards); + price = Double.valueOf(map.get("price").toString()); + id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; + type = Integer.valueOf(map.get("type").toString()); + + //亲密账户 + List<UserTaxiCard> userTaxiCards_ = new ArrayList<>(); + List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); + CompanyCity finalCompanyCity = companyCity; + bindUserId.forEach(userUser -> { + if (finalCompanyCity != null) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) + .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); + userTaxiCards_.addAll(userTaxiCards1); + } + + //全国卡 + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards_.addAll(userTaxiCards2); + } + }); + map = getOptimalTaxiCards(orderPrivateCar, price, id, type, userTaxiCards_); + price = Double.valueOf(map.get("price").toString()); + id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; + type = Integer.valueOf(map.get("type").toString()); + System.out.println(price); + System.out.println(orderPrivateCar.getOrderMoney()); + System.out.println(type); + + if (orderPrivateCar.getOrderMoney() != null && price <= orderPrivateCar.getOrderMoney() || type == 2) { + preferentialDataVo.setDiscountAmount(price); + preferentialDataVo.setType(type); + preferentialDataVo.setObjectId(id); + } + return preferentialDataVo; + } + + /** + * 获取最优打车卡数据 + * + * @param orderPrivateCar + * @param price + * @param id + * @param type + * @param userTaxiCards + * @throws Exception + */ + public Map<String, Object> getOptimalTaxiCards(OrderPrivateCar orderPrivateCar, Double price, Integer id, Integer type, List<UserTaxiCard> userTaxiCards) throws Exception { + Map<String, Object> map = new HashMap<>(); + for (UserTaxiCard t : userTaxiCards) { + JSONObject jsonObject = JSON.parseObject(t.getContent()); + List<Integer> integers = jsonObject.getJSONArray("businessTypes").toJavaList(Integer.class); + if (!integers.contains(1)) { + continue; + } + if (t.getType() == 1) {//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discount = jsonObject.getDouble("discount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + double v = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + } + } + + } + if (t.getType() == 2) {//优惠卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + for (int j = fullReduction.size() - 1; j >= 0; j--) { + JSONArray jsonArray = fullReduction.getJSONArray(j); + Double p = jsonArray.getDouble(0);//满金额 + Double y = jsonArray.getDouble(1);//优惠金额 + if (orderPrivateCar.getOrderMoney().compareTo(p) >= 0 && price.compareTo(y) < 0) { + price = y; + id = t.getId(); + type = 2; + } + } + } + } + } + if (t.getType() == 3) {//次数卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"time":1,"discountAmount":10} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discountAmount = jsonObject.getDouble("discountAmount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + if (price.compareTo(discountAmount) < 0) { + price = discountAmount; + id = t.getId(); + type = 2; + } + } + } + } + if (t.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + Double discount = jsonObject.getDouble("discount");//折扣 + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + double v = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + } + } + } + } + map.put("price", price); + map.put("id", id); + map.put("type", type); + return map; + } + + @Override + public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderPrivateCar.getCompanyId(), 1, 1, orderPrivateCar.getOrderMoney(), pageNum, size); + List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderPrivateCar.getCompanyId(), 1, 0, orderPrivateCar.getOrderMoney(), pageNum, size); + list.addAll(list1); + return list; + } + + @Override + public List<CouponsListVo> queryCouponList(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { + pageNum = (pageNum - 1) * size; + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + List<CouponsListVo> rows = new ArrayList<>(); + List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderPrivateCar.getCompanyId()) + .eq("state", 1).in("couponUseType", Arrays.asList(0, 1)).eq("userId", uid).where("expirationTime >= now()")); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (UserCouponRecord userCouponRecord : list) { + if (userCouponRecord.getCouponType() == 2) {//满减券 + if (orderPrivateCar.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) < 0) { + continue; + } + } + CouponsListVo couponsListVo = new CouponsListVo(); + couponsListVo.setId(userCouponRecord.getId()); + couponsListVo.setDataType(1); + couponsListVo.setMoney(userCouponRecord.getMoney()); + couponsListVo.setUserType(userCouponRecord.getCouponUseType()); + couponsListVo.setTime(sdf.format(userCouponRecord.getExpirationTime())); + couponsListVo.setType(userCouponRecord.getCouponType()); + couponsListVo.setFullMoney(userCouponRecord.getFullMoney()); + couponsListVo.setState(userCouponRecord.getState()); + Company company = companyService.selectById(userCouponRecord.getCompanyId()); + couponsListVo.setCompany(company.getName()); + rows.add(couponsListVo); + } + + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); + } + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderPrivateCar.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); + } + List<UserTaxiCard> userTaxiCards; + if (companyCity != null) { + userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).like("companyCityId", "%" + companyCity.getId() + "%").where("now() between startTime and endTime")); + } else { + userTaxiCards = new ArrayList<>(); + } + + //全国卡 + List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards1); + } + + + //亲密账户 + List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); + CompanyCity finalCompanyCity = companyCity; + bindUserId.forEach(userUser -> { + if (finalCompanyCity != null) { + List<UserTaxiCard> taxiCardPayments1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) + .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); + userTaxiCards.addAll(taxiCardPayments1); + } + + //全国卡 + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards1); + } + }); + + for (UserTaxiCard t : userTaxiCards) { + try { + CouponsListVo couponsListVo = new CouponsListVo(); + couponsListVo.setId(t.getId()); + couponsListVo.setDataType(2); + couponsListVo.setUserType(1); + couponsListVo.setTime(sdf.format(t.getEndTime())); + couponsListVo.setState(1); + couponsListVo.setTaxiCardType(t.getType()); + Company company = companyService.selectById(t.getCompanyId()); + couponsListVo.setCompany(company.getName()); + couponsListVo.setName(taxiCardService.selectById(t.getTaxiCardId()).getName()); + + + JSONObject jsonObject = JSON.parseObject(t.getContent()); + JSONArray businessTypes = jsonObject.getJSONArray("businessTypes"); + if (!businessTypes.toJavaList(Integer.class).contains(1)) { + continue; + } + if (t.getType() == 1) {//{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discount")); + couponsListVo.setType(1); + } + if (t.getType() == 2) {//{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + b = true; + for (int i = fullReduction.size() - 1; i >= 0; i--) { + JSONArray jsonArray = fullReduction.getJSONArray(i); + Double m = jsonArray.getDouble(0); + Double j = jsonArray.getDouble(1); + if (orderPrivateCar.getOrderMoney().compareTo(m) >= 0) { + couponsListVo.setFullMoney(m); + couponsListVo.setMoney(j); + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setType(2); + } + if (t.getType() == 3) {//{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setFullMoney(0D); + couponsListVo.setMoney(jsonObject.getDouble("discountAmount")); + couponsListVo.setType(2); + } + if (t.getType() == 4) {//{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discount")); + couponsListVo.setType(1); + } + + + String str = ""; + TaxiCard taxiCard = taxiCardService.selectById(t.getTaxiCardId()); + if (taxiCard.getTaxiCardType() == 1) { + String[] split = taxiCard.getCompanyCityId().split(";"); + for (String c : split) { + CompanyCity companyCity1 = companyCityService.selectById(c); + if (ToolUtil.isNotEmpty(companyCity1.getAreaCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getAreaCode())); + str += region.getName() + ";"; + continue; + } + if (ToolUtil.isNotEmpty(companyCity1.getCityCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getCityCode())); + str += region.getName() + ";"; + continue; + } + if (ToolUtil.isNotEmpty(companyCity1.getProvinceCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getProvinceCode())); + str += region.getName() + ";"; + continue; + } + } + } else { + str = "全国;"; + } + couponsListVo.setCity(str.substring(0, str.length() - 1)); + + + rows.add(couponsListVo); + } catch (Exception e) { + e.printStackTrace(); + } + } + Collections.sort(rows, new Comparator<CouponsListVo>() { + public int compare(CouponsListVo s1, CouponsListVo s2) { + return Integer.compare(s1.getId(), s2.getId()); + } + }); + + if (rows.size() >= (pageNum + 1) * size) { + rows = rows.subList(pageNum, pageNum + size); + } else if (pageNum < rows.size() && rows.size() < (pageNum + 1) * size) { + rows = rows.subList(pageNum, rows.size()); + } else { + rows = new ArrayList<>(); + } + System.out.println(rows); + System.out.println(orderPrivateCar.getOrderMoney()); + rows = rows.stream().filter(e -> e.getMoney() <= orderPrivateCar.getOrderMoney() || e.getDataType() == 2).collect(Collectors.toList()); + System.out.println(rows); + return rows; + } + + @Override + public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + if (orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9) { + return ResultUtil.error("订单已完成支付,不允许重复支付", ""); + } + if (orderPrivateCar.getState() != 7) { + return ResultUtil.error("订单不在待支付状态,不允许支付", ""); + } + Integer uid = orderPrivateCar.getUserId(); + Double orderMoney = orderPrivateCar.getOrderMoney(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + orderPrivateCar.setCouponMoney(0D);//初始化历史数据 + orderPrivateCar.setCouponId(null); + + //计算优惠券 + UserCouponRecord userCouponRecord = null; + if (null != couponId) { + userCouponRecord = userCouponRecordService.selectById(couponId); + if (userCouponRecord.getCompanyId() != orderPrivateCar.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", ""); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", ""); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 1) { + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + orderMoney = orderMoney - userCouponRecord.getMoney(); + orderPrivateCar.setCouponMoney(userCouponRecord.getMoney()); + orderPrivateCar.setCouponId(couponId); + } + + + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderPrivateCar.getCompanyId(), 1, 1, orderMoney); + if (null != query && query.getMoney().compareTo(orderMoney) < 0) { + orderMoney = orderMoney - query.getMoney(); + orderPrivateCar.setRedPacketMoney(query.getMoney()); + orderPrivateCar.setRedPacketId(query.getId()); + } + + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderPrivateCar.getCompanyId()); + if (null != query2) { + Double special = query2.getSpecial(); + orderPrivateCar.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if (orderMoney.compareTo(v) > 0) { + orderPrivateCar.setDiscountMoney(orderMoney - v); + orderPrivateCar.setActivityId(query2.getId()); + orderMoney = v; + } + } + orderMoney = orderMoney < 0 ? 0 : orderMoney; + if (payType == 1) {//微信支付 + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); + paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付", ""); + } + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId); + userInfoService.updateById(userInfo); + + orderPrivateCar.setState(8); + orderPrivateCar.setPayType(3); + orderPrivateCar.setPayMoney(orderMoney); + + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + //添加收入 + Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney()); + orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + + new Thread(new Runnable() { + @Override + public void run() { + if (pushMinistryOfTransport) {//上传数据 + pushMinistryOfTransportUtil.operatePay(orderId); + } + } + }).start(); + } + + this.updateAllColumnById(orderPrivateCar); + return resultUtil; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil payPrivateCarOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception { + + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + if (orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9) { + return ResultUtil.error("订单已完成支付,不允许重复支付", new ArrayList<>()); + } + if (orderPrivateCar.getState() != 7) { + return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>()); + } + Integer uid = orderPrivateCar.getUserId(); + Double orderMoney = orderPrivateCar.getOrderMoney(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + orderPrivateCar.setCouponMoney(0D);//初始化历史数据 + orderPrivateCar.setCouponId(null); + System.out.println("!!!" + orderMoney + "!!!!"); + //计算优惠券 + UserCouponRecord userCouponRecord = null; + if (null != objectId && objectType == 1) { + userCouponRecord = userCouponRecordService.selectById(objectId); + if (userCouponRecord.getCompanyId() != orderPrivateCar.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", new ArrayList<>()); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", new ArrayList<>()); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", new ArrayList<>()); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 1) { + return ResultUtil.error("优惠券不能用于此类型订单", new ArrayList<>()); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", new ArrayList<>()); + } + orderMoney = orderMoney - userCouponRecord.getMoney(); + orderPrivateCar.setCouponMoney(userCouponRecord.getMoney()); + orderPrivateCar.setCouponId(objectId); + System.out.println("!!!" + orderMoney + "!!!!"); + } + + //打车卡 + UserTaxiCard userTaxiCard = null; + if (null != objectId && objectType == 2) { + userTaxiCard = userTaxiCardService.selectById(objectId); + TaxiCard taxiCard = taxiCardService.selectById(userTaxiCard.getTaxiCardId()); + if (taxiCard.getTaxiCardType() == 1 && userTaxiCard.getCompanyId() != orderPrivateCar.getCompanyId()) { + return ResultUtil.error("打车卡不能用于此订单", new ArrayList<>()); + } + if (System.currentTimeMillis() > userTaxiCard.getEndTime().getTime()) { + return ResultUtil.error("打车卡已过期", new ArrayList<>()); + } + if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { + Integer time = JSON.parseObject(userTaxiCard.getContent()).getInteger("time"); + if (0 == time) { + return ResultUtil.error("打车卡已使用完", new ArrayList<>()); + } + } + List<Integer> integers = JSON.parseObject(userTaxiCard.getContent()).getJSONArray("businessTypes").toJavaList(Integer.class); + if (!integers.contains(1)) { + return ResultUtil.error("打车卡不能用于此类型订单", new ArrayList<>()); + } + + Double yh = 0D; + JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); + if (userTaxiCard.getType() == 1) {//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discount = jsonObject.getDouble("discount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + break; + } + } + + } + if (userTaxiCard.getType() == 2) {//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + for (int j = fullReduction.size() - 1; j >= 0; j--) { + JSONArray jsonArray = fullReduction.getJSONArray(j); + Double p = jsonArray.getDouble(0);//满金额 + if (orderPrivateCar.getOrderMoney().compareTo(p) >= 0) { + yh = jsonArray.getDouble(1);//优惠金额 + break; + } + } + } + } + + } + if (userTaxiCard.getType() == 3) {//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = jsonObject.getDouble("discountAmount"); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + } + } + + } + if (userTaxiCard.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + Double discount = jsonObject.getDouble("discount");//折扣 + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = new BigDecimal(orderPrivateCar.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + break; + } + } + } + + orderMoney = orderMoney - yh; + orderPrivateCar.setTaxiCardId(userTaxiCard.getTaxiCardId()); + orderPrivateCar.setUserTaxiCardId(objectId); + orderPrivateCar.setDiscountAmount(yh); + } + + System.out.println("!!!" + orderMoney + "!!!!"); + + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderPrivateCar.getCompanyId(), 1, 1, orderMoney); + if (null != query && query.getMoney().compareTo(orderMoney) < 0) { + orderMoney = orderMoney - query.getMoney(); + orderPrivateCar.setRedPacketMoney(query.getMoney()); + orderPrivateCar.setRedPacketId(query.getId()); + } + + System.out.println("!!!" + orderMoney + "!!!!"); + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderPrivateCar.getCompanyId()); + if (null != query2) { + Double special = query2.getSpecial(); + orderPrivateCar.setDiscount(special); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if (orderMoney.compareTo(v) > 0) { + orderPrivateCar.setDiscountMoney(orderMoney - v); + orderPrivateCar.setActivityId(query2.getId()); + orderMoney = v; + } + } + orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue(); + System.out.println("!!!" + orderMoney + "!!!!"); + orderMoney = orderMoney < 0 ? 0 : orderMoney; + if (payType == 1) {//微信支付 + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); + paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付"); + } // if(orderMoney > 0){ // resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),orderMoney); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } // } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); - if(null != query1){ - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - } - - //添加交易明细 - transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId); - userInfoService.updateById(userInfo); - - orderPrivateCar.setState(8); - orderPrivateCar.setPayType(3); - orderPrivateCar.setPayMoney(orderMoney); - - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - //处理打车卡 - if(null != userTaxiCard){ - userTaxiCardService.updateById(userTaxiCard); - } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); - } - - //添加收入 - Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney()); - orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - } - }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); - - new Thread(new Runnable() { - @Override - public void run() { - if(pushMinistryOfTransport){//上传数据 - pushMinistryOfTransportUtil.operatePay(orderId); - } - } - }).start(); - }else if(payType == 4){ - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - Integer integer = paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 4, orderMoney, "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4,orderId,6,integer); - - } - - this.updateAllColumnById(orderPrivateCar); - return resultUtil; - } - @Autowired - private AppOrderController appOrderController; - - @Override - public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - Integer companyId = orderPrivateCar.getCompanyId(); - - Map<String, Object> query = userActivityRedenvelopeService.query(companyId, orderPrivateCar.getTravelTime()); - Double money = 0D; - BaseWarpper baseWarpper = new BaseWarpper(); - if(null != query){ - Integer type = Integer.valueOf(String.valueOf(query.get("type"))); - if(type == 1){//固定金额 - money = Double.valueOf(String.valueOf(query.get("money"))); - }else{//随机金额 - Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); - Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); - int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); - Random random = new Random(); - int num = random.nextInt(i); - money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - } - //判断当前红包是否大于剩余可领取总金额 - if(money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0){ - baseWarpper.setAmount(0D); - return ResultUtil.success(baseWarpper); - } - } - baseWarpper.setAmount(money); - - if(money > 0){ - //添加临时红包数据 - UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); - userRedPacketRecord.setMoney(money); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); - userRedPacketRecord.setExpirationTime(calendar.getTime()); - userRedPacketRecord.setInsertTime(new Date()); - userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); - userRedPacketRecord.setState(0); - userRedPacketRecord.setOrderId(orderPrivateCar.getId()); - userRedPacketRecord.setOrderType(1); - userRedPacketRecord.setUserId(orderPrivateCar.getUserId()); - userRedPacketRecordService.insert(userRedPacketRecord); - } - - // 获取平台电子账簿 当前用户电子账簿 - appOrderController.moneyPay(orderPrivateCar.getId(),orderPrivateCar.getUserId(),money); - - return ResultUtil.success(baseWarpper); - } - - - @Override - public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - UserRedPacketRecord query = userRedPacketRecordService.query_(orderPrivateCar.getUserId(), orderPrivateCar.getCompanyId(), 0, 1, null); - if(null != query){ - Double money = query.getMoney(); - Map<String, Object> map = userActivityRedenvelopeService.query(orderPrivateCar.getCompanyId(), orderPrivateCar.getTravelTime()); - Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); - if(money.compareTo(laveMoney) > 0){ - return ResultUtil.error("手速太慢了,红包已派发完啦!"); - } - //判断当前红包是否大于剩余可领取总金额 - if(money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0){ - return ResultUtil.error("手速太慢了,红包已派发完啦!"); - } - double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); - - UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); - id.setLaveMoney(v); - id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - userActivityRedenvelopeService.updateById(id); - - query.setState(1); - query.setRedPacketActivityId(id.getId()); - userRedPacketRecordService.updateById(query); - } - return ResultUtil.success(); - } - - - /** - * 取消订单支付后的处理 - * @param id 订单=id - * @param order_id 工行支付单号 - * @param type 1=微信,2=支付宝 - * @throws Exception - */ - @Override - public void payCancelOrderPrivateCar(Integer id, String order_id, Integer type) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(id); - PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); - if(null != query){ - //添加交易明细 - transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); - orderPrivateCar.setState(10); - //解除小号绑定 - if(orderPrivateCar.getBindId() != null){ - chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000)); - } - orderPrivateCar.setBindId(""); - orderPrivateCar.setTelX(""); - this.updateById(orderPrivateCar); - - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); - if (null != query1){ - query1.setState(2); - orderCancelService.updateById(query1); - } - - //添加已收入明细 - incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getAmount()); - - this.deleteTask(orderPrivateCar.getId());//删除定时任务 - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + if (null != query1) { + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + } + + //添加交易明细 + transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId); + userInfoService.updateById(userInfo); + + orderPrivateCar.setState(8); + orderPrivateCar.setPayType(3); + orderPrivateCar.setPayMoney(orderMoney); + + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + //处理打车卡 + if (null != userTaxiCard) { + userTaxiCardService.updateById(userTaxiCard); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + + //添加收入 + Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney()); + orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + + new Thread(new Runnable() { + @Override + public void run() { + if (pushMinistryOfTransport) {//上传数据 + pushMinistryOfTransportUtil.operatePay(orderId); + } + } + }).start(); + } else if (payType == 4) { + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + Integer integer = paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 4, orderMoney, "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4, orderId, 6, integer); + + } + + this.updateAllColumnById(orderPrivateCar); + return resultUtil; + } + + @Override + public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + Integer companyId = orderPrivateCar.getCompanyId(); + + Map<String, Object> query = userActivityRedenvelopeService.query(companyId, orderPrivateCar.getTravelTime()); + Double money = 0D; + BaseWarpper baseWarpper = new BaseWarpper(); + if (null != query) { + Integer type = Integer.valueOf(String.valueOf(query.get("type"))); + if (type == 1) {//固定金额 + money = Double.valueOf(String.valueOf(query.get("money"))); + } else {//随机金额 + Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); + Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); + int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); + Random random = new Random(); + int num = random.nextInt(i); + money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + } + //判断当前红包是否大于剩余可领取总金额 + if (money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0) { + baseWarpper.setAmount(0D); + return ResultUtil.success(baseWarpper); + } + } + baseWarpper.setAmount(money); + + if (money > 0) { + //添加临时红包数据 + UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); + userRedPacketRecord.setMoney(money); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); + userRedPacketRecord.setExpirationTime(calendar.getTime()); + userRedPacketRecord.setInsertTime(new Date()); + userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); + userRedPacketRecord.setState(0); + userRedPacketRecord.setOrderId(orderPrivateCar.getId()); + userRedPacketRecord.setOrderType(1); + userRedPacketRecord.setUserId(orderPrivateCar.getUserId()); + userRedPacketRecordService.insert(userRedPacketRecord); + } + + // 获取平台电子账簿 当前用户电子账簿 + appOrderController.moneyPay(orderPrivateCar.getId(), orderPrivateCar.getUserId(), money); + + return ResultUtil.success(baseWarpper); + } + + @Override + public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + UserRedPacketRecord query = userRedPacketRecordService.query_(orderPrivateCar.getUserId(), orderPrivateCar.getCompanyId(), 0, 1, null); + if (null != query) { + Double money = query.getMoney(); + Map<String, Object> map = userActivityRedenvelopeService.query(orderPrivateCar.getCompanyId(), orderPrivateCar.getTravelTime()); + Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); + if (money.compareTo(laveMoney) > 0) { + return ResultUtil.error("手速太慢了,红包已派发完啦!"); + } + //判断当前红包是否大于剩余可领取总金额 + if (money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0) { + return ResultUtil.error("手速太慢了,红包已派发完啦!"); + } + double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); + + UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); + id.setLaveMoney(v); + id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + userActivityRedenvelopeService.updateById(id); + + query.setState(1); + query.setRedPacketActivityId(id.getId()); + userRedPacketRecordService.updateById(query); + } + return ResultUtil.success(); + } + + /** + * 取消订单支付后的处理 + * + * @param id 订单=id + * @param order_id 工行支付单号 + * @param type 1=微信,2=支付宝 + * @throws Exception + */ + @Override + public void payCancelOrderPrivateCar(Integer id, String order_id, Integer type) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(id); + PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); + if (null != query) { + //添加交易明细 + transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); + orderPrivateCar.setState(10); + //解除小号绑定 + if (orderPrivateCar.getBindId() != null) { + chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000)); + } + orderPrivateCar.setBindId(""); + orderPrivateCar.setTelX(""); + this.updateById(orderPrivateCar); + + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); + if (null != query1) { + query1.setState(2); + orderCancelService.updateById(query1); + } + + //添加已收入明细 + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getAmount()); + + this.deleteTask(orderPrivateCar.getId());//删除定时任务 + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 // new Thread(new Runnable() { // @Override // public void run() { // pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); // } // }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type==2?"支付宝":"云闪付")) + "成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); - }else{ - System.err.println("预支付数据异常(orderId = " + id + ")"); - } - } - - @Override - public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(id); - PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); - if(null != query && query.getState() == 1){ - //添加交易明细 - transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); - orderPrivateCar.setState(8); - orderPrivateCar.setPayType(type); - orderPrivateCar.setPayMoney(query.getAmount()); - - UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); - SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 - userInfoService.updateById(userInfo); - - //处理优惠券和红包 - if(null != orderPrivateCar.getCouponId()){ - UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId()); - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - if(null != orderPrivateCar.getUserTaxiCardId()){ - UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId()); - if(userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3){ - JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - userTaxiCardService.updateById(userTaxiCard); - } - } - if(null != orderPrivateCar.getRedPacketId()){ - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId()); - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - userRedPacketRecordService.updateById(userRedPacketRecord); - } - - - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - //添加收入 - Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney()); - orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); - this.updateById(orderPrivateCar); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); - } - }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信": (type==2?"支付宝":"云闪付")) + "成功完成出行订单支付,谢谢使用!", orderPrivateCar.getUserId(), 1); - - new Thread(new Runnable() { - @Override - public void run() { - if(pushMinistryOfTransport){//上传数据 - pushMinistryOfTransportUtil.operatePay(orderPrivateCar.getId()); - } - } - }).start(); - - }else{ - System.err.println("预支付数据异常(orderId = " + id + ")"); - } - } - - @Override - public List<OrderPrivateCar> queryOrder(Integer uid, Integer... state) throws Exception { - return orderPrivateCarMapper.queryByState_(uid, state); - } - - @Override - public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { - pageNum = (pageNum - 1) * size; - List<Map<String, Object>> maps = orderPrivateCarMapper.queryMyOrderList(uid, pageNum, size); - for(Map<String, Object> map : maps){ - if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ - map.put("state", map.get("oldState")); - } - } - return maps; - } - - @Override - public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid) throws Exception { - startTime = dateUtil.getStartOrEndDate(startTime, "start"); - endTime = dateUtil.getStartOrEndDate(endTime, "end"); - return orderPrivateCarMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); - } - - public void pushOrder(Integer id, Integer rideType, Integer serverCarModelId, Double startLon, Double startLat) throws Exception{ - new Thread(new Runnable() { - @Override - public void run() { - try { - Integer orderType = rideType==1?1:rideType==2?9:8; - orderIds.add(id);//添加记录,防止调用接口重复提醒无人接单 - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - List<Integer> integers = new ArrayList<>(); - if(ToolUtil.isNotEmpty(vehicle)){ - integers = JSON.parseArray(vehicle).toJavaList(Integer.class); - } - Company query = companyCityService.query(startLon.toString(), startLat.toString());//获取起点所属分公司 - List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 - for(int i = 1; i <= querys.size(); i++){ - OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id); - if (null == orderPrivateCar || orderPrivateCar.getState() > 1) { - break; - } - PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0); - System.out.println("pushOrder:"+pushOrder); - int i2 = pushOrder.getPushTime() / 10; - if(i2==0){ - i2=1; - } - for (int i1 = 0; i1 < i2 ; i1++) { - if (orderPrivateCar.getState() > 1) { - break; - } - //获取空闲司机 - List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机 - if (list.size() > 0) { - double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 - int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) - lastIndex = lastIndex == 0 ? list.size() : lastIndex; - list = list.subList(0, lastIndex);//获取空闲司机中占比数据 - for (Driver driver : list) {//开始进行推送 - boolean bo = false; - for (Integer integer : integers) { - if (integer.compareTo(driver.getId()) == 0) { - bo = true; - break; - } - } - if (bo) { - continue; - } - pushUtil.pushOrderState(2, driver.getId(), id, 1, 1, pushOrder.getPushTime()); - } - } - Thread.sleep(10000);//设置等待时间 - Integer state = orderPrivateCarMapper.selectById(orderPrivateCar.getId()).getState(); - if (state > 1) { - orderIds.remove(orderPrivateCar.getId()); - break; - } - if (i == querys.size()) { - pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); - orderIds.remove(orderPrivateCar.getId()); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - }).start(); - } - - @Override - public List<Map<String, Object>> queryMyTravelRecord(Integer uid) throws Exception { - return orderPrivateCarMapper.queryMyTravelRecord(uid); - } - - /** - * 推送抢单数据 - * @param orderPrivateCar - * @throws Exception - */ - public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception{ - new Thread(new Runnable() { - @Override - public void run() { - try { - Integer id = orderPrivateCar.getId(); - Integer orderType = orderPrivateCar.getRideType()==1?1:orderPrivateCar.getRideType()==2?9:8; - orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - List<Integer> integers = new ArrayList<>(); - if(ToolUtil.isNotEmpty(vehicle)){ - integers = JSON.parseArray(vehicle).toJavaList(Integer.class); - } - Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司 - List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 - for(int i = 1; i <= querys.size()+5; i++){ - OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id); - if (null == orderPrivateCar || orderPrivateCar.getState() > 1) { - break; - } - PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0); - System.out.println("pushOrder:"+pushOrder); - int i2 = pushOrder.getPushTime() / 10; - if(i2==0){ - i2=1; - } - for (int i1 = 0; i1 < i2 ; i1++) { - if (orderPrivateCar.getState() > 1) { - break; - } - //获取空闲司机 - List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 - if (list.size() > 0) { - double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 - int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) - lastIndex = lastIndex == 0 ? list.size() : lastIndex; - list = list.subList(0, lastIndex);//获取空闲司机中占比数据 - for (Driver driver : list) {//开始进行推送 - boolean bo = false; - for (Integer integer : integers) { - if (integer.compareTo(driver.getId()) == 0) { - bo = true; - break; - } - } - if (bo) { - continue; - } - pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); - } - } - Thread.sleep(10000);//设置等待时间 - Integer state = orderPrivateCar.getState(); - if (state > 1) { - orderIds.remove(orderPrivateCar.getId()); - return; - } - if (i == querys.size()+5 && state == 1) { - pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); - orderIds.remove(orderPrivateCar.getId()); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - }).start(); - } - - - /** - * 获取红包使用记录 - * @param uid - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception { - return orderPrivateCarMapper.queryRedEnvelope(uid); - } - - /** - * 获取下单推送完后没有司机接单的提醒 - * @return - * @throws Exception - */ - @Override - public EndPushWarpper queryEndPush(Integer uid) throws Exception { - List<OrderPrivateCar> list = orderPrivateCarMapper.queryByState(uid, null, null, 1); - EndPushWarpper endPushWarpper = new EndPushWarpper(); - if(list.size() > 0){ - OrderPrivateCar orderPrivateCar = list.get(0); - if(!orderIds.contains(orderPrivateCar.getId())){ - endPushWarpper.setOrderId(orderPrivateCar.getId()); - endPushWarpper.setOrderType(1); - endPushWarpper.setState(1); - List<PushOrder> querys = pushOrderService.querys(null, 2, orderPrivateCar.getCompanyId());//获取需要推送的次数 - int time = 0; - for(int i = 1; i <= querys.size()+5; i++){ - PushOrder pushOrder = pushOrderService.querys(i, 2, orderPrivateCar.getCompanyId()).get(0); - time += pushOrder.getPushTime() * 1000; - } - //当前时间减去推单总时间大于下单时间 - if((System.currentTimeMillis() - time) > orderPrivateCar.getInsertTime().getTime()){ - endPushWarpper.setState(2); - } - } - } - return endPushWarpper; - } - - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception { - UserInfo userInfo = userInfoService.selectById(uid); - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - ResultUtil resultUtil = ResultUtil.success(); - if(payType == 1){//微信支付 - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); - paymentRecordService.saveData(3, uid, 1, orderId, 1, 2, money, "", 1);//添加预支付数据 - } - if(payType == 3) {//余额支付 - if (userInfo.getBalance() == null || userInfo.getBalance() < money) { - return ResultUtil.error("余额不足,无法完成支付"); - } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); + } else { + System.err.println("预支付数据异常(orderId = " + id + ")"); + } + } + + @Override + public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(id); + PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); + if (null != query && query.getState() == 1) { + //添加交易明细 + transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); + orderPrivateCar.setState(8); + orderPrivateCar.setPayType(type); + orderPrivateCar.setPayMoney(query.getAmount()); + + UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 + userInfoService.updateById(userInfo); + + //处理优惠券和红包 + if (null != orderPrivateCar.getCouponId()) { + UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId()); + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != orderPrivateCar.getUserTaxiCardId()) { + UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId()); + if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { + JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + userTaxiCardService.updateById(userTaxiCard); + } + } + if (null != orderPrivateCar.getRedPacketId()) { + UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId()); + userRedPacketRecord.setState(2); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecordService.updateById(userRedPacketRecord); + } + + + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + //添加收入 + Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney()); + orderPrivateCar.setSplitAllocation(JSON.toJSONString(map)); + this.updateById(orderPrivateCar); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功完成出行订单支付,谢谢使用!", orderPrivateCar.getUserId(), 1); + + new Thread(new Runnable() { + @Override + public void run() { + if (pushMinistryOfTransport) {//上传数据 + pushMinistryOfTransportUtil.operatePay(orderPrivateCar.getId()); + } + } + }).start(); + + } else { + System.err.println("预支付数据异常(orderId = " + id + ")"); + } + } + + @Override + public List<OrderPrivateCar> queryOrder(Integer uid, Integer... state) throws Exception { + return orderPrivateCarMapper.queryByState_(uid, state); + } + + @Override + public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { + pageNum = (pageNum - 1) * size; + List<Map<String, Object>> maps = orderPrivateCarMapper.queryMyOrderList(uid, pageNum, size); + for (Map<String, Object> map : maps) { + if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { + map.put("state", map.get("oldState")); + } + } + return maps; + } + + @Override + public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid) throws Exception { + startTime = dateUtil.getStartOrEndDate(startTime, "start"); + endTime = dateUtil.getStartOrEndDate(endTime, "end"); + return orderPrivateCarMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); + } + + @Override + public Map<String, Object> queryOrderInfo(Integer uid, Integer orderId) throws Exception { + Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId); + if (null == map) { + OrderTaxi orderTaxi = orderTaxiService.selectOne(new EntityWrapper<OrderTaxi>() + .eq("userId", uid) + .eq("isDelete", 1) + .in("state", Arrays.asList(2, 3, 4, 5, 6, 7)) + ); + return orderTaxiService.queryOrderInfo(orderTaxi.getId()); + } + if (null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2) {//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + orderPrivateCar.setReassignNotice(0); + this.updateById(orderPrivateCar); + } + if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { + map.put("state", map.get("oldState")); + } + if (Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9) { + map.put("redPacketMoney", null); + map.put("couponMoney", null); + } + + String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId")); + map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); + map.put("orderType", 1); + return map; + } + + @Override + public List<Map<String, Object>> queryMyTravelRecord(Integer uid) throws Exception { + return orderPrivateCarMapper.queryMyTravelRecord(uid); + } + + /** + * 获取服务中的订单数据 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + if (null == orderPrivateCar) { + return orderTaxiService.queryOrderServer(orderId, uid); + } + //计算预计距离和剩余时间 + String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); + if (null == value || "".equals(value)) { + System.err.println("司机没有上传位置信息"); + + //调用获取轨迹中的数据 + List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2); + if (list.size() > 0) { + Map<String, Object> map = list.get(list.size() - 1); + value = map.get("lon") + "," + map.get("lat"); + } + + } + + OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); + orderServerWarpper.setOrderId(orderPrivateCar.getId()); + orderServerWarpper.setOrderType(1); + orderServerWarpper.setState(orderPrivateCar.getState()); + orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); + orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); + orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice()); + if (orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3) {//前往预约地 + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1); + String d = "0"; + String t = "0"; + if (null == distance) { + System.err.println("查询距离出错了"); + } else { + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage(d); + orderServerWarpper.setReservationTime(t); + orderServerWarpper.setServedMileage("0"); + orderServerWarpper.setServedTime("0"); + orderServerWarpper.setLaveMileage("0"); + orderServerWarpper.setLaveTime("0"); + } + if (orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6) {//服务中 + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1); + String d = "0"; + String t = "0"; + if (null == distance) { + System.err.println("查询距离出错了"); + } else { + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage("0"); + orderServerWarpper.setReservationTime("0"); + orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000)); + orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + ""); + orderServerWarpper.setLaveMileage(d); + orderServerWarpper.setLaveTime(t); + } + + return orderServerWarpper; + } + + /** + * 获取下单推送完后没有司机接单的提醒 + * + * @return + * @throws Exception + */ + @Override + public EndPushWarpper queryEndPush(Integer uid) throws Exception { + List<OrderPrivateCar> list = orderPrivateCarMapper.queryByState(uid, null, null, 1); + EndPushWarpper endPushWarpper = new EndPushWarpper(); + if (list.size() > 0) { + OrderPrivateCar orderPrivateCar = list.get(0); + if (!orderIds.contains(orderPrivateCar.getId())) { + endPushWarpper.setOrderId(orderPrivateCar.getId()); + endPushWarpper.setOrderType(1); + endPushWarpper.setState(1); + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数 + int time = 0; + for (int i = 1; i <= querys.size() + 5; i++) { + int finalI = i; + PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); + time += pushOrder.getPushTime() * 1000; + } + //当前时间减去推单总时间大于下单时间 + if ((System.currentTimeMillis() - time) > orderPrivateCar.getInsertTime().getTime()) { + endPushWarpper.setState(2); + } + } + } + return endPushWarpper; + } + + /** + * 获取红包使用记录 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception { + return orderPrivateCarMapper.queryRedEnvelope(uid); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception { + UserInfo userInfo = userInfoService.selectById(uid); + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + ResultUtil resultUtil = ResultUtil.success(); + if (payType == 1) {//微信支付 + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); + paymentRecordService.saveData(3, uid, 1, orderId, 1, 2, money, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < money) { + return ResultUtil.error("余额不足,无法完成支付"); + } // resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),money); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "快车订单-感谢费", money, 2, 1, 1, 1, orderId); - userInfoService.updateById(userInfo); - - orderPrivateCar.setThankYouFee(money); - this.updateById(orderPrivateCar); - - //添加已收入明细 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, money); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1); - - } - if(payType==4){ - Double payMoney = orderPrivateCar.getThankYouFee(); - Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 1, 4, money, "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4,orderId,11,integer); - } - return resultUtil; - } - - @Override - public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception { - System.out.println(orderId+"_"+order_id+"_"+payType); - OrderPrivateCar orderPrivateCar = this.selectById(orderId); - UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); - System.out.println("用户"+userInfo); - PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 1, payType, 1); - System.out.println("query:"+query); - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - System.out.println(orderPrivateCar.getCompanyId()); - SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); - System.out.println("query1:"+query1); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(userInfo.getId(), "快车订单-感谢费", query.getAmount(), 2, 1, 1, 1, orderId); - userInfoService.updateById(userInfo); - - orderPrivateCar.setThankYouFee(query.getAmount()); - this.updateById(orderPrivateCar); - - //添加已收入明细 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, query.getAmount()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType==2?"支付宝":"云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1); - System.out.println("出租车感谢费ok"); - } - - @Override - public List<Map<String, Object>> queryOrderInfo2(Integer orderId, Integer state, String lon, String lat) { - return this.baseMapper.queryOrderInfo2(orderId,state,lon,lat); - } - - /** - * 获取专车未支付订单 - * @param uid - * @return - */ - @Override - public List<UnPayOrderVO> getUnpayPrivateOrders(Integer uid) { - EntityWrapper<OrderPrivateCar> wrapper = new EntityWrapper<>(); - wrapper.eq("userId", uid); - wrapper.eq("state", 7); - //查出未支付订单 - List<OrderPrivateCar> orderPrivateCars = this.selectList(wrapper); - List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>(); - for (OrderPrivateCar order : orderPrivateCars) { - UnPayOrderVO vo = new UnPayOrderVO(); - // 复制属性 - //添加司机信息 - DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper(); - Driver driver = driverService.selectById(order.getDriverId()); - BeanUtils.copyProperties(driver, driverInfoWarpper); vo.setDriverInfoWarpper(driverInfoWarpper); - //其余信息 - BeanUtils.copyProperties(order, vo); - unPayOrderVOList.add(vo); - } - - return unPayOrderVOList; - } + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "快车订单-感谢费", money, 2, 1, 1, 1, orderId); + userInfoService.updateById(userInfo); + + orderPrivateCar.setThankYouFee(money); + this.updateById(orderPrivateCar); + + //添加已收入明细 + incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, money); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1); + + } + if (payType == 4) { + Double payMoney = orderPrivateCar.getThankYouFee(); + Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 1, 4, money, "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4, orderId, 11, integer); + } + return resultUtil; + } + + @Override + public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception { + System.out.println(orderId + "_" + order_id + "_" + payType); + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); + System.out.println("用户" + userInfo); + PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 1, payType, 1); + System.out.println("query:" + query); + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + System.out.println("query1:" + query1); + userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(userInfo.getId(), "快车订单-感谢费", query.getAmount(), 2, 1, 1, 1, orderId); + userInfoService.updateById(userInfo); + + orderPrivateCar.setThankYouFee(query.getAmount()); + this.updateById(orderPrivateCar); + + //添加已收入明细 + incomeService.saveData(2, orderPrivateCar.getDriverId(), 6, orderPrivateCar.getId(), 1, query.getAmount()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType == 2 ? "支付宝" : "云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1); + System.out.println("出租车感谢费ok"); + } + + @Override + public List<Map<String, Object>> queryOrderInfo2(Integer orderId, Integer state, String lon, String lat) { + return this.baseMapper.queryOrderInfo2(orderId, state, lon, lat); + } + + /** + * 获取专车未支付订单 + * + * @param uid + * @return + */ + @Override + public List<UnPayOrderVO> getUnpayPrivateOrders(Integer uid) { + EntityWrapper<OrderPrivateCar> wrapper = new EntityWrapper<>(); + wrapper.eq("userId", uid); + wrapper.eq("state", 7); + //查出未支付订单 + List<OrderPrivateCar> orderPrivateCars = this.selectList(wrapper); + List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>(); + for (OrderPrivateCar order : orderPrivateCars) { + UnPayOrderVO vo = new UnPayOrderVO(); + // 复制属性 + //添加司机信息 + DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper(); + Driver driver = driverService.selectById(order.getDriverId()); + BeanUtils.copyProperties(driver, driverInfoWarpper); + vo.setDriverInfoWarpper(driverInfoWarpper); + //其余信息 + BeanUtils.copyProperties(order, vo); + unPayOrderVOList.add(vo); + } + + return unPayOrderVOList; + } + + public void pushOrder(Integer id, Integer rideType, Integer serverCarModelId, Double startLon, Double startLat) throws Exception { + new Thread(new Runnable() { + @Override + public void run() { + try { + Integer orderType = rideType == 1 ? 1 : rideType == 2 ? 9 : 8; + orderIds.add(id);//添加记录,防止调用接口重复提醒无人接单 + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + List<Integer> integers = new ArrayList<>(); + if (ToolUtil.isNotEmpty(vehicle)) { + integers = JSON.parseArray(vehicle).toJavaList(Integer.class); + } + OpenCity openCity = openCityService.openCity1(startLon.toString(), startLat.toString()); + List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数 + //整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后任无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车 + for (int i = 1; i <= querys.size() + 5; i++) { + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id); + if (null == orderPrivateCar || orderPrivateCar.getState() > 1) { + break; + } + int finalI = i; + PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); + System.out.println("pushOrder:" + pushOrder); + int i2 = pushOrder.getPushTime() / 10; + if (i2 == 0) { + i2 = 1; + } + for (int i1 = 0; i1 < i2; i1++) { + if (orderPrivateCar.getState() > 1) { + break; + } + //获取空闲司机 + List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机 + if (list.size() > 0) { + double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 + int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) + lastIndex = lastIndex == 0 ? list.size() : lastIndex; + list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + for (Driver driver : list) {//开始进行推送 + boolean bo = false; + for (Integer integer : integers) { + if (integer.compareTo(driver.getId()) == 0) { + bo = true; + break; + } + } + if (bo) { + continue; + } + pushUtil.pushOrderState(2, driver.getId(), id, 1, 1, pushOrder.getPushTime()); + } + } + Thread.sleep(10000);//设置等待时间 + Integer state = orderPrivateCarMapper.selectById(orderPrivateCar.getId()).getState(); + if (state > 1) { + orderIds.remove(orderPrivateCar.getId()); + break; + } + if (i == querys.size() + 5) { + pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); + orderIds.remove(orderPrivateCar.getId()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + /** + * 推送抢单数据 + * + * @param orderPrivateCar + * @throws Exception + */ + public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception { + new Thread(new Runnable() { + @Override + public void run() { + try { + Integer id = orderPrivateCar.getId(); + Integer orderType = orderPrivateCar.getRideType() == 1 ? 1 : orderPrivateCar.getRideType() == 2 ? 9 : 8; + orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + List<Integer> integers = new ArrayList<>(); + if (ToolUtil.isNotEmpty(vehicle)) { + integers = JSON.parseArray(vehicle).toJavaList(Integer.class); + } + OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数 + for (int i = 1; i <= querys.size() + 5; i++) { + OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id); + if (null == orderPrivateCar || orderPrivateCar.getState() > 1) { + break; + } + int finalI = i; + PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); + System.out.println("pushOrder:" + pushOrder); + int i2 = pushOrder.getPushTime() / 10; + if (i2 == 0) { + i2 = 1; + } + for (int i1 = 0; i1 < i2; i1++) { + if (orderPrivateCar.getState() > 1) { + break; + } + //获取空闲司机 + List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 + if (list.size() > 0) { + double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 + int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) + lastIndex = lastIndex == 0 ? list.size() : lastIndex; + list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + for (Driver driver : list) {//开始进行推送 + boolean bo = false; + for (Integer integer : integers) { + if (integer.compareTo(driver.getId()) == 0) { + bo = true; + break; + } + } + if (bo) { + continue; + } + pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); + } + } + Thread.sleep(10000);//设置等待时间 + Integer state = orderPrivateCar.getState(); + if (state > 1) { + orderIds.remove(orderPrivateCar.getId()); + return; + } + if (i == querys.size() + 5 && state == 1) { + pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); + orderIds.remove(orderPrivateCar.getId()); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java index 178b7c5..710a4d7 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/CancleOrderMapper.java @@ -14,5 +14,5 @@ * @return */ CancleOrder query(@Param("type") Integer type, @Param("orderType") Integer orderType, - @Param("companyId") Integer companyId); + @Param("openCityId") Integer openCityId); } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java index 58c8fe0..450f4d6 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/PushOrderMapper.java @@ -16,5 +16,5 @@ * @return */ List<PushOrder> querys(@Param("type") Integer type, @Param("pushType") Integer pushType, - @Param("companyId") Integer companyId); + @Param("openCityId") Integer openCityId); } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java index 848238a..cde2dfc 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SysIntegralMapper.java @@ -6,5 +6,5 @@ public interface SysIntegralMapper extends BaseMapper<SysIntegral> { - SysIntegral query(@Param("companyId") Integer companyId); + SysIntegral query(@Param("openCityId") Integer openCityId); } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java new file mode 100644 index 0000000..f4f4d7a --- /dev/null +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.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.SystemPriceCity; + +/** + * @author zhibing.pu + * @Date 2025/7/26 9:24 + */ +public interface SystemPriceCityMapper extends BaseMapper<SystemPriceCity> { +} diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java index ef37769..7c7c8a1 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceMapper.java @@ -11,10 +11,11 @@ /** * 获取价格 + * * @param companyId * @param type * @return */ Map<String, Object> query(@Param("companyId") Integer companyId, @Param("type") Integer type, - @Param("serverCarModelId") Integer serverCarModelId); + @Param("serverCarModelId") Integer serverCarModelId, @Param("systemPriceCityId") Integer systemPriceCityId); } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml index 71294e3..2dba947 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CancleOrderMapper.xml @@ -21,6 +21,6 @@ money as money, `type` as `type`, orderType as orderType - from t_sys_cancle_order where `type` = #{type} and orderType = #{orderType} and companyId = #{companyId} + from t_sys_cancle_order where `type` = #{type} and orderType = #{orderType} and openCityId = #{openCityId} </select> </mapper> \ No newline at end of file diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml index 04d7e4c..d68cc89 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/PushOrderMapper.xml @@ -6,6 +6,7 @@ <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.PushOrder"> <id column="id" property="id"/> <result column="companyId" property="companyId"/> + <result column="openCityId" property="openCityId"/> <result column="pushDistance" property="pushDistance"/> <result column="pushTime" property="pushTime"/> <result column="driverProportion" property="driverProportion"/> @@ -18,12 +19,13 @@ select id as id, companyId as companyId, + openCityId as openCityId, pushDistance as pushDistance, pushTime as pushTime, driverProportion as driverProportion, `type` as `type`, pushType as pushType - from t_sys_push_order where companyId = #{companyId} + from t_sys_push_order where openCityId = #{openCityId} <if test="null != type"> and `type` = #{type} </if> diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml index 0311370..c35dab2 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SysIntegralMapper.xml @@ -6,12 +6,13 @@ <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SysIntegral"> <id column="id" property="id" /> <result column="companyId" property="companyId" /> + <result column="openCityId" property="openCityId" /> <result column="integral" property="integral" /> </resultMap> <select id="query" resultType="SysIntegral"> - select * from t_sys_integral where companyId = #{companyId} + select * from t_sys_integral where openCityId = #{openCityId} </select> </mapper> \ No newline at end of file diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml new file mode 100644 index 0000000..5fbb1c7 --- /dev/null +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml @@ -0,0 +1,5 @@ +<?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.SystemPriceCityMapper"> + +</mapper> \ No newline at end of file diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml index e79ec0a..9420c80 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceMapper.xml @@ -33,5 +33,8 @@ <if test="null != serverCarModelId"> and serverCarModelId = #{serverCarModelId} </if> + <if test="null != systemPriceCityId"> + and systemPriceCityId = #{systemPriceCityId} + </if> </select> </mapper> \ No newline at end of file diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java index d379e59..c11ae70 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/CancleOrder.java @@ -10,95 +10,108 @@ */ @TableName("t_sys_cancle_order") public class CancleOrder { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - @TableField("id") - private Integer id; - /** - * 企业id - */ - @TableField("companyId") - private Integer companyId; - /** - * 时间(分钟) - */ - @TableField("minuteNum") - private Integer minuteNum; - /** - * 金额 - */ - @TableField("money") - private Double money; - /** - * 类型(1=取消,2=预约取消) - */ - @TableField("type") - private Integer type; - /** - * 订单类型(1=专车,2=出租车) - */ - @TableField("orderType") - private Integer orderType; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getCompanyId() { - return companyId; - } - - public void setCompanyId(Integer companyId) { - this.companyId = companyId; - } - - public Integer getMinuteNum() { - return minuteNum; - } - - public void setMinuteNum(Integer minuteNum) { - this.minuteNum = minuteNum; - } - - public Double getMoney() { - return money; - } - - public void setMoney(Double money) { - this.money = money; - } - - public Integer getType() { - return type; - } - - public void setType(Integer type) { - this.type = type; - } - - public Integer getOrderType() { - return orderType; - } - - public void setOrderType(Integer orderType) { - this.orderType = orderType; - } - - @Override - public String toString() { - return "CancleOrder{" + - "id=" + id + - ", companyId=" + companyId + - ", minuteNum=" + minuteNum + - ", money=" + money + - ", type=" + type + - ", orderType=" + orderType + - '}'; - } + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + @TableField("id") + private Integer id; + /** + * 企业id + */ + @TableField("companyId") + private Integer companyId; + /** + * 开通城市id + */ + @TableField("openCityId") + private Integer openCityId; + /** + * 时间(分钟) + */ + @TableField("minuteNum") + private Integer minuteNum; + /** + * 金额 + */ + @TableField("money") + private Double money; + /** + * 类型(1=取消,2=预约取消) + */ + @TableField("type") + private Integer type; + /** + * 订单类型(1=专车,2=出租车) + */ + @TableField("orderType") + private Integer orderType; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + } + + public Integer getOpenCityId() { + return openCityId; + } + + public void setOpenCityId(Integer openCityId) { + this.openCityId = openCityId; + } + + public Integer getMinuteNum() { + return minuteNum; + } + + public void setMinuteNum(Integer minuteNum) { + this.minuteNum = minuteNum; + } + + public Double getMoney() { + return money; + } + + public void setMoney(Double money) { + this.money = money; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getOrderType() { + return orderType; + } + + public void setOrderType(Integer orderType) { + this.orderType = orderType; + } + + @Override + public String toString() { + return "CancleOrder{" + + "id=" + id + + ", companyId=" + companyId + + ", minuteNum=" + minuteNum + + ", money=" + money + + ", type=" + type + + ", orderType=" + orderType + + '}'; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java index 7069fa4..69509f2 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Phone.java @@ -10,81 +10,94 @@ */ @TableName("t_phone") public class Phone { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - @TableField("id") - private Integer id; - /** - * 数据类型(1:报警电话,2:投诉电话) - */ - @TableField("type") - private Integer type; - /** - * 是否是平台数据(1=是,2=否) - */ - @TableField("platform") - private Integer platform; - /** - * 电话 - */ - @TableField("phone") - private String phone; - /** - * 企业id - */ - @TableField("companyId") - private Integer companyId; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getType() { - return type; - } - - public void setType(Integer type) { - this.type = type; - } - - public String getPhone() { - return phone; - } - - public void setPhone(String phone) { - this.phone = phone; - } - - public Integer getPlatform() { - return platform; - } - - public void setPlatform(Integer platform) { - this.platform = platform; - } - - public Integer getCompanyId() { - return companyId; - } - - public void setCompanyId(Integer companyId) { - this.companyId = companyId; - } - - @Override - public String toString() { - return "Phone{" + - "id=" + id + - ", type=" + type + - ", platform=" + platform + - ", phone='" + phone + '\'' + - ", companyId=" + companyId + - '}'; - } + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + @TableField("id") + private Integer id; + /** + * 数据类型(1:报警电话,2:投诉电话) + */ + @TableField("type") + private Integer type; + /** + * 是否是平台数据(1=是,2=否) + */ + @TableField("platform") + private Integer platform; + /** + * 电话 + */ + @TableField("phone") + private String phone; + /** + * 企业id + */ + @TableField("companyId") + private Integer companyId; + /** + * 开通城市id + */ + @TableField("openCityId") + private Integer openCityId; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Integer getPlatform() { + return platform; + } + + public void setPlatform(Integer platform) { + this.platform = platform; + } + + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + } + + public Integer getOpenCityId() { + return openCityId; + } + + public void setOpenCityId(Integer openCityId) { + this.openCityId = openCityId; + } + + @Override + public String toString() { + return "Phone{" + + "id=" + id + + ", type=" + type + + ", platform=" + platform + + ", phone='" + phone + '\'' + + ", companyId=" + companyId + + '}'; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java index 64df32c..2da7315 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/PushOrder.java @@ -10,109 +10,122 @@ */ @TableName("t_sys_push_order") public class PushOrder { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - @TableField("id") - private Integer id; - /** - * 企业id - */ - @TableField("companyId") - private Integer companyId; - /** - * 推单距离(公里) - */ - @TableField("pushDistance") - private Double pushDistance; - /** - * 推单时间(秒) - */ - @TableField("pushTime") - private Integer pushTime; - /** - * 推单占所有司机百分比 - */ - @TableField("driverProportion") - private Double driverProportion; - /** - * 推单次数(1=第一轮,2=第二轮,3=第三轮) - */ - @TableField("type") - private Integer type; - /** - * 推单单据类型(1=专车,2=出租车) - */ - @TableField("pushType") - private Integer pushType; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getCompanyId() { - return companyId; - } - - public void setCompanyId(Integer companyId) { - this.companyId = companyId; - } - - public Double getPushDistance() { - return pushDistance; - } - - public void setPushDistance(Double pushDistance) { - this.pushDistance = pushDistance; - } - - public Integer getPushTime() { - return pushTime; - } - - public void setPushTime(Integer pushTime) { - this.pushTime = pushTime; - } - - public Double getDriverProportion() { - return driverProportion; - } - - public void setDriverProportion(Double driverProportion) { - this.driverProportion = driverProportion; - } - - public Integer getType() { - return type; - } - - public void setType(Integer type) { - this.type = type; - } - - public Integer getPushType() { - return pushType; - } - - public void setPushType(Integer pushType) { - this.pushType = pushType; - } - - @Override - public String toString() { - return "PushOrder{" + - "id=" + id + - ", companyId=" + companyId + - ", pushDistance=" + pushDistance + - ", pushTime=" + pushTime + - ", driverProportion=" + driverProportion + - ", type=" + type + - ", pushType=" + pushType + - '}'; - } + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + @TableField("id") + private Integer id; + /** + * 企业id + */ + @TableField("companyId") + private Integer companyId; + /** + * 开通城市id + */ + @TableField("openCityId") + private Integer openCityId; + /** + * 推单距离(公里) + */ + @TableField("pushDistance") + private Double pushDistance; + /** + * 推单时间(秒) + */ + @TableField("pushTime") + private Integer pushTime; + /** + * 推单占所有司机百分比 + */ + @TableField("driverProportion") + private Double driverProportion; + /** + * 推单次数(1=第一轮,2=第二轮,3=第三轮) + */ + @TableField("type") + private Integer type; + /** + * 推单单据类型(1=专车,2=出租车) + */ + @TableField("pushType") + private Integer pushType; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + } + + public Integer getOpenCityId() { + return openCityId; + } + + public void setOpenCityId(Integer openCityId) { + this.openCityId = openCityId; + } + + public Double getPushDistance() { + return pushDistance; + } + + public void setPushDistance(Double pushDistance) { + this.pushDistance = pushDistance; + } + + public Integer getPushTime() { + return pushTime; + } + + public void setPushTime(Integer pushTime) { + this.pushTime = pushTime; + } + + public Double getDriverProportion() { + return driverProportion; + } + + public void setDriverProportion(Double driverProportion) { + this.driverProportion = driverProportion; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getPushType() { + return pushType; + } + + public void setPushType(Integer pushType) { + this.pushType = pushType; + } + + @Override + public String toString() { + return "PushOrder{" + + "id=" + id + + ", companyId=" + companyId + + ", pushDistance=" + pushDistance + + ", pushTime=" + pushTime + + ", driverProportion=" + driverProportion + + ", type=" + type + + ", pushType=" + pushType + + '}'; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java index 0b46a6a..25f82c4 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SysIntegral.java @@ -10,53 +10,66 @@ */ @TableName("t_sys_integral") public class SysIntegral { - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - @TableField("id") - private Integer id; - /** - * 企业id - */ - @TableField("companyId") - private Integer companyId; - /** - * 积分 - */ - @TableField("integral") - private Integer integral; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getCompanyId() { - return companyId; - } - - public void setCompanyId(Integer companyId) { - this.companyId = companyId; - } - - public Integer getIntegral() { - return integral; - } - - public void setIntegral(Integer integral) { - this.integral = integral; - } - - @Override - public String toString() { - return "SysIntegral{" + - "id=" + id + - ", companyId=" + companyId + - ", integral=" + integral + - '}'; - } + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + @TableField("id") + private Integer id; + /** + * 企业id + */ + @TableField("companyId") + private Integer companyId; + /** + * 开通城市id + */ + @TableField("openCityId") + private Integer openCityId; + /** + * 积分 + */ + @TableField("integral") + private Integer integral; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + } + + public Integer getOpenCityId() { + return openCityId; + } + + public void setOpenCityId(Integer openCityId) { + this.openCityId = openCityId; + } + + public Integer getIntegral() { + return integral; + } + + public void setIntegral(Integer integral) { + this.integral = integral; + } + + @Override + public String toString() { + return "SysIntegral{" + + "id=" + id + + ", companyId=" + companyId + + ", integral=" + integral + + '}'; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java index 5a88fa9..ce3e69f 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPrice.java @@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; +import lombok.Data; /** * 服务价格规则 */ +@Data @TableName("t_system_price") public class SystemPrice { /** @@ -17,6 +19,11 @@ @TableField("id") private Integer id; /** + * 价格城市id + */ + @TableField("systemPriceCityId") + private Integer systemPriceCityId; + /** * 业务类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车) */ @TableField("type") diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java new file mode 100644 index 0000000..b59ce0a --- /dev/null +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java @@ -0,0 +1,42 @@ +package com.stylefeng.guns.modular.system.model; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import lombok.Data; /** + * @author zhibing.pu + * @Date 2025/7/26 9:16 + */ +@Data +@TableName("t_system_price_city") +public class SystemPriceCity extends BaseBean { + /** + * 省编号 + */ + @TableField("areaCode") + private String areaCode; + /** + * 省名称 + */ + @TableField("areaName") + private String areaName; + /** + * 市编号 + */ + @TableField("cityCode") + private String cityCode; + /** + * 市名称 + */ + @TableField("cityName") + private String cityName; + /** + * 区县编号 + */ + @TableField("provinceCode") + private String provinceCode; + /** + * 区县名称 + */ + @TableField("provinceName") + private String provinceName; +} diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbShowModular.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbShowModular.java index 2c3c127..1600f54 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbShowModular.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbShowModular.java @@ -1,9 +1,10 @@ package com.stylefeng.guns.modular.system.model; -import com.baomidou.mybatisplus.enums.IdType; -import com.baomidou.mybatisplus.annotations.TableId; 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 io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -18,72 +19,85 @@ */ @TableName("tb_show_modular") public class TbShowModular extends Model<TbShowModular> { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - /** - * 类型(1=招募,2=租车,3=买车,4=出租个人车辆,5=卖车,6=商家中心,7=打车卡) - */ - @ApiModelProperty("类型(1=招募,2=租车,3=买车,4=出租个人车辆,5=卖车,6=商家中心,7=打车卡)") - private Integer type; - /** - * 司机是否显示(1=是,2=否) - */ - @ApiModelProperty("司机是否显示(1=是,2=否)") - private Integer driverShow; - /** - * 用户是否显示(1=是,2=否) - */ - @ApiModelProperty("用户是否显示(1=是,2=否)") - private Integer userShow; - - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getType() { - return type; - } - - public void setType(Integer type) { - this.type = type; - } - - public Integer getDriverShow() { - return driverShow; - } - - public void setDriverShow(Integer driverShow) { - this.driverShow = driverShow; - } - - public Integer getUserShow() { - return userShow; - } - - public void setUserShow(Integer userShow) { - this.userShow = userShow; - } - - @Override - protected Serializable pkVal() { - return this.id; - } - - @Override - public String toString() { - return "TbShowModular{" + - "id=" + id + - ", type=" + type + - ", driverShow=" + driverShow + - ", userShow=" + userShow + - "}"; - } + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 类型(1=招募,2=租车,3=买车,4=出租个人车辆,5=卖车,6=商家中心,7=打车卡) + */ + @ApiModelProperty("类型(1=招募,2=租车,3=买车,4=出租个人车辆,5=卖车,6=商家中心,7=打车卡)") + private Integer type; + /** + * 司机是否显示(1=是,2=否) + */ + @ApiModelProperty("司机是否显示(1=是,2=否)") + private Integer driverShow; + /** + * 用户是否显示(1=是,2=否) + */ + @ApiModelProperty("用户是否显示(1=是,2=否)") + private Integer userShow; + /** + * 开通城市id + */ + @TableField("openCityId") + private Integer openCityId; + + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getDriverShow() { + return driverShow; + } + + public void setDriverShow(Integer driverShow) { + this.driverShow = driverShow; + } + + public Integer getUserShow() { + return userShow; + } + + public void setUserShow(Integer userShow) { + this.userShow = userShow; + } + + public Integer getOpenCityId() { + return openCityId; + } + + public void setOpenCityId(Integer openCityId) { + this.openCityId = openCityId; + } + + @Override + protected Serializable pkVal() { + return this.id; + } + + @Override + public String toString() { + return "TbShowModular{" + + "id=" + id + + ", type=" + type + + ", driverShow=" + driverShow + + ", userShow=" + userShow + + "}"; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbSpellOrderRule.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbSpellOrderRule.java index e64f97d..4f85839 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbSpellOrderRule.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TbSpellOrderRule.java @@ -1,9 +1,11 @@ package com.stylefeng.guns.modular.system.model; -import com.baomidou.mybatisplus.enums.IdType; -import com.baomidou.mybatisplus.annotations.TableId; 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; /** @@ -16,56 +18,69 @@ */ @TableName("tb_spell_order_rule") public class TbSpellOrderRule extends Model<TbSpellOrderRule> { - - private static final long serialVersionUID = 1L; - - @TableId(value = "id", type = IdType.AUTO) - private Integer id; - /** - * 公司id - */ - private Integer companyId; - /** - * 规则每个输入框为一个参数{"num1":1,"num2":2.3} - */ - private String content; - - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getCompanyId() { - return companyId; - } - - public void setCompanyId(Integer companyId) { - this.companyId = companyId; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - @Override - protected Serializable pkVal() { - return this.id; - } - - @Override - public String toString() { - return "TbSpellOrderRule{" + - "id=" + id + - ", companyId=" + companyId + - ", content=" + content + - "}"; - } + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 公司id + */ + private Integer companyId; + /** + * 规则每个输入框为一个参数{"num1":1,"num2":2.3} + */ + private String content; + /** + * 开通城市id + */ + @TableField("openCityId") + private Integer openCityId; + + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Integer getOpenCityId() { + return openCityId; + } + + public void setOpenCityId(Integer openCityId) { + this.openCityId = openCityId; + } + + @Override + protected Serializable pkVal() { + return this.id; + } + + @Override + public String toString() { + return "TbSpellOrderRule{" + + "id=" + id + + ", companyId=" + companyId + + ", content=" + content + + "}"; + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java index 6c283b2..5f91734 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ICancleOrderService.java @@ -14,5 +14,5 @@ * @return * @throws Exception */ - CancleOrder query(Integer type, Integer orderType, Integer companyId) throws Exception; + CancleOrder query(Integer type, Integer orderType, Integer openCityId) throws Exception; } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java index 7134db9..16bcdb8 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOpenCityService.java @@ -27,4 +27,7 @@ OpenCity openCity1(String code) throws Exception; + + + OpenCity openCity1(String lon, String lat) throws Exception; } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java index aa1bfc8..31271d2 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IPushOrderService.java @@ -15,5 +15,5 @@ * @return * @throws Exception */ - List<PushOrder> querys(Integer type, Integer pushType, Integer companyId) throws Exception; + List<PushOrder> querys(Integer type, Integer pushType, Integer openCityId) throws Exception; } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java new file mode 100644 index 0000000..213b937 --- /dev/null +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java @@ -0,0 +1,22 @@ +package com.stylefeng.guns.modular.system.service; + +import com.baomidou.mybatisplus.service.IService; +import com.stylefeng.guns.modular.system.model.SystemPriceCity; + +/** + * @author zhibing.pu + * @Date 2025/7/26 9:24 + */ +public interface ISystemPriceCityService extends IService<SystemPriceCity> { + + + /** + * 查询匹配的数据 + * @param provinceCode + * @param cityCode + * @param districtCode + * @return + */ + SystemPriceCity queryOne(String provinceCode, String cityCode, String districtCode); + +} diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java index e2ebe75..c7d8794 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/CancleOrderServiceImpl.java @@ -24,7 +24,7 @@ * @throws Exception */ @Override - public CancleOrder query(Integer type, Integer orderType, Integer companyId) throws Exception { - return cancleOrderMapper.query(type, orderType, companyId); + public CancleOrder query(Integer type, Integer orderType, Integer openCityId) throws Exception { + return cancleOrderMapper.query(type, orderType, openCityId); } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java index 5627905..52b454d 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OpenCityServiceImpl.java @@ -5,12 +5,15 @@ import com.stylefeng.guns.modular.system.dao.OpenCityMapper; import com.stylefeng.guns.modular.system.model.OpenCity; import com.stylefeng.guns.modular.system.service.IOpenCityService; +import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; @Service @@ -18,6 +21,9 @@ @Resource private OpenCityMapper openCityMapper; + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; /** @@ -83,4 +89,11 @@ } return openCities.get(0); } + + @Override + public OpenCity openCity1(String lon, String lat) throws Exception { + Map<String, String> geocode = gdMapGeocodingUtil.geocode(lon, lat); + String districtCode = geocode.get("districtCode"); + return openCity1(districtCode); + } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java index 301b635..82848b5 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PhoneServiceImpl.java @@ -1,14 +1,16 @@ package com.stylefeng.guns.modular.system.service.impl; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; -import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.dao.PhoneMapper; +import com.stylefeng.guns.modular.system.model.OpenCity; import com.stylefeng.guns.modular.system.model.Phone; +import com.stylefeng.guns.modular.system.service.IOpenCityService; import com.stylefeng.guns.modular.system.service.IPhoneService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -19,6 +21,9 @@ @Resource private PhoneMapper phoneMapper; + + @Autowired + private IOpenCityService openCityService; /** * 获取所有系统电话 @@ -27,20 +32,8 @@ */ @Override public List<Phone> queryPhones(String code) throws Exception { - List<Phone> list = new ArrayList<>(); - if(ToolUtil.isNotEmpty(code)){ - String province = code.substring(0, 2) + "0000"; - String city = code.substring(0, 4) + "00"; - - list = phoneMapper.queryPhones(province, city, code); - if(list.size() == 0){ - list = phoneMapper.queryPhones(province, city, null); - } - if(list.size() == 0){ - list = phoneMapper.queryPhones(province, null, null); - } - } - return list; + OpenCity openCity = openCityService.openCity1(code); + return phoneMapper.selectList(new EntityWrapper<Phone>().eq("openCityId", openCity)); } @@ -52,23 +45,12 @@ */ @Override public Map<String, Object> queryCustomerPhone(String code) throws Exception { - String province = code.substring(0, 2) + "0000"; - String city = code.substring(0, 4) + "00"; - Map<String, Object> map = new HashMap<>(); - //平台电话 - Phone query = phoneMapper.query(2, 1, null, null, null); - map.put("platform", null != query ? query.getPhone() : ""); - - //公司 - query = phoneMapper.query(2, 2, province, city, code); - if(query == null){ - query = phoneMapper.query(2, 2, province, city, null); - } - if(query == null){ - query = phoneMapper.query(2, 2, province, null, null); - } - map.put("company", null != query ? query.getPhone() : ""); + OpenCity openCity = openCityService.openCity1(code); + Phone phone = this.selectOne(new EntityWrapper<Phone>().eq("openCityId", openCity).eq("type", 2).eq("platform", 1)); + map.put("platform", null != phone ? phone.getPhone() : ""); + phone = this.selectOne(new EntityWrapper<Phone>().eq("openCityId", openCity).eq("type", 2).eq("platform", 2)); + map.put("company", null != phone ? phone.getPhone() : ""); return map; } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java index 6256d0a..c14ca61 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PushOrderServiceImpl.java @@ -25,7 +25,7 @@ * @throws Exception */ @Override - public List<PushOrder> querys(Integer type, Integer pushType, Integer companyId) throws Exception { - return pushOrderMapper.querys(type, pushType, companyId); + public List<PushOrder> querys(Integer type, Integer pushType, Integer openCityId) throws Exception { + return pushOrderMapper.querys(type, pushType, openCityId); } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java index 8b50879..c02d01d 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ServerCarModelServiceImpl.java @@ -2,18 +2,13 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.modular.system.dao.ServerCarModelMapper; import com.stylefeng.guns.modular.system.dao.SystemPriceMapper; import com.stylefeng.guns.modular.system.model.Company; -import com.stylefeng.guns.modular.system.model.OpenCity; -import com.stylefeng.guns.modular.system.model.OpenCityBusiness; import com.stylefeng.guns.modular.system.model.ServerCarModel; -import com.stylefeng.guns.modular.system.service.ICompanyCityService; -import com.stylefeng.guns.modular.system.service.IOpenCityBusinessService; -import com.stylefeng.guns.modular.system.service.IOpenCityService; -import com.stylefeng.guns.modular.system.service.IServerCarModelService; +import com.stylefeng.guns.modular.system.model.SystemPriceCity; +import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil; import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil; import com.stylefeng.guns.modular.system.util.ResultUtil; @@ -23,39 +18,37 @@ import javax.annotation.Resource; import java.math.BigDecimal; -import java.text.SimpleDateFormat; import java.util.*; @Service public class ServerCarModelServiceImpl extends ServiceImpl<ServerCarModelMapper, ServerCarModel> implements IServerCarModelService { - + @Resource private ServerCarModelMapper serverCarModelMapper; - + + @Resource + private ISystemPriceCityService systemPriceCityService; + @Resource private SystemPriceMapper systemPriceMapper; - + @Autowired private GDMapElectricFenceUtil gdMapElectricFenceUtil; - + @Autowired private GDMapGeocodingUtil gdMapGeocodingUtil; - + @Autowired private ICompanyCityService companyCityService; - + @Autowired private IOpenCityService openCityService; - + @Autowired private IOpenCityBusinessService openCityBusinessService; - - - - - - + + /** * 根据起点和终点获取车型 * @param startLonLat @@ -75,27 +68,27 @@ if(type == 1 && query.getIsSpe() == 2){ return ResultUtil.success(new ArrayList<>()); } - + // TODO: 2023/11/4 无法修改 Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1); - if(null == distance){ + if (null == distance) { return ResultUtil.error("获取预估距离出错", new ArrayList<>()); } String distance1 = distance.get("distance");//距离(米) double distance1_ = Double.valueOf(distance1).doubleValue(); String duration = distance.get("duration");//时间(秒) long duration_ = Long.valueOf(duration).longValue(); - - List<ServerCarModelWarpper> price = this.getPrice(query.getId(), distance1_, duration_, 0, 1); + List<ServerCarModelWarpper> price = this.getPrice(query.getId(), distance1_, duration_, 0, 1, geocode); //添加出租车车型和价格 - ServerCarModelWarpper serverCarModelWarpper = this.getTextPrice(query.getId(), distance1_, duration_, 0, 2); + ServerCarModelWarpper serverCarModelWarpper = this.getTextPrice(query.getId(), distance1_, duration_, 0, 2, geocode); price.add(serverCarModelWarpper); return ResultUtil.success(price); } - - + + /** * 获取业务类型对应的所有服务车型 + * * @param type * @return */ @@ -103,10 +96,11 @@ public List<Map<String, Object>> queryServerCarModels(Integer type) { return serverCarModelMapper.queryServerCarModel(type); } - - + + /** * 计算价格 + * * @param companyId * @param distance * @param duration @@ -115,18 +109,25 @@ * @return * @throws Exception */ - public List<ServerCarModelWarpper> getPrice(Integer companyId, double distance, long duration, long wait, Integer type) throws Exception { + public List<ServerCarModelWarpper> getPrice(Integer companyId, double distance, long duration, long wait, Integer type, Map<String, String> geocode) throws Exception { + String provinceCode = geocode.get("provinceCode"); + String cityCode = geocode.get("cityCode"); + String districtCode = geocode.get("districtCode"); + //获取匹配的城市价格配置 + SystemPriceCity systemPriceCity = systemPriceCityService.queryOne(provinceCode, cityCode, districtCode); + if (null == systemPriceCity) { + return new ArrayList<>(); + } List<Map<String, Object>> list = serverCarModelMapper.queryServerCarModel(type); List<ServerCarModelWarpper> data = new ArrayList<>(); - for(Map<String, Object> map : list){ - Map<String, Object> query1 = systemPriceMapper.query(companyId, type, Integer.valueOf(map.get("id").toString())); - if(null == query1){//排除没有设置价格的车型 + for (Map<String, Object> map : list) { + Map<String, Object> query1 = systemPriceMapper.query(companyId, type, Integer.valueOf(map.get("id").toString()), systemPriceCity.getId()); + if (null == query1) {//排除没有设置价格的车型 continue; } //开始根据不同的方式计算金额 double amount = 0; - if(type == 1){//专车 - + if (type == 1) {//专车 double d = distance / 1000;//实际公里 double t = duration / 60;//实际时间 JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());//等待费 @@ -146,25 +147,25 @@ serverCarModelWarpper.setFareTypeNote3(query1.get("fareTypeNote3").toString()); serverCarModelWarpper.setContentPutOne(contentPutOne); serverCarModelWarpper.setContentNotOne(contentNotOne); - + serverCarModelWarpper.setContentPutTwo(contentPutTwo); serverCarModelWarpper.setContentNotTwo(contentNotTwo); - + serverCarModelWarpper.setContentPutThree(contentPutThree); serverCarModelWarpper.setContentNotThree(contentNotThree); - - + + serverCarModelWarpper.setContentExclusive(contentExclusive); serverCarModelWarpper.setContentPrice(contentPrice); - - serverCarModelWarpper.setAmount(new BigDecimal(this.calculationPrice(contentExclusive,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setBuyNowAmount(new BigDecimal(this.calculationPrice(contentPrice,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setPutTogetherOneAmount(new BigDecimal(this.calculationPrice(contentPutOne,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setNotAssembledOneAmount(new BigDecimal(this.calculationPrice(contentNotOne,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setPutTogetherTwoAmount(new BigDecimal(this.calculationPrice(contentPutTwo,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setNotAssembledTwoAmount(new BigDecimal(this.calculationPrice(contentNotTwo,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setPutTogetherThreeAmount(new BigDecimal(this.calculationPrice(contentPutThree,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); - serverCarModelWarpper.setNotAssembledThreeAmount(new BigDecimal(this.calculationPrice(contentNotThree,distance,duration,wait,waitMoney)).setScale(BigDecimal.ROUND_HALF_EVEN, 2).doubleValue()); + + serverCarModelWarpper.setAmount(this.calculationPrice(contentExclusive, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setBuyNowAmount(this.calculationPrice(contentPrice, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setPutTogetherOneAmount(this.calculationPrice(contentPutOne, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setNotAssembledOneAmount(this.calculationPrice(contentNotOne, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setPutTogetherTwoAmount(this.calculationPrice(contentPutTwo, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setNotAssembledTwoAmount(this.calculationPrice(contentNotTwo, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setPutTogetherThreeAmount(this.calculationPrice(contentPutThree, distance, duration, wait, waitMoney)); + serverCarModelWarpper.setNotAssembledThreeAmount(this.calculationPrice(contentNotThree, distance, duration, wait, waitMoney)); serverCarModelWarpper.setMileage(d); serverCarModelWarpper.setDuration(t); serverCarModelWarpper.setIsOpen(Integer.parseInt(query1.get("isOpen").toString())); @@ -180,15 +181,22 @@ } return data; } - - - - - public ServerCarModelWarpper getTextPrice(Integer companyId, double distance, long duration, long wait, Integer type) throws Exception { - Map<String, Object> query1 = systemPriceMapper.query(companyId, type, null); - if(null == query1){//排除没有设置价格的车型 + + + public ServerCarModelWarpper getTextPrice(Integer companyId, double distance, long duration, long wait, Integer type, Map<String, String> geocode) throws Exception { + String provinceCode = geocode.get("provinceCode"); + String cityCode = geocode.get("cityCode"); + String districtCode = geocode.get("districtCode"); + //获取匹配的城市价格配置 + SystemPriceCity systemPriceCity = systemPriceCityService.queryOne(provinceCode, cityCode, districtCode); + if (null == systemPriceCity) { return null; } + Map<String, Object> query1 = systemPriceMapper.query(companyId, type, null, systemPriceCity.getId()); + if (null == query1) {//排除没有设置价格的车型 + return null; + } + Map<String, Object> map = new HashMap<>(); double d = distance / 1000;//实际公里 double t = duration / 60;//实际时间 JSONObject jsonObject = JSON.parseObject(query1.get("content").toString());//等待费 @@ -240,24 +248,36 @@ } Double amount = 0D; - if(System.currentTimeMillis() > start_date && System.currentTimeMillis() <= end_date){ + if (System.currentTimeMillis() > start_date && System.currentTimeMillis() <= end_date) { amount = num7; - if(d > num8){ - BigDecimal multiply = new BigDecimal(d).subtract(new BigDecimal(num8)).multiply(new BigDecimal(num9)); - if(d > num4){ - multiply = new BigDecimal(d).subtract(new BigDecimal(num4)).multiply(new BigDecimal(num5)).add(multiply); + BigDecimal multiply = BigDecimal.ZERO; + BigDecimal yt = BigDecimal.ZERO; + if (d > num8) { + multiply = new BigDecimal(d).subtract(new BigDecimal(num8)).multiply(new BigDecimal(num9)); + if (d > num4) { + yt = new BigDecimal(d).subtract(new BigDecimal(num4)).multiply(new BigDecimal(num5)); } - amount = new BigDecimal(num7).add(multiply).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); + amount = new BigDecimal(num7).add(multiply).add(yt).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); } - }else{ + map.put("qibujia", num7); + map.put("lichengfei", multiply.doubleValue()); + map.put("yuantufei", yt.doubleValue()); + map.put("zongfeiyong", amount); + } else { amount = num1; - if(d > num2){ - BigDecimal multiply = new BigDecimal(d).subtract(new BigDecimal(num2)).multiply(new BigDecimal(num3)); - if(d > num4){ - multiply = new BigDecimal(d).subtract(new BigDecimal(num4)).multiply(new BigDecimal(num5)).add(multiply); + BigDecimal multiply = BigDecimal.ZERO; + BigDecimal yt = BigDecimal.ZERO; + if (d > num2) { + multiply = new BigDecimal(d).subtract(new BigDecimal(num2)).multiply(new BigDecimal(num3)); + if (d > num4) { + yt = new BigDecimal(d).subtract(new BigDecimal(num4)).multiply(new BigDecimal(num5)); } - amount = new BigDecimal(num1).add(multiply).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); + amount = new BigDecimal(num1).add(multiply).add(yt).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); } + map.put("qibujia", num1); + map.put("lichengfei", multiply.doubleValue()); + map.put("yuantufei", yt.doubleValue()); + map.put("zongfeiyong", amount); } List<Map<String, Object>> list = serverCarModelMapper.queryServerCarModel(4); String isCheck = "0"; @@ -268,7 +288,7 @@ ServerCarModelWarpper serverCarModelWarpper = new ServerCarModelWarpper(); serverCarModelWarpper.setId(0); serverCarModelWarpper.setName("出租车"); - serverCarModelWarpper.setAmount(amount); + serverCarModelWarpper.setAmount(map); serverCarModelWarpper.setDx_check(Integer.valueOf(isCheck)); serverCarModelWarpper.setContentPutOne(new JSONObject()); serverCarModelWarpper.setContentNotOne(new JSONObject()); @@ -278,15 +298,13 @@ serverCarModelWarpper.setContentNotThree(new JSONObject()); serverCarModelWarpper.setContentExclusive(new JSONObject()); serverCarModelWarpper.setContentPrice(new JSONObject()); - + return serverCarModelWarpper; } - - - - - public Double calculationPrice(JSONObject rule, double distance, long duration, long wait,Double waitMoney) throws Exception { - double amount = 0; + + + public Map<String, Object> calculationPrice(JSONObject rule, double distance, long duration, long wait, Double waitMoney) throws Exception { + Map<String, Object> map = new HashMap<>(); //等待费 Date date = new Date(); double d = distance / 1000;//实际公里 @@ -296,30 +314,36 @@ double yt1 = 0;//远途1段 double yt2 = 0;//远途2段 double yt3 = 0;//远途3段 - - + + //夜间服务处理逻辑 Calendar s = Calendar.getInstance(); s.setTime(date); s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num14").split(" - ")[0].split(":")[0])); s.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num14").split(" - ")[0].split(":")[1])); - + Calendar e = Calendar.getInstance(); e.setTime(date); e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num14").split(" - ")[1].split(":")[0])); e.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num14").split(" - ")[1].split(":")[1])); - - if(date.getTime() > s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){ - if(d > rule.getDouble("num6")){ + + if (date.getTime() > s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()) { + if (d > rule.getDouble("num6")) { yt1 = rule.getDouble("num18") * (d - rule.getDouble("num6")); } - if(d > rule.getDouble("num9")){ + if (d > rule.getDouble("num9")) { yt2 = rule.getDouble("num19") * (d - rule.getDouble("num9")); } - if(d > rule.getDouble("num12")){ + if (d > rule.getDouble("num12")) { yt3 = rule.getDouble("num20") * (d - rule.getDouble("num12")); } - amount = rule.getDouble("num15") + (d1 * rule.getDouble("num16")) + (t1 * rule.getDouble("num17")) + (wait * waitMoney) + yt1 + yt2 + yt3; + double amount = rule.getDouble("num15") + (d1 * rule.getDouble("num16")) + (t1 * rule.getDouble("num17")) + (wait * waitMoney) + yt1 + yt2 + yt3; + map.put("qibujia", rule.getDouble("num15")); + map.put("lichengfei", d1 * rule.getDouble("num16")); + map.put("shichangfei", t1 * rule.getDouble("num17")); + map.put("dengdaifei", wait * waitMoney); + map.put("yuantufei", yt1 + yt2 + yt3); + map.put("zongfeiyong", amount); }else{ Calendar s1 = Calendar.getInstance(); s1.setTime(date); @@ -330,42 +354,54 @@ e1.setTime(date); e1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num21").split(" - ")[1].split(":")[0])); e1.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num21").split(" - ")[1].split(":")[1])); - + Calendar s2 = Calendar.getInstance(); s2.setTime(date); s2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num22").split(" - ")[0].split(":")[0])); s2.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num22").split(" - ")[0].split(":")[1])); - + Calendar e2 = Calendar.getInstance(); e2.setTime(date); e2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num22").split(" - ")[1].split(":")[0])); e2.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num22").split(" - ")[1].split(":")[1])); //高峰时段处理逻辑 - if((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())){ - if(d > rule.getDouble("num6")){ + if ((date.getTime() > s1.getTimeInMillis() && date.getTime() < e1.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())) { + if (d > rule.getDouble("num6")) { yt1 = rule.getDouble("num26") * (d - rule.getDouble("num6")); } - if(d > rule.getDouble("num9")){ + if (d > rule.getDouble("num9")) { yt2 = rule.getDouble("num27") * (d - rule.getDouble("num9")); } - if(d > rule.getDouble("num12")){ + if (d > rule.getDouble("num12")) { yt3 = rule.getDouble("num28") * (d - rule.getDouble("num12")); } - amount = rule.getDouble("num23") + (d1 * rule.getDouble("num24")) + (t1 * rule.getDouble("num25")) + (wait * waitMoney) + yt1 + yt2 + yt3; + double amount = rule.getDouble("num23") + (d1 * rule.getDouble("num24")) + (t1 * rule.getDouble("num25")) + (wait * waitMoney) + yt1 + yt2 + yt3; + map.put("qibujia", rule.getDouble("num23")); + map.put("lichengfei", d1 * rule.getDouble("num24")); + map.put("shichangfei", t1 * rule.getDouble("num25")); + map.put("dengdaifei", wait * waitMoney); + map.put("yuantufei", yt1 + yt2 + yt3); + map.put("zongfeiyong", amount); }else{ //其他时间段的计算 - if(d > rule.getDouble("num6")){ + if (d > rule.getDouble("num6")) { yt1 = rule.getDouble("num8") * (d - rule.getDouble("num6")); } - if(d > rule.getDouble("num9")){ + if (d > rule.getDouble("num9")) { yt2 = rule.getDouble("num11") * (d - rule.getDouble("num9")); } - if(d > rule.getDouble("num12")){ + if (d > rule.getDouble("num12")) { yt3 = rule.getDouble("num13") * (d - rule.getDouble("num12")); } - amount = rule.getDouble("num1") + (d1 * rule.getDouble("num4")) + (t1 * rule.getDouble("num5")) + (wait * waitMoney) + yt1 + yt2 + yt3; + double amount = rule.getDouble("num1") + (d1 * rule.getDouble("num4")) + (t1 * rule.getDouble("num5")) + (wait * waitMoney) + yt1 + yt2 + yt3; + map.put("qibujia", rule.getDouble("num1")); + map.put("lichengfei", d1 * rule.getDouble("num4")); + map.put("shichangfei", t1 * rule.getDouble("num5")); + map.put("dengdaifei", wait * waitMoney); + map.put("yuantufei", yt1 + yt2 + yt3); + map.put("zongfeiyong", amount); } } - return amount; + return map; } } diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java new file mode 100644 index 0000000..be8b967 --- /dev/null +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java @@ -0,0 +1,36 @@ +package com.stylefeng.guns.modular.system.service.impl; + + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.stylefeng.guns.modular.system.dao.SystemPriceCityMapper; +import com.stylefeng.guns.modular.system.model.SystemPriceCity; +import com.stylefeng.guns.modular.system.service.ISystemPriceCityService; +import org.springframework.stereotype.Service; + +/** + * @author zhibing.pu + * @Date 2025/7/26 9:25 + */ +@Service +public class SystemPriceCityServiceImpl extends ServiceImpl<SystemPriceCityMapper, SystemPriceCity> implements ISystemPriceCityService { + + + /** + * 查询匹配数据 + * @param provinceCode + * @param cityCode + * @param districtCode + * @return + */ + @Override + public SystemPriceCity queryOne(String provinceCode, String cityCode, String districtCode) { + SystemPriceCity systemPriceCity = this.selectOne(new EntityWrapper<SystemPriceCity>().eq("areaCode", provinceCode).eq("cityCode", cityCode).eq("provinceCode", districtCode)); + if(null == systemPriceCity){ + systemPriceCity = this.selectOne(new EntityWrapper<SystemPriceCity>().eq("areaCode", provinceCode).eq("cityCode", cityCode)); + if(null == systemPriceCity){ + systemPriceCity = this.selectOne(new EntityWrapper<SystemPriceCity>().eq("areaCode", provinceCode)); + } + } + return systemPriceCity; + }} diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java index 151d17a..b149ee8 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; -import com.stylefeng.guns.core.common.constant.state.Order; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.dao.CarMapper; @@ -12,7 +11,6 @@ import com.stylefeng.guns.modular.system.dao.SystemPriceMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; -import com.stylefeng.guns.modular.taxi.model.TransactionDetails; import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -146,7 +144,7 @@ public void operatePay(Integer orderId){ OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - Map<String, Object> query = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId()); + Map<String, Object> query = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId(), null); Car car = carMapper.selectById(orderPrivateCar.getCarId()); ServerCarModel serverCarModel = serverCarModelMapper.selectById(orderPrivateCar.getServerCarModelId()); // TransactionDetails transactionDetails = transactionDetailsService.selectById(new EntityWrapper<TransactionDetails>().eq("orderId", orderId).eq("orderType", 1)); @@ -292,7 +290,7 @@ * @throws Exception */ private Map<String, Double> setMoney(OrderPrivateCar orderPrivateCar) { - Map<String, Object> query1 = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId()); + Map<String, Object> query1 = systemPriceMapper.query(orderPrivateCar.getCompanyId(), 1, orderPrivateCar.getServerCarModelId(), null); Map<String, Double> map = new HashMap<>(); //开始根据不同的方式计算金额 double amount1 = 0; diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java index fdcf7de..dceaf17 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java @@ -16,7 +16,7 @@ /** * 私钥地址 */ - String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem"; + String privateKeyPath = "C:\\Users\\Administrator\\Desktop\\private_key_test.pem"; /** * 私钥地址 */ diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java index 3079522..ab9f539 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/ServerCarModelWarpper.java @@ -1,7 +1,6 @@ package com.stylefeng.guns.modular.system.warpper; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -19,28 +18,28 @@ @ApiModelProperty("车型照片") private String img; @ApiModelProperty("预估金额-专车对应独享") - private Double amount; + private Map<String, Object> amount; @ApiModelProperty("包车的价格") private String price; @ApiModelProperty("预估里程(公里)") private Double mileage; @ApiModelProperty("预估时间(分钟)") private Double duration; - + @ApiModelProperty("预估金额-专车对应一口价") - private Double buyNowAmount; + private Map<String, Object> buyNowAmount; @ApiModelProperty("预估金额-专车对应一人拼成价格") - private Double putTogetherOneAmount; + private Map<String, Object> putTogetherOneAmount; @ApiModelProperty("预估金额-专车对应一人未拼成价格") - private Double notAssembledOneAmount; + private Map<String, Object> notAssembledOneAmount; @ApiModelProperty("预估金额-专车对应两人拼成价格") - private Double putTogetherTwoAmount; + private Map<String, Object> putTogetherTwoAmount; @ApiModelProperty("预估金额-专车对应两人未拼成价格") - private Double notAssembledTwoAmount; + private Map<String, Object> notAssembledTwoAmount; @ApiModelProperty("预估金额-专车对应三人拼成价格") - private Double putTogetherThreeAmount; + private Map<String, Object> putTogetherThreeAmount; @ApiModelProperty("预估金额-专车对应三人未拼成价格") - private Double notAssembledThreeAmount; + private Map<String, Object> notAssembledThreeAmount; @ApiModelProperty("是否开启拼车(1=是,2=否)") private Integer isOpen; @@ -174,79 +173,79 @@ public void setIsOpenExclusive(Integer isOpenExclusive) { this.isOpenExclusive = isOpenExclusive; } - + public Integer getIsOpenPrice() { return isOpenPrice; } - + public void setIsOpenPrice(Integer isOpenPrice) { this.isOpenPrice = isOpenPrice; } - - public Double getBuyNowAmount() { + + public Map<String, Object> getBuyNowAmount() { return buyNowAmount; } - - public void setBuyNowAmount(Double buyNowAmount) { + + public void setBuyNowAmount(Map<String, Object> buyNowAmount) { this.buyNowAmount = buyNowAmount; } - - public Double getPutTogetherOneAmount() { + + public Map<String, Object> getPutTogetherOneAmount() { return putTogetherOneAmount; } - - public void setPutTogetherOneAmount(Double putTogetherOneAmount) { + + public void setPutTogetherOneAmount(Map<String, Object> putTogetherOneAmount) { this.putTogetherOneAmount = putTogetherOneAmount; } - - public Double getNotAssembledOneAmount() { + + public Map<String, Object> getNotAssembledOneAmount() { return notAssembledOneAmount; } - - public void setNotAssembledOneAmount(Double notAssembledOneAmount) { + + public void setNotAssembledOneAmount(Map<String, Object> notAssembledOneAmount) { this.notAssembledOneAmount = notAssembledOneAmount; } - - public Double getPutTogetherTwoAmount() { + + public Map<String, Object> getPutTogetherTwoAmount() { return putTogetherTwoAmount; } - - public void setPutTogetherTwoAmount(Double putTogetherTwoAmount) { + + public void setPutTogetherTwoAmount(Map<String, Object> putTogetherTwoAmount) { this.putTogetherTwoAmount = putTogetherTwoAmount; } - - public Double getNotAssembledTwoAmount() { + + public Map<String, Object> getNotAssembledTwoAmount() { return notAssembledTwoAmount; } - - public void setNotAssembledTwoAmount(Double notAssembledTwoAmount) { + + public void setNotAssembledTwoAmount(Map<String, Object> notAssembledTwoAmount) { this.notAssembledTwoAmount = notAssembledTwoAmount; } - - public Double getPutTogetherThreeAmount() { + + public Map<String, Object> getPutTogetherThreeAmount() { return putTogetherThreeAmount; } - - public void setPutTogetherThreeAmount(Double putTogetherThreeAmount) { + + public void setPutTogetherThreeAmount(Map<String, Object> putTogetherThreeAmount) { this.putTogetherThreeAmount = putTogetherThreeAmount; } - - public Double getNotAssembledThreeAmount() { + + public Map<String, Object> getNotAssembledThreeAmount() { return notAssembledThreeAmount; } - - public void setNotAssembledThreeAmount(Double notAssembledThreeAmount) { + + public void setNotAssembledThreeAmount(Map<String, Object> notAssembledThreeAmount) { this.notAssembledThreeAmount = notAssembledThreeAmount; } - + public Integer getIsOpen() { return isOpen; } - + public void setIsOpen(Integer isOpen) { this.isOpen = isOpen; } - + public Integer getId() { return id; } @@ -262,31 +261,31 @@ public void setName(String name) { this.name = name; } - + public String getImg() { return img; } - + public void setImg(String img) { this.img = img; } - - public Double getAmount() { + + public Map<String, Object> getAmount() { return amount; } - - public void setAmount(Double amount) { + + public void setAmount(Map<String, Object> amount) { this.amount = amount; } - + public String getPrice() { return price; } - + public void setPrice(String price) { this.price = price; } - + public Double getMileage() { return mileage; } @@ -346,7 +345,6 @@ serverCarModelWarpper.setId(null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : 0); serverCarModelWarpper.setName(null != map.get("name") ? map.get("name").toString() : ""); serverCarModelWarpper.setImg(null != map.get("img") ? map.get("img").toString() : ""); - serverCarModelWarpper.setAmount(null != map.get("amount") ? Double.valueOf(map.get("amount").toString()) : 0); serverCarModelWarpper.setPrice(null != map.get("price") ? map.get("price").toString() : ""); serverCarModelWarpper.setMileage(null != map.get("mileage") ? Double.valueOf(map.get("mileage").toString()) : 0); serverCarModelWarpper.setDuration(null != map.get("duration") ? Double.valueOf(map.get("duration").toString()) : 0); diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java index 9107f6f..49702bf 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java @@ -56,544 +56,547 @@ @Service @Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class OrderTaxiServiceImpl extends ServiceImpl<OrderTaxiMapper, OrderTaxi> implements IOrderTaxiService { - - @Resource - private OrderTaxiMapper orderTaxiMapper; - - @Resource - private SensitiveWordsMapper sensitiveWordsMapper; - - @Resource - private SysIntegralMapper sysIntegralMapper; - - @Resource - private UserActivityDiscount1Mapper userActivityDiscount1Mapper; - - @Resource - private OrderPrivateCarMapper orderPrivateCarMapper; - - @Resource - private RegionMapper regionMapper; - - @Autowired - private IOrderCancelService orderCancelService; - - @Autowired - private GDMapElectricFenceUtil gdMapElectricFenceUtil; - - @Autowired - private IDriverService driverService; - - @Autowired - private DateUtil dateUtil; - - @Autowired - private IUserInfoService userInfoService; - - @Autowired - private IPushOrderService pushOrderService; - - @Autowired - private ICancleOrderService cancleOrderService; - - @Autowired - private PayMoneyUtil payMoneyUtil; - - @Autowired - private ITransactionDetailsService transactionDetailsService; - - @Autowired - private IPaymentRecordService paymentRecordService; - - @Autowired - private IUserCouponRecordService userCouponRecordService; - - @Autowired - private IUserRedPacketRecordService userRedPacketRecordService; - - @Autowired - private GDMapGeocodingUtil gdMapGeocodingUtil; - - @Autowired - private ICompanyCityService companyCityService; - - @Autowired - private PushUtil pushUtil; - - @Resource - private RedisTemplate<String, Object> redisTemplate; - - @Autowired - private RestTemplate internalRestTemplate; - - @Autowired - private IUserActivityRedenvelopeService userActivityRedenvelopeService; - - @Autowired - private IDriverOrdersService driverOrdersService; - - @Autowired - private IIncomeService incomeService; - - @Autowired - private ICompanyService companyService; - - @Autowired - private ISystemNoticeService systemNoticeService; - - @Autowired - private IOrderPositionService orderPositionService; - - @Autowired - private ChinaMobileUtil chinaMobileUtil; - - @Autowired - private IDriverServiceService driverServiceService; - - @Autowired - private GDFalconUtil gdFalconUtil; - - @Autowired - private IOrderPrivateCarService orderPrivateCarService; - - @Autowired - private IOrderCrossCityService orderCrossCityService; - - @Resource - private OrderCrossCityMapper orderCrossCityMapper; - - @Autowired - private IOrderLogisticsService orderLogisticsService; - - @Autowired - private IOpenCityService openCityService; - - @Autowired - private ITaxiCardService taxiCardService; - - @Autowired - private ITaxiCardPaymentService taxiCardPaymentService; - - @Autowired - private IUserUserService userUserService; - - @Autowired - private IUserTaxiCardService userTaxiCardService; - - @Autowired - private IRegionService regionService; - - public static List<Integer> orderIds = new ArrayList<>(); - - - @Value("${callbackPath}") - private String callbackPath; - - - - - - - - /** - * 出租车下单操作 - * @param orderTaxi - * @param uid - * @return - * @throws Exception - */ - @Override - public synchronized ResultUtil<BaseWarpper> taxiOrder(OrderTaxi orderTaxi, Integer uid) throws Exception { - //定义用户所属公司 - UserInfo userInfo1 = userInfoService.selectById(uid); - if (null == userInfo1 || userInfo1.getFlag() == 3) { - return ResultUtil.error("无效的账户"); - } - if (2 == userInfo1.getState()) { - return ResultUtil.error("账号已被冻结,请联系管理员"); - } - Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat())); - if (null == query) { - return ResultUtil.error("出发点暂未开通"); - } - if (null != userInfo1.getCompanyId() && 0 != userInfo1.getCompanyId()) { - userInfo1.setCompanyId(query.getId()); - userInfoService.updateById(userInfo1); - } - - if (orderTaxi.getTravelTime().getTime() > (System.currentTimeMillis() + 600000)) { - orderTaxi.setOrderType(2); - } - - - /** - * 1.出租车、专车、跨城有待支付的订单不能叫车 - * 2.小件物流有未完成的订单可以下跨城、专车、出租车 - * 3.出租车、专车、跨城有预约单可以下即时单 - */ - List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, null, 1, 7, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, null, 1, 7, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 7, 12); - if(orderCrossCities1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - if(orderTaxi.getOrderType() == 1){ - orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - } - - List<OrderPrivateCar> orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, null, 3, 7, 12); - if(orderPrivateCars1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderTaxi> list1 = orderTaxiMapper.queryByState_(uid, null, 3, 7, 12); - if(list1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - List<OrderCrossCity> orderCrossCities11 = orderCrossCityMapper.queryByState(uid, 7, 12); - if(orderCrossCities11.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - if(orderTaxi.getOrderType() == 1){ - orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(orderPrivateCars1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - list1 = orderTaxiMapper.queryByState_(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); - if(list1.size() > 0){ - return ResultUtil.error("有未完成的订单"); - } - } - - orderTaxi.setOrderNum(this.getOrderNum()); - if(ToolUtil.isEmpty(orderTaxi.getPlacementLon()) || ToolUtil.isEmpty(orderTaxi.getPlacementLat())) { - return ResultUtil.error("未开启定位"); - } - Map<String, String> geocode = gdMapGeocodingUtil.geocode(String.valueOf(orderTaxi.getPlacementLon()), String.valueOf(orderTaxi.getPlacementLat())); - orderTaxi.setPlacementAddress(geocode.get("address")); - orderTaxi.setStartAddress(orderTaxi.getStartAddress().replaceAll("& #40;", "\\("));//特殊字符转义 - orderTaxi.setStartAddress(orderTaxi.getStartAddress().replaceAll("& #41;", "\\)")); - orderTaxi.setEndAddress(orderTaxi.getEndAddress().replaceAll("& #40;", "\\(")); - orderTaxi.setEndAddress(orderTaxi.getEndAddress().replaceAll("& #41;", "\\)")); - orderTaxi.setUserId(uid); - orderTaxi.setMileage(0D); - orderTaxi.setOrderMoney(0D); - orderTaxi.setTravelMoney(0D); - orderTaxi.setParkMoney(0D); - orderTaxi.setRoadTollMoney(0D); - orderTaxi.setRedPacketMoney(0D); - orderTaxi.setCouponMoney(0D); - orderTaxi.setInsertTime(new Date()); - orderTaxi.setIsReassign(1); - if(orderTaxi.getSubstitute() == 0){//不是代下单 - UserInfo userInfo = userInfoService.selectById(uid); - if(ToolUtil.isEmpty(userInfo.getPhone())){ - return ResultUtil.error("请先绑定手机号码"); - } - orderTaxi.setPassengers(userInfo.getName()); - orderTaxi.setPassengersPhone(userInfo.getPhone()); - } - orderTaxi.setState(1);//待接单 - if(orderTaxi.getOrderSource() == 2 && null != orderTaxi.getDriverId()){//扫码下单, - Driver driver = driverService.selectById(orderTaxi.getDriverId()); - if(null == driver){ - return ResultUtil.error("扫码下单失败,司机信息有误"); - } - if(driver.getAuthState() == 1){ - return ResultUtil.error("司机信息还未完成审核,无法完成下单"); - } - if(driver.getAuthState() == 3){ - return ResultUtil.error("司机账户已被冻结,无法提供服务"); - } - if(driver.getAuthState() == 4){ - return ResultUtil.error("司机信息未通过审核,无法提供服务"); - } - if(driver.getState() == 1){ - return ResultUtil.error("司机还未上线,无法提供服务"); - } - if(driver.getState() == 3){ - return ResultUtil.error("司机正在服务中,无法提供服务"); - } - List<DriverService> driverServices = driverServiceService.query(orderTaxi.getDriverId(), 2); - if(driverServices.size() == 0){ - return ResultUtil.error("该司机不能服务此业务"); - } - - orderTaxi.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( - driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); - orderTaxi.setCarId(driver.getCarId()); - orderTaxi.setState(2);//待出发 - orderTaxi.setSnatchOrderTime(new Date()); + + @Resource + private OrderTaxiMapper orderTaxiMapper; + + @Resource + private SensitiveWordsMapper sensitiveWordsMapper; + + @Resource + private SysIntegralMapper sysIntegralMapper; + + @Resource + private UserActivityDiscount1Mapper userActivityDiscount1Mapper; + + @Resource + private OrderPrivateCarMapper orderPrivateCarMapper; + + @Resource + private RegionMapper regionMapper; + + @Autowired + private IOrderCancelService orderCancelService; + + @Autowired + private GDMapElectricFenceUtil gdMapElectricFenceUtil; + + @Autowired + private IDriverService driverService; + + @Autowired + private DateUtil dateUtil; + + @Autowired + private IUserInfoService userInfoService; + + @Autowired + private IPushOrderService pushOrderService; + + @Autowired + private ICancleOrderService cancleOrderService; + + @Autowired + private PayMoneyUtil payMoneyUtil; + + @Autowired + private ITransactionDetailsService transactionDetailsService; + + @Autowired + private IPaymentRecordService paymentRecordService; + + @Autowired + private IUserCouponRecordService userCouponRecordService; + + @Autowired + private IUserRedPacketRecordService userRedPacketRecordService; + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; + + @Autowired + private ICompanyCityService companyCityService; + + @Autowired + private PushUtil pushUtil; + + @Resource + private RedisTemplate<String, Object> redisTemplate; + + @Autowired + private RestTemplate internalRestTemplate; + + @Autowired + private IUserActivityRedenvelopeService userActivityRedenvelopeService; + + @Autowired + private IDriverOrdersService driverOrdersService; + + @Autowired + private IIncomeService incomeService; + + @Autowired + private ICompanyService companyService; + + @Autowired + private ISystemNoticeService systemNoticeService; + + @Autowired + private IOrderPositionService orderPositionService; + + @Autowired + private ChinaMobileUtil chinaMobileUtil; + + @Autowired + private IDriverServiceService driverServiceService; + + @Autowired + private GDFalconUtil gdFalconUtil; + + @Autowired + private IOrderPrivateCarService orderPrivateCarService; + + @Autowired + private IOrderCrossCityService orderCrossCityService; + + @Resource + private OrderCrossCityMapper orderCrossCityMapper; + + @Autowired + private IOrderLogisticsService orderLogisticsService; + + @Autowired + private IOpenCityService openCityService; + + @Autowired + private ITaxiCardService taxiCardService; + + @Autowired + private ITaxiCardPaymentService taxiCardPaymentService; + + @Autowired + private IUserUserService userUserService; + + @Autowired + private IUserTaxiCardService userTaxiCardService; + + @Autowired + private IRegionService regionService; + + public static List<Integer> orderIds = new ArrayList<>(); + + + @Value("${callbackPath}") + private String callbackPath; + + + /** + * 出租车下单操作 + * + * @param orderTaxi + * @param uid + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil<BaseWarpper> taxiOrder(OrderTaxi orderTaxi, Integer uid) throws Exception { + //定义用户所属公司 + UserInfo userInfo1 = userInfoService.selectById(uid); + if (null == userInfo1 || userInfo1.getFlag() == 3) { + return ResultUtil.error("无效的账户"); + } + if (2 == userInfo1.getState()) { + return ResultUtil.error("账号已被冻结,请联系管理员"); + } + Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat())); + if (null == query) { + return ResultUtil.error("出发点暂未开通"); + } + if (null != userInfo1.getCompanyId() && 0 != userInfo1.getCompanyId()) { + userInfo1.setCompanyId(query.getId()); + userInfoService.updateById(userInfo1); + } + + if (orderTaxi.getTravelTime().getTime() > (System.currentTimeMillis() + 600000)) { + orderTaxi.setOrderType(2); + } + + + /** + * 1.出租车、专车、跨城有待支付的订单不能叫车 + * 2.小件物流有未完成的订单可以下跨城、专车、出租车 + * 3.出租车、专车、跨城有预约单可以下即时单 + */ + List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, null, 1, 7, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, null, 1, 7, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 7, 12); + if (orderCrossCities1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + if (orderTaxi.getOrderType() == 1) { + orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + } + + List<OrderPrivateCar> orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, null, 3, 7, 12); + if (orderPrivateCars1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderTaxi> list1 = orderTaxiMapper.queryByState_(uid, null, 3, 7, 12); + if (list1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + List<OrderCrossCity> orderCrossCities11 = orderCrossCityMapper.queryByState(uid, 7, 12); + if (orderCrossCities11.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + if (orderTaxi.getOrderType() == 1) { + orderPrivateCars1 = orderPrivateCarMapper.queryByState(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (orderPrivateCars1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + list1 = orderTaxiMapper.queryByState_(uid, 1, 3, 1, 2, 3, 4, 5, 6, 7, 11, 12); + if (list1.size() > 0) { + return ResultUtil.error("有未完成的订单"); + } + } + + orderTaxi.setOrderNum(this.getOrderNum()); + if (ToolUtil.isEmpty(orderTaxi.getPlacementLon()) || ToolUtil.isEmpty(orderTaxi.getPlacementLat())) { + return ResultUtil.error("未开启定位"); + } + Map<String, String> geocode = gdMapGeocodingUtil.geocode(String.valueOf(orderTaxi.getPlacementLon()), String.valueOf(orderTaxi.getPlacementLat())); + orderTaxi.setPlacementAddress(geocode.get("address")); + orderTaxi.setStartAddress(orderTaxi.getStartAddress().replaceAll("& #40;", "\\("));//特殊字符转义 + orderTaxi.setStartAddress(orderTaxi.getStartAddress().replaceAll("& #41;", "\\)")); + orderTaxi.setEndAddress(orderTaxi.getEndAddress().replaceAll("& #40;", "\\(")); + orderTaxi.setEndAddress(orderTaxi.getEndAddress().replaceAll("& #41;", "\\)")); + orderTaxi.setUserId(uid); + orderTaxi.setMileage(0D); + orderTaxi.setOrderMoney(0D); + orderTaxi.setTravelMoney(0D); + orderTaxi.setParkMoney(0D); + orderTaxi.setRoadTollMoney(0D); + orderTaxi.setRedPacketMoney(0D); + orderTaxi.setCouponMoney(0D); + orderTaxi.setInsertTime(new Date()); + orderTaxi.setIsReassign(1); + if (orderTaxi.getSubstitute() == 0) {//不是代下单 + UserInfo userInfo = userInfoService.selectById(uid); + if (ToolUtil.isEmpty(userInfo.getPhone())) { + return ResultUtil.error("请先绑定手机号码"); + } + orderTaxi.setPassengers(userInfo.getName()); + orderTaxi.setPassengersPhone(userInfo.getPhone()); + } + orderTaxi.setState(1);//待接单 + if (orderTaxi.getOrderSource() == 2 && null != orderTaxi.getDriverId()) {//扫码下单, + Driver driver = driverService.selectById(orderTaxi.getDriverId()); + if (null == driver) { + return ResultUtil.error("扫码下单失败,司机信息有误"); + } + if (driver.getAuthState() == 1) { + return ResultUtil.error("司机信息还未完成审核,无法完成下单"); + } + if (driver.getAuthState() == 3) { + return ResultUtil.error("司机账户已被冻结,无法提供服务"); + } + if (driver.getAuthState() == 4) { + return ResultUtil.error("司机信息未通过审核,无法提供服务"); + } + if (driver.getState() == 1) { + return ResultUtil.error("司机还未上线,无法提供服务"); + } + if (driver.getState() == 3) { + return ResultUtil.error("司机正在服务中,无法提供服务"); + } + List<DriverService> driverServices = driverServiceService.query(orderTaxi.getDriverId(), 2); + if (driverServices.size() == 0) { + return ResultUtil.error("该司机不能服务此业务"); + } + + orderTaxi.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( + driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); + orderTaxi.setCarId(driver.getCarId()); + orderTaxi.setState(2);//待出发 + orderTaxi.setSnatchOrderTime(new Date()); // //调用高德创建轨迹 // String s = gdFalconUtil.selectTerminal(driver.getPhone()); // String track = gdFalconUtil.createTrack(s); // orderTaxi.setTrackId(track); // - //调用移动的小号接口 - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderTaxi.setTelX(map.get("telX")); - orderTaxi.setBindId(map.get("bindId")); - } - - driver.setState(3); - driverService.updateById(driver); - } - - this.insert(orderTaxi); - - new Thread(new Runnable() { - @Override - public void run() { - if(orderTaxi.getState() == 2){ - //推送司机订单状态 - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - - pushUtil.pushDriverPosition(orderTaxi.getId(), 2); - } - } - }).start(); - - if(orderTaxi.getState() == 1){ - //推送司机抢单 - this.pushOrder(orderTaxi, 1); - } - - //添加消息 - systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); - - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setId(orderTaxi.getId()); - return ResultUtil.success(baseWarpper); - } - - - /** - * 继续执行推动等待操作 - * @param id - * @throws Exception - */ - @Override - public ResultUtil pushOrderTaxi(Integer id) throws Exception { - OrderTaxi orderTaxi = this.selectById(id); - if(null == orderTaxi){ - return ResultUtil.error("推送订单失败,订单信息有误"); - } - if(orderTaxi.getState() != 1){ - return ResultUtil.error("订单已被司机接单,不能重复推送"); - } - - //处理摆渡订单的继续推单操作 - if(orderTaxi.getType() == 2){ - OrderCrossCityServiceImpl.pushEndMap.put(orderTaxi.getCrossCityOrderId(), false);//还原标识数据 - List<OrderPrivateCar> list = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); - List<Map<String, Integer>> orders = new ArrayList<>(); - for(OrderPrivateCar orderPrivateCar1 : list){ - if(orderPrivateCar1.getState() != 1){ - return ResultUtil.error("订单已被司机接单,推单取消"); - } - Map<String, Integer> map = new HashMap<>(); - map.put("orderType", 1); - map.put("orderId", orderPrivateCar1.getId()); - orders.add(map); - } - List<OrderTaxi> list1 = this.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); - for(OrderTaxi orderTaxi1 : list1){ - if(orderTaxi1.getState() != 1){ - return ResultUtil.error("订单已被司机接单,推单取消"); - } - Map<String, Integer> map = new HashMap<>(); - map.put("orderType", 2); - map.put("orderId", orderTaxi1.getId()); - orders.add(map); - } - //开始重新推单 - orderCrossCityService.pushOrder(orders); - - }else{ - this.pushOrder(orderTaxi, 1); - } - return ResultUtil.success(); - } - - - /** - * 获取取消订单需要支付的金额(包含小费) - * @param id - * @return - * @throws Exception - */ - @Override - public ResultUtil<BaseWarpper> queryCancleAmount(Integer id) throws Exception { - OrderTaxi orderTaxi = this.selectById(id); - if(null == orderTaxi){ - return ResultUtil.error("获取数据失败,订单信息有误"); - } - double amount = 0; - CancleOrder query = cancleOrderService.query(orderTaxi.getOrderType(), 2, orderTaxi.getCompanyId()); - if(null == query){ - return ResultUtil.error("请先完善取消规则"); - } - if(null != orderTaxi.getDriverId() && - (orderTaxi.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况 - if(null != query){ - amount += query.getMoney(); - } - } - BaseWarpper baseWarpper = new BaseWarpper(); - baseWarpper.setAmount(amount); - return ResultUtil.success(baseWarpper); - } - - - /** - * 添加订单取消 - * @param id - * @param reason - * @param remark - * @param uid - * @throws Exception - */ - @Override - public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { - if(ToolUtil.isNotEmpty(remark)){ - if(ToolUtil.isNotEmpty(remark)){ - List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); - for(SensitiveWords s : sensitiveWords){ - remark = remark.replaceAll(s.getContent(), "***"); - } - } - } - - OrderTaxi orderTaxi = this.selectById(id); - Integer integer = null; - if(null == orderTaxi){ - return ResultUtil.error("取消订单失败,订单信息有误"); - } + //调用移动的小号接口 +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if (String.valueOf(map.get("code")).equals("200")) { +// orderTaxi.setTelX(map.get("telX")); +// orderTaxi.setBindId(map.get("bindId")); +// } + + driver.setState(3); + driverService.updateById(driver); + } + + this.insert(orderTaxi); + + new Thread(new Runnable() { + @Override + public void run() { + if (orderTaxi.getState() == 2) { + //推送司机订单状态 + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + + pushUtil.pushDriverPosition(orderTaxi.getId(), 2); + } + } + }).start(); + + if (orderTaxi.getState() == 1) { + //推送司机抢单 + this.pushOrder(orderTaxi, 1); + } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的出租车订单已下单成功,我们正在为您指派司机,请稍后!", orderTaxi.getUserId(), 1); + + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(orderTaxi.getId()); + return ResultUtil.success(baseWarpper); + } + + + /** + * 继续执行推动等待操作 + * + * @param id + * @throws Exception + */ + @Override + public ResultUtil pushOrderTaxi(Integer id) throws Exception { + OrderTaxi orderTaxi = this.selectById(id); + if (null == orderTaxi) { + return ResultUtil.error("推送订单失败,订单信息有误"); + } + if (orderTaxi.getState() != 1) { + return ResultUtil.error("订单已被司机接单,不能重复推送"); + } + + //处理摆渡订单的继续推单操作 + if (orderTaxi.getType() == 2) { + OrderCrossCityServiceImpl.pushEndMap.put(orderTaxi.getCrossCityOrderId(), false);//还原标识数据 + List<OrderPrivateCar> list = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); + List<Map<String, Integer>> orders = new ArrayList<>(); + for (OrderPrivateCar orderPrivateCar1 : list) { + if (orderPrivateCar1.getState() != 1) { + return ResultUtil.error("订单已被司机接单,推单取消"); + } + Map<String, Integer> map = new HashMap<>(); + map.put("orderType", 1); + map.put("orderId", orderPrivateCar1.getId()); + orders.add(map); + } + List<OrderTaxi> list1 = this.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); + for (OrderTaxi orderTaxi1 : list1) { + if (orderTaxi1.getState() != 1) { + return ResultUtil.error("订单已被司机接单,推单取消"); + } + Map<String, Integer> map = new HashMap<>(); + map.put("orderType", 2); + map.put("orderId", orderTaxi1.getId()); + orders.add(map); + } + //开始重新推单 + orderCrossCityService.pushOrder(orders); + + } else { + this.pushOrder(orderTaxi, 1); + } + return ResultUtil.success(); + } + + + /** + * 获取取消订单需要支付的金额(包含小费) + * + * @param id + * @return + * @throws Exception + */ + @Override + public ResultUtil<BaseWarpper> queryCancleAmount(Integer id) throws Exception { + OrderTaxi orderTaxi = this.selectById(id); + if (null == orderTaxi) { + return ResultUtil.error("获取数据失败,订单信息有误"); + } + double amount = 0; + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + CancleOrder query = cancleOrderService.query(orderTaxi.getOrderType(), 2, openCity.getId()); + if (null == query) { + return ResultUtil.error("请先完善取消规则"); + } + if (null != orderTaxi.getDriverId() && + (orderTaxi.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()) {//收费的情况 + if (null != query) { + amount += query.getMoney(); + } + } + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setAmount(amount); + return ResultUtil.success(baseWarpper); + } + + + /** + * 添加订单取消 + * + * @param id + * @param reason + * @param remark + * @param uid + * @throws Exception + */ + @Override + public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { + if (ToolUtil.isNotEmpty(remark)) { + if (ToolUtil.isNotEmpty(remark)) { + List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); + for (SensitiveWords s : sensitiveWords) { + remark = remark.replaceAll(s.getContent(), "***"); + } + } + } + + OrderTaxi orderTaxi = this.selectById(id); + Integer integer = null; + if (null == orderTaxi) { + return ResultUtil.error("取消订单失败,订单信息有误"); + } // if(orderTaxi.getState() == 4){ // return ResultUtil.error("司机已到达预约点,取消会产生一定的费用"); // } - if(orderTaxi.getState() >= 5 && orderTaxi.getState() != 11){ - return ResultUtil.error("取消订单失败,不合法的操作"); - } - if(null == orderTaxi.getDriverId()){//没有接单的情况 - if(orderTaxi.getType() == 2){//摆渡车 - OrderCrossCityServiceImpl.pushEndMap.remove(orderTaxi.getCrossCityOrderId());//删除标识数据 - List<OrderPrivateCar> list = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); - for(OrderPrivateCar orderPrivateCar1 : list){ - orderCancelService.saveData(orderPrivateCar1.getId(), 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); - orderPrivateCar1.setState(10); - orderPrivateCarService.updateById(orderPrivateCar1); - } - List<OrderTaxi> list1 = this.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); - for(OrderTaxi orderTaxi1 : list1){ - orderCancelService.saveData(orderTaxi1.getId(), 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); - orderTaxi1.setState(10); - this.updateById(orderTaxi1); - } - }else{ - integer = orderCancelService.saveData(id, 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); - orderTaxi.setState(10); - this.updateById(orderTaxi); - } - }else { - CancleOrder query = cancleOrderService.query(orderTaxi.getOrderType(), 2, orderTaxi.getCompanyId()); - if (null != query) { - if ((orderTaxi.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况 - orderTaxi.setState(12); - this.updateById(orderTaxi); - integer = orderCancelService.saveData(id, 2, reason, remark, null, query.getMoney(), 1, 1, uid); - } else { - integer = orderCancelService.saveData(id, 2, reason, remark, null, null, 2, 1, uid); - - orderTaxi.setState(10); - this.updateById(orderTaxi); - } - this.deleteTask(id);//删除定时任务 - - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - System.err.println("推送取消操作---------------------"); - } - }).start(); - - //修改司机为空闲 - Driver driver = driverService.selectById(orderTaxi.getDriverId()); - driver.setState(2); - driverService.updateById(driver); - }else{ - return ResultUtil.error("请完善后台取消规则设置"); - } - - } - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderTaxi.getUserId(), 1); - Map<String, Object> map = new HashMap<>(); - map.put("id", integer); - return ResultUtil.success(map); - } - - - /** - * 取消订单操作 - * @param id - * @return - * @throws Exception - */ - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil cancleOrderTaxi(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { - OrderTaxi orderTaxi = this.selectById(id); - Integer uid = orderTaxi.getUserId(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - - if(null == orderTaxi){ - return ResultUtil.error("取消订单失败,订单信息有误", ""); - } - if(orderTaxi.getState() != 12){ - return ResultUtil.error("取消订单失败,不合法的操作", ""); - } - OrderCancel orderCancel = null; - if(null == cancleId){ - orderCancel = orderCancelService.query(id, 2, null, null, 1); - }else{ - orderCancel = orderCancelService.selectById(cancleId); - } - - CancleOrder query = cancleOrderService.query(orderTaxi.getOrderType(), 2, orderTaxi.getCompanyId()); - System.out.println("取消订单:"+query); - if(null != query){ - if(payType == 1){//微信支付 - String value = (String) redisTemplate.opsForValue().get("appletOpenId"); - String appletsOpenId = null; - if(ToolUtil.isNotEmpty(value)){ - JSONObject jsonObject = JSON.parseObject(value); - appletsOpenId = jsonObject.getString(uid.toString()); - }else{ - appletsOpenId = userInfo.getAppletsOpenId(); - } - orderCancel.setPayType(1); - orderCancelService.updateById(orderCancel); - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_2_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, id, 2, 1, query.getMoney(), "", 1);//添加预支付数据 + if (orderTaxi.getState() >= 5 && orderTaxi.getState() != 11) { + return ResultUtil.error("取消订单失败,不合法的操作"); + } + if (null == orderTaxi.getDriverId()) {//没有接单的情况 + if (orderTaxi.getType() == 2) {//摆渡车 + OrderCrossCityServiceImpl.pushEndMap.remove(orderTaxi.getCrossCityOrderId());//删除标识数据 + List<OrderPrivateCar> list = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); + for (OrderPrivateCar orderPrivateCar1 : list) { + orderCancelService.saveData(orderPrivateCar1.getId(), 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); + orderPrivateCar1.setState(10); + orderPrivateCarService.updateById(orderPrivateCar1); + } + List<OrderTaxi> list1 = this.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderTaxi.getCrossCityOrderId()).eq("place", orderTaxi.getPlace())); + for (OrderTaxi orderTaxi1 : list1) { + orderCancelService.saveData(orderTaxi1.getId(), 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); + orderTaxi1.setState(10); + this.updateById(orderTaxi1); + } + } else { + integer = orderCancelService.saveData(id, 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); + orderTaxi.setState(10); + this.updateById(orderTaxi); + } + } else { + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + CancleOrder query = cancleOrderService.query(orderTaxi.getOrderType(), 2, openCity.getId()); + if (null != query) { + if ((orderTaxi.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况 + orderTaxi.setState(12); + this.updateById(orderTaxi); + integer = orderCancelService.saveData(id, 2, reason, remark, null, query.getMoney(), 1, 1, uid); + } else { + integer = orderCancelService.saveData(id, 2, reason, remark, null, null, 2, 1, uid); + + orderTaxi.setState(10); + this.updateById(orderTaxi); + } + this.deleteTask(id);//删除定时任务 + + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + System.err.println("推送取消操作---------------------"); + } + }).start(); + + //修改司机为空闲 + Driver driver = driverService.selectById(orderTaxi.getDriverId()); + driver.setState(2); + driverService.updateById(driver); + } else { + return ResultUtil.error("请完善后台取消规则设置"); + } + + } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderTaxi.getUserId(), 1); + Map<String, Object> map = new HashMap<>(); + map.put("id", integer); + return ResultUtil.success(map); + } + + + /** + * 取消订单操作 + * + * @param id + * @return + * @throws Exception + */ + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil cancleOrderTaxi(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { + OrderTaxi orderTaxi = this.selectById(id); + Integer uid = orderTaxi.getUserId(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + + if (null == orderTaxi) { + return ResultUtil.error("取消订单失败,订单信息有误", ""); + } + if (orderTaxi.getState() != 12) { + return ResultUtil.error("取消订单失败,不合法的操作", ""); + } + OrderCancel orderCancel = null; + if (null == cancleId) { + orderCancel = orderCancelService.query(id, 2, null, null, 1); + } else { + orderCancel = orderCancelService.selectById(cancleId); + } + + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + CancleOrder query = cancleOrderService.query(orderTaxi.getOrderType(), 2, openCity.getId()); + System.out.println("取消订单:" + query); + if (null != query) { + if (payType == 1) {//微信支付 + String value = (String) redisTemplate.opsForValue().get("appletOpenId"); + String appletsOpenId = null; + if (ToolUtil.isNotEmpty(value)) { + JSONObject jsonObject = JSON.parseObject(value); + appletsOpenId = jsonObject.getString(uid.toString()); + } else { + appletsOpenId = userInfo.getAppletsOpenId(); + } + orderCancel.setPayType(1); + orderCancelService.updateById(orderCancel); + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_2_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, id, 2, 1, query.getMoney(), "", 1);//添加预支付数据 // Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",2", 9, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/wxCancelOrderTaxi", "", type, appletsOpenId); // if(map.get("code").equals("200")){ @@ -602,12 +605,12 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } - } - if(payType == 2){//支付宝支付 - orderCancel.setPayType(2); - orderCancelService.updateById(orderCancel); - resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_2_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); - paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, id, 2, 2, query.getMoney(), "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + orderCancel.setPayType(2); + orderCancelService.updateById(orderCancel); + resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_2_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); + paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, id, 2, 2, query.getMoney(), "", 1);//添加预支付数据 // Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",2", 10, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/aliCancelOrderTaxi", "", type, null); // if(map.get("code").equals("200")){ @@ -616,39 +619,39 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } - } - if(payType == 3) {//余额支付 - if (userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()) { - return ResultUtil.error("余额不足,无法完成支付"); - } + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()) { + return ResultUtil.error("余额不足,无法完成支付"); + } // resultUtil= appOrderController.moneyPay(id,userInfo.getId(),query.getMoney()); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - //添加交易明细 - transactionDetailsService.saveData(uid, "出租车取消订单", query.getMoney(), 2, 1, 1, 2, id); - userInfoService.updateById(userInfo); - - //解除小号绑定 - if (orderTaxi.getBindId() != null) { - chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(), orderTaxi.getTelX(), (System.currentTimeMillis() + 600000)); - } - - orderTaxi.setState(10); - orderTaxi.setTelX(""); - orderTaxi.setBindId(""); - this.updateById(orderTaxi); - - orderCancel.setState(2); - orderCancel.setPayType(3); - orderCancelService.updateById(orderCancel); - - //添加已收入明细 - incomeService.saveData(1, orderTaxi.getCompanyId(), 3, orderTaxi.getId(), 2, query.getMoney()); - - this.deleteTask(id);//删除定时任务 + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + //添加交易明细 + transactionDetailsService.saveData(uid, "出租车取消订单", query.getMoney(), 2, 1, 1, 2, id); + userInfoService.updateById(userInfo); + + //解除小号绑定 + if (orderTaxi.getBindId() != null) { + chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(), orderTaxi.getTelX(), (System.currentTimeMillis() + 600000)); + } + + orderTaxi.setState(10); + orderTaxi.setTelX(""); + orderTaxi.setBindId(""); + this.updateById(orderTaxi); + + orderCancel.setState(2); + orderCancel.setPayType(3); + orderCancelService.updateById(orderCancel); + + //添加已收入明细 + incomeService.saveData(1, orderTaxi.getCompanyId(), 3, orderTaxi.getId(), 2, query.getMoney()); + + this.deleteTask(id);//删除定时任务 // new Thread(new Runnable() { // @Override @@ -656,1605 +659,1632 @@ // pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); // } // }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderTaxi.getUserId(), 1); - } - if(payType == 4){ - Double payMoney = orderTaxi.getOrderMoney(); - Integer integer = paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, id, 2, 4, query.getMoney(), "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(query.getMoney()), 4,id,8,integer); - - } - } - return resultUtil; - } - - - /** - * 删除定时任务 - * @param orderId - */ - @Override - public void deleteTask(Integer orderId){ - //发送验证码短信 - HttpHeaders headers = new HttpHeaders(); - // 以表单的方式提交 - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - //将请求头部和参数合成一个请求 - MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); - params.add("orderId", orderId + ""); - params.add("orderType", "2"); - HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); - String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); - JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); - if(jsonObject.getIntValue("code") != 200){ - System.err.println("调用driver-server出错了"); - } - } - - - /** - * 获取用户余额和可用优惠券数量 - * @param uid - * @return - * @throws Exception - */ - @Override - public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { - Map<String, Object> map = new HashMap<>(); - UserInfo userInfo = userInfoService.selectById(uid); - map.put("balance", userInfo.getBalance()); - OrderTaxi orderTaxi = this.selectById(orderId); - int i = userCouponRecordService.queryAvailable(uid, orderTaxi.getCompanyId(), 1, 2, orderTaxi.getOrderMoney()); - i = i + userCouponRecordService.queryAvailable(uid, orderTaxi.getCompanyId(), 1, 0, orderTaxi.getOrderMoney()); - map.put("coupon", i); - return map; - } - - @Override - public PreferentialDataVo queryBalance1(Integer orderId, Integer uid) throws Exception { - UserInfo userInfo = userInfoService.selectById(uid); - PreferentialDataVo preferentialDataVo = new PreferentialDataVo(); - preferentialDataVo.setBalance(userInfo.getBalance()); - OrderTaxi orderTaxi = this.selectById(orderId); - Integer ids = userInfoService.getDiscount(); - if(ids!=null){ - List<UserActivityDiscount1> userActivityId = userActivityDiscount1Mapper.selectList(new EntityWrapper<UserActivityDiscount1>().eq("userActivityId", ids)); - if(userActivityId.size()>0){ - preferentialDataVo.setDiscount(userActivityId.get(0).getTaxi()); - } - } - // 查出当前用户的红包 并将订单的修改 - List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).le("money",orderTaxi.getOrderMoney()).gt("expirationTime", new Date()).gt("endTime", new Date())); - if(userRedPacketRecords.size()>0){ - - preferentialDataVo.setRedPacket(userRedPacketRecords.get(0).getMoney()); - orderTaxi.setRedPacketId(userRedPacketRecords.get(0).getId()); - orderTaxi.setRedPacketMoney(userRedPacketRecords.get(0).getMoney()); - this.updateById(orderTaxi); - } - - //获取优惠券中最优数据 - List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderTaxi.getCompanyId()).eq("state", 1).le("money",orderTaxi.getOrderMoney()).in("couponUseType", Arrays.asList(0, 2)).eq("userId", uid).where("now() < expirationTime")); - Integer id = null; - Double price = 0d; - Integer type = 0; - for (UserCouponRecord userCouponRecord : list){ - if(userCouponRecord.getCouponType() == 1){//抵扣券 - if(price.compareTo(userCouponRecord.getMoney()) < 0){ - price = userCouponRecord.getMoney(); - id = userCouponRecord.getId(); - type = 1; - } - }else{//满减券 - if(orderTaxi.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) >= 0 && price.compareTo(userCouponRecord.getMoney()) < 0){ - price = userCouponRecord.getMoney(); - id = userCouponRecord.getId(); - type = 1; - } - } - } - - //获取打车卡中最优数 - Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); - CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); - } - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); - } - List<UserTaxiCard> userTaxiCards; - if(null!=companyCity){ - userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().like("companyCityId", "%" + companyCity.getId() + "%") - .in("type", Arrays.asList(1, 2, 3, 4)).eq("userId", uid).where("now() between startTime and endTime")); - - }else { - userTaxiCards=new ArrayList<>(); - } - - //全国卡 - List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards2); - } - Map<String, Object> map = getOptimalTaxiCards(orderTaxi, price, id, type, userTaxiCards); - price = Double.valueOf(map.get("price").toString()); - id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; - type = Integer.valueOf(map.get("type").toString()); - - - //亲密账户 - List<UserTaxiCard> userTaxiCards_ = new ArrayList<>(); - List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); - CompanyCity finalCompanyCity = companyCity; - bindUserId.forEach(userUser -> { - if(finalCompanyCity!=null) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) - .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); - userTaxiCards_.addAll(userTaxiCards1); - } - - //全国卡 - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards_.addAll(userTaxiCards2); - } - }); - map = getOptimalTaxiCards(orderTaxi, price, id, type, userTaxiCards_); - price = Double.valueOf(map.get("price").toString()); - id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; - type = Integer.valueOf(map.get("type").toString()); - - if(price<=orderTaxi.getOrderMoney() || type==2 ){ - preferentialDataVo.setObjectId(id); - preferentialDataVo.setDiscountAmount(price); - preferentialDataVo.setType(type); - } - return preferentialDataVo; - } - - - /** - * 获取最优数据 - * @param orderTaxi - * @param price - * @param id - * @param type - * @param userTaxiCards - * @return - */ - public Map<String, Object> getOptimalTaxiCards(OrderTaxi orderTaxi, Double price, Integer id, Integer type, List<UserTaxiCard> userTaxiCards) throws Exception{ - Map<String, Object> map = new HashMap<>(); - for(UserTaxiCard t : userTaxiCards){ - JSONObject jsonObject = JSON.parseObject(t.getContent()); - List<Integer> integers = jsonObject.getJSONArray("businessTypes").toJavaList(Integer.class); - if(!integers.contains(2)){ - continue; - } - if(t.getType() == 1){//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discount = jsonObject.getDouble("discount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - double v = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - - } - } - - } - if(t.getType() == 2){//优惠卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - for(int j = fullReduction.size() - 1; j >= 0; j--){ - JSONArray jsonArray = fullReduction.getJSONArray(j); - Double p = jsonArray.getDouble(0);//满金额 - Double y = jsonArray.getDouble(1);//优惠金额 - if(orderTaxi.getOrderMoney().compareTo(p) >= 0 && price.compareTo(y) < 0){ - price = y; - id = t.getId(); - type = 2; - } - } - } - } - } - if(t.getType() == 3){//次数卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"time":1,"discountAmount":10} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discountAmount = jsonObject.getDouble("discountAmount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - if(price.compareTo(discountAmount) < 0){ - price = discountAmount; - id = t.getId(); - type = 2; - } - } - } - - } - if(t.getType() == 4){//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - Double discount = jsonObject.getDouble("discount");//折扣 - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - double v = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - if(price.compareTo(v) < 0){ - price = v; - id = t.getId(); - type = 2; - } - } - } - } - } - map.put("price", price); - map.put("id", id); - map.put("type", type); - return map; - } - - - - /** - * 获取优惠券列表 - * @param orderId - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderTaxi.getCompanyId(), 1, 2, orderTaxi.getOrderMoney(), pageNum, size); - List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderTaxi.getCompanyId(), 1, 0, orderTaxi.getOrderMoney(), pageNum, size); - list.addAll(list1); - return list; - } - - - @Override - public List<CouponsListVo> queryCouponList(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { - pageNum = (pageNum - 1) * size; - OrderTaxi orderTaxi = this.selectById(orderId); - List<CouponsListVo> rows = new ArrayList<>(); - List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderTaxi.getCompanyId()) - .eq("state", 1).in("couponUseType", Arrays.asList(0, 2)).eq("userId", uid).where("expirationTime >= now()")); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - for (UserCouponRecord userCouponRecord : list){ - if(userCouponRecord.getCouponType() == 2){//满减券 - if(orderTaxi.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) < 0){ - continue; - } - } - CouponsListVo couponsListVo = new CouponsListVo(); - couponsListVo.setId(userCouponRecord.getId()); - couponsListVo.setDataType(1); - couponsListVo.setMoney(userCouponRecord.getMoney()); - couponsListVo.setUserType(userCouponRecord.getCouponUseType()); - couponsListVo.setTime(sdf.format(userCouponRecord.getExpirationTime())); - couponsListVo.setType(userCouponRecord.getCouponType()); - couponsListVo.setFullMoney(userCouponRecord.getFullMoney()); - couponsListVo.setState(userCouponRecord.getState()); - Company company = companyService.selectById(userCouponRecord.getCompanyId()); - couponsListVo.setCompany(company.getName()); - rows.add(couponsListVo); - } - - Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); - System.out.println(geocode); - CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); - } - if(null == companyCity){ - companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); - } - List<UserTaxiCard> userTaxiCards=new ArrayList<>(); - if(null !=companyCity){ - userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).like("companyCityId", "%" + companyCity.getId() + "%").where("now() between startTime and endTime")); - } - - //全国卡 - List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - userTaxiCards.addAll(userTaxiCards1); - } - - - //亲密账户 - List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); - CompanyCity finalCompanyCity = companyCity; - List<UserTaxiCard> finalUserTaxiCards = userTaxiCards; - bindUserId.forEach(userUser -> { - if(finalCompanyCity!=null) { - List<UserTaxiCard> taxiCardPayments1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) - .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); - finalUserTaxiCards.addAll(taxiCardPayments1); - } - - //全国卡 - if(taxiCards.size() > 0) { - List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) - .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); - finalUserTaxiCards.addAll(userTaxiCards1); - } - }); - - for(UserTaxiCard t : finalUserTaxiCards){ - try { - CouponsListVo couponsListVo = new CouponsListVo(); - couponsListVo.setId(t.getId()); - couponsListVo.setDataType(2); - couponsListVo.setUserType(1); - couponsListVo.setTaxiCardType(t.getType()); - couponsListVo.setTime(sdf.format(t.getEndTime())); - couponsListVo.setState(1); - Company company = companyService.selectById(t.getCompanyId()); - couponsListVo.setCompany(company.getName()); - couponsListVo.setName(taxiCardService.selectById(t.getTaxiCardId()).getName()); - - - JSONObject jsonObject = JSON.parseObject(t.getContent()); - JSONArray businessTypes = jsonObject.getJSONArray("businessTypes"); - if(!businessTypes.toJavaList(Integer.class).contains(2)){ - continue; - } - if(t.getType() == 1){//{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discount")); - couponsListVo.setType(1); - } - if(t.getType() == 2){//{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - b = true; - for(int i = fullReduction.size() - 1; i >= 0 ; i--){ - JSONArray jsonArray = fullReduction.getJSONArray(i); - Double m = jsonArray.getDouble(0); - Double j = jsonArray.getDouble(1); - if(orderTaxi.getOrderMoney().compareTo(m) >= 0){ - couponsListVo.setMoney(j); - couponsListVo.setFullMoney(m); - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setType(2); - } - if(t.getType() == 3){//{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - Integer time = jsonObject.getInteger("time"); - if(time == 0){ - continue; - } - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discountAmount")); - couponsListVo.setType(2); - } - if(t.getType() == 4){//{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); - boolean b = true; - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); - Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - b = false; - break; - } - } - if(b){ - continue; - } - couponsListVo.setMoney(jsonObject.getDouble("discount")); - couponsListVo.setType(1); - } - - - String str = ""; - TaxiCard taxiCard = taxiCardService.selectById(t.getTaxiCardId()); - if(taxiCard.getTaxiCardType() == 1){ - String[] split = taxiCard.getCompanyCityId().split(";"); - for(String c : split){ - CompanyCity companyCity1 = companyCityService.selectById(c); - if(ToolUtil.isNotEmpty(companyCity1.getAreaCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getAreaCode())); - str += region.getName() + ";"; - continue; - } - if(ToolUtil.isNotEmpty(companyCity1.getCityCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getCityCode())); - str += region.getName() + ";"; - continue; - } - if(ToolUtil.isNotEmpty(companyCity1.getProvinceCode())){ - Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getProvinceCode())); - str += region.getName() + ";"; - continue; - } - } - }else{ - str = "全国;"; - } - couponsListVo.setCity(str.substring(0, str.length() - 1)); - - rows.add(couponsListVo); - }catch (Exception e){ - e.printStackTrace(); - } - } - Collections.sort(rows, new Comparator<CouponsListVo>() { - public int compare(CouponsListVo s1, CouponsListVo s2) { - return Integer.compare(s1.getId(), s2.getId()); - } - }); - - if(rows.size() >= (pageNum + 1) * size){ - rows = rows.subList(pageNum, pageNum + size); - }else if(pageNum < rows.size() && rows.size() < (pageNum + 1) * size){ - rows = rows.subList(pageNum, rows.size()); - }else{ - rows = new ArrayList<>(); - } - - rows = rows.stream().filter(e->e.getMoney()<=orderTaxi.getOrderMoney()|| e.getDataType()==2).collect(Collectors.toList()); - return rows; - } - - /** - * 订单完成支付订单操作 - * @param payType 1=微信,2=支付宝,3=余额 - * @param orderId - * @return - * @throws Exception - */ - @Override - public ResultUtil payTaxiOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - if(orderTaxi.getState() == 8 || orderTaxi.getState() == 9){ - return ResultUtil.error("订单已完成支付,不允许重复支付", ""); - } - if(orderTaxi.getState() != 7){ - return ResultUtil.error("订单不在待支付状态,不允许支付", ""); - } - Integer uid = orderTaxi.getUserId(); - Double orderMoney = orderTaxi.getOrderMoney(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - orderTaxi.setCouponMoney(0D);//初始化历史数据 - orderTaxi.setCouponId(null); - - //计算优惠券 - UserCouponRecord userCouponRecord = null; - if(null != couponId){ - userCouponRecord = userCouponRecordService.selectById(couponId); - if(userCouponRecord.getCompanyId() != orderTaxi.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", ""); - } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", ""); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 2){ - return ResultUtil.error("优惠券不能用于此类型订单", ""); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - orderMoney = orderMoney - userCouponRecord.getMoney(); - orderTaxi.setCouponMoney(userCouponRecord.getMoney()); - orderTaxi.setCouponId(couponId); - } - - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderTaxi.getCompanyId(), 1, 2, orderMoney); - if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ - orderMoney = orderMoney - query.getMoney(); - orderTaxi.setRedPacketMoney(query.getMoney()); - orderTaxi.setRedPacketId(query.getId()); - } - - //计算折扣 - UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderTaxi.getCompanyId()); - if(null != query2){ - Double taxi = query2.getTaxi(); - orderTaxi.setDiscount(taxi); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(taxi / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderTaxi.setDiscountMoney(orderMoney - v); - orderTaxi.setActivityId(query2.getId()); - orderMoney = v; - } - } - - if(payType == 1){//微信支付 - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); - paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ - return ResultUtil.error("余额不足,无法完成支付", ""); - } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderTaxi.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "出租车", orderMoney, 2, 1, 1, 2, orderId); - userInfoService.updateById(userInfo); - - orderTaxi.setState(8); - orderTaxi.setPayType(3); - orderTaxi.setPayMoney(orderMoney); - - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); - } - //添加收入 - Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); - orderTaxi.setSplitAllocation(JSON.toJSONString(map)); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - } - }).start(); - - //用户付款后,删除限制司机6分钟不能接单的标识 - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - if(ToolUtil.isNotEmpty(vehicle)){ - JSONArray jsonArray = JSON.parseArray(vehicle); - for(int i = 0; i < jsonArray.size(); i++){ - if(jsonArray.getInteger(i).compareTo(orderTaxi.getDriverId()) == 0){ - jsonArray.remove(i); - break; - } - } - redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); - } - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); - } - - this.updateAllColumnById(orderTaxi); - return resultUtil; - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil payTaxiOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - if(orderTaxi.getState() == 8 || orderTaxi.getState() == 9){ - return ResultUtil.error("订单已完成支付,不允许重复支付", ""); - } - if(orderTaxi.getState() != 7){ - return ResultUtil.error("订单不在待支付状态,不允许支付", ""); - } - Integer uid = orderTaxi.getUserId(); - Double orderMoney = orderTaxi.getOrderMoney(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(new Object()); - orderTaxi.setCouponMoney(0D);//初始化历史数据 - orderTaxi.setCouponId(null); - - //计算优惠券 - UserCouponRecord userCouponRecord = null; - if(null != objectId && 1 == objectType){ - userCouponRecord = userCouponRecordService.selectById(objectId); - if(userCouponRecord.getCompanyId() != orderTaxi.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", ""); - } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", ""); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 2){ - return ResultUtil.error("优惠券不能用于此类型订单", ""); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - orderMoney = orderMoney - userCouponRecord.getMoney(); - orderTaxi.setCouponMoney(userCouponRecord.getMoney()); - orderTaxi.setCouponId(objectId); - } - - //计算打车卡 - UserTaxiCard userTaxiCard = null; - if(null != objectId && objectType == 2){ - userTaxiCard = userTaxiCardService.selectById(objectId); - TaxiCard taxiCard = taxiCardService.selectById(userTaxiCard.getTaxiCardId()); - if(taxiCard.getTaxiCardType() == 1 && userTaxiCard.getCompanyId() != orderTaxi.getCompanyId()){ - return ResultUtil.error("打车卡不能用于此订单", ""); - } - if(System.currentTimeMillis() > userTaxiCard.getEndTime().getTime()){ - return ResultUtil.error("打车卡已过期", ""); - } - if(userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3){ - Integer time = JSON.parseObject(userTaxiCard.getContent()).getInteger("time"); - if(0 == time){ - return ResultUtil.error("打车卡已使用完", ""); - } - } - List<Integer> integers = JSON.parseObject(userTaxiCard.getContent()).getJSONArray("businessTypes").toJavaList(Integer.class); - if(!integers.contains(2)){ - return ResultUtil.error("打车卡不能用于此类型订单", ""); - } - - Double yh = 0D; - JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); - if(userTaxiCard.getType() == 1){//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - Double discount = jsonObject.getDouble("discount"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - break; - } - } - - } - if(userTaxiCard.getType() == 2){//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - for(int j = fullReduction.size() - 1; j >= 0 ; j--){ - JSONArray jsonArray = fullReduction.getJSONArray(j); - Double p = jsonArray.getDouble(0);//满金额 - if(orderTaxi.getOrderMoney().compareTo(p) >= 0){ - yh = jsonArray.getDouble(1);//优惠金额 - break; - } - } - } - } - - } - if(userTaxiCard.getType() == 3){//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = jsonObject.getDouble("discountAmount"); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - } - } - } - if(userTaxiCard.getType() == 4){//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} - Double discount = jsonObject.getDouble("discount");//折扣 - JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date date = new Date(); - for(int i = 0; i < timeQuantum.size(); i++){ - String[] split = timeQuantum.getString(i).split(" - "); - Date s = sdf1.parse(sdf.format(date) + " " + split[0]); - Date e = sdf1.parse(sdf.format(date) + " " + split[1]); - if(s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()){ - yh = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); - break; - } - } - } - - orderMoney = orderMoney - yh; - orderTaxi.setTaxiCardId(userTaxiCard.getTaxiCardId()); - orderTaxi.setUserTaxiCardId(objectId); - orderTaxi.setDiscountAmount(yh); - } - - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderTaxi.getCompanyId(), 1, 2, orderMoney); - if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ - orderMoney = orderMoney - query.getMoney(); - orderTaxi.setRedPacketMoney(query.getMoney()); - orderTaxi.setRedPacketId(query.getId()); - } - - //计算折扣 - UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderTaxi.getCompanyId()); - if(null != query2){ - Double taxi = query2.getTaxi(); - orderTaxi.setDiscount(taxi); - double v = new BigDecimal(orderMoney).multiply(new BigDecimal(taxi / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - if(orderMoney.compareTo(v) > 0){ - orderTaxi.setDiscountMoney(orderMoney - v); - orderTaxi.setActivityId(query2.getId()); - orderMoney = v; - } - } - orderMoney = orderMoney < 0 ? 0 : orderMoney; - orderMoney = new BigDecimal(orderMoney).setScale(2,RoundingMode.HALF_UP).doubleValue(); - System.out.println("!!!"+orderMoney+"!!!!"); - if(payType == 1){//微信支付 - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); - paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, "", 1);//添加预支付数据 - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ - return ResultUtil.error("余额不足,无法完成支付"); - } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderTaxi.getUserId(), 1); + } + if (payType == 4) { + Double payMoney = orderTaxi.getOrderMoney(); + Integer integer = paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, id, 2, 4, query.getMoney(), "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(query.getMoney()), 4, id, 8, integer); + + } + } + return resultUtil; + } + + + /** + * 删除定时任务 + * + * @param orderId + */ + @Override + public void deleteTask(Integer orderId) { + //发送验证码短信 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("orderId", orderId + ""); + params.add("orderType", "2"); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); + JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); + if (jsonObject.getIntValue("code") != 200) { + System.err.println("调用driver-server出错了"); + } + } + + + /** + * 获取用户余额和可用优惠券数量 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { + Map<String, Object> map = new HashMap<>(); + UserInfo userInfo = userInfoService.selectById(uid); + map.put("balance", userInfo.getBalance()); + OrderTaxi orderTaxi = this.selectById(orderId); + int i = userCouponRecordService.queryAvailable(uid, orderTaxi.getCompanyId(), 1, 2, orderTaxi.getOrderMoney()); + i = i + userCouponRecordService.queryAvailable(uid, orderTaxi.getCompanyId(), 1, 0, orderTaxi.getOrderMoney()); + map.put("coupon", i); + return map; + } + + @Override + public PreferentialDataVo queryBalance1(Integer orderId, Integer uid) throws Exception { + UserInfo userInfo = userInfoService.selectById(uid); + PreferentialDataVo preferentialDataVo = new PreferentialDataVo(); + preferentialDataVo.setBalance(userInfo.getBalance()); + OrderTaxi orderTaxi = this.selectById(orderId); + Integer ids = userInfoService.getDiscount(); + if (ids != null) { + List<UserActivityDiscount1> userActivityId = userActivityDiscount1Mapper.selectList(new EntityWrapper<UserActivityDiscount1>().eq("userActivityId", ids)); + if (userActivityId.size() > 0) { + preferentialDataVo.setDiscount(userActivityId.get(0).getTaxi()); + } + } + // 查出当前用户的红包 并将订单的修改 + List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).le("money", orderTaxi.getOrderMoney()).gt("expirationTime", new Date()).gt("endTime", new Date())); + if (userRedPacketRecords.size() > 0) { + + preferentialDataVo.setRedPacket(userRedPacketRecords.get(0).getMoney()); + orderTaxi.setRedPacketId(userRedPacketRecords.get(0).getId()); + orderTaxi.setRedPacketMoney(userRedPacketRecords.get(0).getMoney()); + this.updateById(orderTaxi); + } + + //获取优惠券中最优数据 + List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderTaxi.getCompanyId()).eq("state", 1).le("money", orderTaxi.getOrderMoney()).in("couponUseType", Arrays.asList(0, 2)).eq("userId", uid).where("now() < expirationTime")); + Integer id = null; + Double price = 0d; + Integer type = 0; + for (UserCouponRecord userCouponRecord : list) { + if (userCouponRecord.getCouponType() == 1) {//抵扣券 + if (price.compareTo(userCouponRecord.getMoney()) < 0) { + price = userCouponRecord.getMoney(); + id = userCouponRecord.getId(); + type = 1; + } + } else {//满减券 + if (orderTaxi.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) >= 0 && price.compareTo(userCouponRecord.getMoney()) < 0) { + price = userCouponRecord.getMoney(); + id = userCouponRecord.getId(); + type = 1; + } + } + } + + //获取打车卡中最优数 + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); + } + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); + } + List<UserTaxiCard> userTaxiCards; + if (null != companyCity) { + userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().like("companyCityId", "%" + companyCity.getId() + "%") + .in("type", Arrays.asList(1, 2, 3, 4)).eq("userId", uid).where("now() between startTime and endTime")); + + } else { + userTaxiCards = new ArrayList<>(); + } + + //全国卡 + List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards2); + } + Map<String, Object> map = getOptimalTaxiCards(orderTaxi, price, id, type, userTaxiCards); + price = Double.valueOf(map.get("price").toString()); + id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; + type = Integer.valueOf(map.get("type").toString()); + + + //亲密账户 + List<UserTaxiCard> userTaxiCards_ = new ArrayList<>(); + List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); + CompanyCity finalCompanyCity = companyCity; + bindUserId.forEach(userUser -> { + if (finalCompanyCity != null) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) + .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); + userTaxiCards_.addAll(userTaxiCards1); + } + + //全国卡 + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards2 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards_.addAll(userTaxiCards2); + } + }); + map = getOptimalTaxiCards(orderTaxi, price, id, type, userTaxiCards_); + price = Double.valueOf(map.get("price").toString()); + id = null != map.get("id") ? Integer.valueOf(map.get("id").toString()) : null; + type = Integer.valueOf(map.get("type").toString()); + + if (price <= orderTaxi.getOrderMoney() || type == 2) { + preferentialDataVo.setObjectId(id); + preferentialDataVo.setDiscountAmount(price); + preferentialDataVo.setType(type); + } + return preferentialDataVo; + } + + + /** + * 获取最优数据 + * + * @param orderTaxi + * @param price + * @param id + * @param type + * @param userTaxiCards + * @return + */ + public Map<String, Object> getOptimalTaxiCards(OrderTaxi orderTaxi, Double price, Integer id, Integer type, List<UserTaxiCard> userTaxiCards) throws Exception { + Map<String, Object> map = new HashMap<>(); + for (UserTaxiCard t : userTaxiCards) { + JSONObject jsonObject = JSON.parseObject(t.getContent()); + List<Integer> integers = jsonObject.getJSONArray("businessTypes").toJavaList(Integer.class); + if (!integers.contains(2)) { + continue; + } + if (t.getType() == 1) {//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discount = jsonObject.getDouble("discount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + double v = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + + } + } + + } + if (t.getType() == 2) {//优惠卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + for (int j = fullReduction.size() - 1; j >= 0; j--) { + JSONArray jsonArray = fullReduction.getJSONArray(j); + Double p = jsonArray.getDouble(0);//满金额 + Double y = jsonArray.getDouble(1);//优惠金额 + if (orderTaxi.getOrderMoney().compareTo(p) >= 0 && price.compareTo(y) < 0) { + price = y; + id = t.getId(); + type = 2; + } + } + } + } + } + if (t.getType() == 3) {//次数卡{"businessTypes":[1,2,3],"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"time":1,"discountAmount":10} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discountAmount = jsonObject.getDouble("discountAmount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + if (price.compareTo(discountAmount) < 0) { + price = discountAmount; + id = t.getId(); + type = 2; + } + } + } + + } + if (t.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + Double discount = jsonObject.getDouble("discount");//折扣 + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + double v = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + if (price.compareTo(v) < 0) { + price = v; + id = t.getId(); + type = 2; + } + } + } + } + } + map.put("price", price); + map.put("id", id); + map.put("type", type); + return map; + } + + + /** + * 获取优惠券列表 + * + * @param orderId + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderTaxi.getCompanyId(), 1, 2, orderTaxi.getOrderMoney(), pageNum, size); + List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderTaxi.getCompanyId(), 1, 0, orderTaxi.getOrderMoney(), pageNum, size); + list.addAll(list1); + return list; + } + + + @Override + public List<CouponsListVo> queryCouponList(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { + pageNum = (pageNum - 1) * size; + OrderTaxi orderTaxi = this.selectById(orderId); + List<CouponsListVo> rows = new ArrayList<>(); + List<UserCouponRecord> list = userCouponRecordService.selectList(new EntityWrapper<UserCouponRecord>().eq("companyId", orderTaxi.getCompanyId()) + .eq("state", 1).in("couponUseType", Arrays.asList(0, 2)).eq("userId", uid).where("expirationTime >= now()")); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (UserCouponRecord userCouponRecord : list) { + if (userCouponRecord.getCouponType() == 2) {//满减券 + if (orderTaxi.getOrderMoney().compareTo(userCouponRecord.getFullMoney()) < 0) { + continue; + } + } + CouponsListVo couponsListVo = new CouponsListVo(); + couponsListVo.setId(userCouponRecord.getId()); + couponsListVo.setDataType(1); + couponsListVo.setMoney(userCouponRecord.getMoney()); + couponsListVo.setUserType(userCouponRecord.getCouponUseType()); + couponsListVo.setTime(sdf.format(userCouponRecord.getExpirationTime())); + couponsListVo.setType(userCouponRecord.getCouponType()); + couponsListVo.setFullMoney(userCouponRecord.getFullMoney()); + couponsListVo.setState(userCouponRecord.getState()); + Company company = companyService.selectById(userCouponRecord.getCompanyId()); + couponsListVo.setCompany(company.getName()); + rows.add(couponsListVo); + } + + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + System.out.println(geocode); + CompanyCity companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("areaCode", geocode.get("districtCode")).eq("state", 1)); + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("cityCode", geocode.get("cityCode")).eq("state", 1)); + } + if (null == companyCity) { + companyCity = companyCityService.selectOne(new EntityWrapper<CompanyCity>().eq("companyId", orderTaxi.getCompanyId()).eq("provinceCode", geocode.get("provinceCode")).eq("state", 1)); + } + List<UserTaxiCard> userTaxiCards = new ArrayList<>(); + if (null != companyCity) { + userTaxiCards = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).like("companyCityId", "%" + companyCity.getId() + "%").where("now() between startTime and endTime")); + } + + //全国卡 + List<TaxiCard> taxiCards = taxiCardService.selectList(new EntityWrapper<TaxiCard>().eq("taxiCardType", 2).in("type", Arrays.asList(1, 2, 3, 4)).eq("state", 1)); + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", uid) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + userTaxiCards.addAll(userTaxiCards1); + } + + + //亲密账户 + List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); + CompanyCity finalCompanyCity = companyCity; + List<UserTaxiCard> finalUserTaxiCards = userTaxiCards; + bindUserId.forEach(userUser -> { + if (finalCompanyCity != null) { + List<UserTaxiCard> taxiCardPayments1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().in("type", Arrays.asList(1, 2, 3, 4)) + .like("companyCityId", "%" + finalCompanyCity.getId() + "%").eq("userId", userUser.getUserId()).where("now() between startTime and endTime")); + finalUserTaxiCards.addAll(taxiCardPayments1); + } + + //全国卡 + if (taxiCards.size() > 0) { + List<UserTaxiCard> userTaxiCards1 = userTaxiCardService.selectList(new EntityWrapper<UserTaxiCard>().eq("userId", userUser.getUserId()) + .in("type", Arrays.asList(1, 2, 3, 4)).in("taxiCardId", taxiCards.stream().map(TaxiCard::getId).collect(Collectors.toList())).where("now() between startTime and endTime")); + finalUserTaxiCards.addAll(userTaxiCards1); + } + }); + + for (UserTaxiCard t : finalUserTaxiCards) { + try { + CouponsListVo couponsListVo = new CouponsListVo(); + couponsListVo.setId(t.getId()); + couponsListVo.setDataType(2); + couponsListVo.setUserType(1); + couponsListVo.setTaxiCardType(t.getType()); + couponsListVo.setTime(sdf.format(t.getEndTime())); + couponsListVo.setState(1); + Company company = companyService.selectById(t.getCompanyId()); + couponsListVo.setCompany(company.getName()); + couponsListVo.setName(taxiCardService.selectById(t.getTaxiCardId()).getName()); + + + JSONObject jsonObject = JSON.parseObject(t.getContent()); + JSONArray businessTypes = jsonObject.getJSONArray("businessTypes"); + if (!businessTypes.toJavaList(Integer.class).contains(2)) { + continue; + } + if (t.getType() == 1) {//{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discount")); + couponsListVo.setType(1); + } + if (t.getType() == 2) {//{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + b = true; + for (int i = fullReduction.size() - 1; i >= 0; i--) { + JSONArray jsonArray = fullReduction.getJSONArray(i); + Double m = jsonArray.getDouble(0); + Double j = jsonArray.getDouble(1); + if (orderTaxi.getOrderMoney().compareTo(m) >= 0) { + couponsListVo.setMoney(j); + couponsListVo.setFullMoney(m); + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setType(2); + } + if (t.getType() == 3) {//{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + Integer time = jsonObject.getInteger("time"); + if (time == 0) { + continue; + } + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discountAmount")); + couponsListVo.setType(2); + } + if (t.getType() == 4) {//{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); + boolean b = true; + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf.parse(sdf1.format(new Date()) + " " + split[0]); + Date e = sdf.parse(sdf1.format(new Date()) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + b = false; + break; + } + } + if (b) { + continue; + } + couponsListVo.setMoney(jsonObject.getDouble("discount")); + couponsListVo.setType(1); + } + + + String str = ""; + TaxiCard taxiCard = taxiCardService.selectById(t.getTaxiCardId()); + if (taxiCard.getTaxiCardType() == 1) { + String[] split = taxiCard.getCompanyCityId().split(";"); + for (String c : split) { + CompanyCity companyCity1 = companyCityService.selectById(c); + if (ToolUtil.isNotEmpty(companyCity1.getAreaCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getAreaCode())); + str += region.getName() + ";"; + continue; + } + if (ToolUtil.isNotEmpty(companyCity1.getCityCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getCityCode())); + str += region.getName() + ";"; + continue; + } + if (ToolUtil.isNotEmpty(companyCity1.getProvinceCode())) { + Region region = regionService.selectOne(new EntityWrapper<Region>().eq("code", companyCity1.getProvinceCode())); + str += region.getName() + ";"; + continue; + } + } + } else { + str = "全国;"; + } + couponsListVo.setCity(str.substring(0, str.length() - 1)); + + rows.add(couponsListVo); + } catch (Exception e) { + e.printStackTrace(); + } + } + Collections.sort(rows, new Comparator<CouponsListVo>() { + public int compare(CouponsListVo s1, CouponsListVo s2) { + return Integer.compare(s1.getId(), s2.getId()); + } + }); + + if (rows.size() >= (pageNum + 1) * size) { + rows = rows.subList(pageNum, pageNum + size); + } else if (pageNum < rows.size() && rows.size() < (pageNum + 1) * size) { + rows = rows.subList(pageNum, rows.size()); + } else { + rows = new ArrayList<>(); + } + + rows = rows.stream().filter(e -> e.getMoney() <= orderTaxi.getOrderMoney() || e.getDataType() == 2).collect(Collectors.toList()); + return rows; + } + + /** + * 订单完成支付订单操作 + * + * @param payType 1=微信,2=支付宝,3=余额 + * @param orderId + * @return + * @throws Exception + */ + @Override + public ResultUtil payTaxiOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + if (orderTaxi.getState() == 8 || orderTaxi.getState() == 9) { + return ResultUtil.error("订单已完成支付,不允许重复支付", ""); + } + if (orderTaxi.getState() != 7) { + return ResultUtil.error("订单不在待支付状态,不允许支付", ""); + } + Integer uid = orderTaxi.getUserId(); + Double orderMoney = orderTaxi.getOrderMoney(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + orderTaxi.setCouponMoney(0D);//初始化历史数据 + orderTaxi.setCouponId(null); + + //计算优惠券 + UserCouponRecord userCouponRecord = null; + if (null != couponId) { + userCouponRecord = userCouponRecordService.selectById(couponId); + if (userCouponRecord.getCompanyId() != orderTaxi.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", ""); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", ""); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 2) { + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + orderMoney = orderMoney - userCouponRecord.getMoney(); + orderTaxi.setCouponMoney(userCouponRecord.getMoney()); + orderTaxi.setCouponId(couponId); + } + + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderTaxi.getCompanyId(), 1, 2, orderMoney); + if (null != query && orderMoney.compareTo(query.getMoney()) > 0) { + orderMoney = orderMoney - query.getMoney(); + orderTaxi.setRedPacketMoney(query.getMoney()); + orderTaxi.setRedPacketId(query.getId()); + } + + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderTaxi.getCompanyId()); + if (null != query2) { + Double taxi = query2.getTaxi(); + orderTaxi.setDiscount(taxi); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(taxi / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if (orderMoney.compareTo(v) > 0) { + orderTaxi.setDiscountMoney(orderMoney - v); + orderTaxi.setActivityId(query2.getId()); + orderMoney = v; + } + } + + if (payType == 1) {//微信支付 + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); + paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付", ""); + } + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "出租车", orderMoney, 2, 1, 1, 2, orderId); + userInfoService.updateById(userInfo); + + orderTaxi.setState(8); + orderTaxi.setPayType(3); + orderTaxi.setPayMoney(orderMoney); + + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + //添加收入 + Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); + orderTaxi.setSplitAllocation(JSON.toJSONString(map)); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + } + }).start(); + + //用户付款后,删除限制司机6分钟不能接单的标识 + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + if (ToolUtil.isNotEmpty(vehicle)) { + JSONArray jsonArray = JSON.parseArray(vehicle); + for (int i = 0; i < jsonArray.size(); i++) { + if (jsonArray.getInteger(i).compareTo(orderTaxi.getDriverId()) == 0) { + jsonArray.remove(i); + break; + } + } + redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); + } + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + } + + this.updateAllColumnById(orderTaxi); + return resultUtil; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil payTaxiOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + if (orderTaxi.getState() == 8 || orderTaxi.getState() == 9) { + return ResultUtil.error("订单已完成支付,不允许重复支付", ""); + } + if (orderTaxi.getState() != 7) { + return ResultUtil.error("订单不在待支付状态,不允许支付", ""); + } + Integer uid = orderTaxi.getUserId(); + Double orderMoney = orderTaxi.getOrderMoney(); + UserInfo userInfo = userInfoService.selectById(uid); + ResultUtil resultUtil = ResultUtil.success(new Object()); + orderTaxi.setCouponMoney(0D);//初始化历史数据 + orderTaxi.setCouponId(null); + + //计算优惠券 + UserCouponRecord userCouponRecord = null; + if (null != objectId && 1 == objectType) { + userCouponRecord = userCouponRecordService.selectById(objectId); + if (userCouponRecord.getCompanyId() != orderTaxi.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", ""); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", ""); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 2) { + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + orderMoney = orderMoney - userCouponRecord.getMoney(); + orderTaxi.setCouponMoney(userCouponRecord.getMoney()); + orderTaxi.setCouponId(objectId); + } + + //计算打车卡 + UserTaxiCard userTaxiCard = null; + if (null != objectId && objectType == 2) { + userTaxiCard = userTaxiCardService.selectById(objectId); + TaxiCard taxiCard = taxiCardService.selectById(userTaxiCard.getTaxiCardId()); + if (taxiCard.getTaxiCardType() == 1 && userTaxiCard.getCompanyId() != orderTaxi.getCompanyId()) { + return ResultUtil.error("打车卡不能用于此订单", ""); + } + if (System.currentTimeMillis() > userTaxiCard.getEndTime().getTime()) { + return ResultUtil.error("打车卡已过期", ""); + } + if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { + Integer time = JSON.parseObject(userTaxiCard.getContent()).getInteger("time"); + if (0 == time) { + return ResultUtil.error("打车卡已使用完", ""); + } + } + List<Integer> integers = JSON.parseObject(userTaxiCard.getContent()).getJSONArray("businessTypes").toJavaList(Integer.class); + if (!integers.contains(2)) { + return ResultUtil.error("打车卡不能用于此类型订单", ""); + } + + Double yh = 0D; + JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); + if (userTaxiCard.getType() == 1) {//打折次数卡{"businessTypes":[1,2,3],"time":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"],"discount":5} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + Double discount = jsonObject.getDouble("discount"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + break; + } + } + + } + if (userTaxiCard.getType() == 2) {//优惠卡{"businessTypes":[1,2,3],"fullReduction":[[50,3],[100,5],[150,10]]} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + JSONArray fullReduction = jsonObject.getJSONArray("fullReduction"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + for (int j = fullReduction.size() - 1; j >= 0; j--) { + JSONArray jsonArray = fullReduction.getJSONArray(j); + Double p = jsonArray.getDouble(0);//满金额 + if (orderTaxi.getOrderMoney().compareTo(p) >= 0) { + yh = jsonArray.getDouble(1);//优惠金额 + break; + } + } + } + } + + } + if (userTaxiCard.getType() == 3) {//次数卡{"businessTypes":[1,2,3],"time":1,"discountAmount":10} + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = jsonObject.getDouble("discountAmount"); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + } + } + } + if (userTaxiCard.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} + Double discount = jsonObject.getDouble("discount");//折扣 + JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + for (int i = 0; i < timeQuantum.size(); i++) { + String[] split = timeQuantum.getString(i).split(" - "); + Date s = sdf1.parse(sdf.format(date) + " " + split[0]); + Date e = sdf1.parse(sdf.format(date) + " " + split[1]); + if (s.getTime() <= System.currentTimeMillis() && System.currentTimeMillis() < e.getTime()) { + yh = new BigDecimal(orderTaxi.getOrderMoney()).multiply(new BigDecimal((10 - discount) / 10)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + break; + } + } + } + + orderMoney = orderMoney - yh; + orderTaxi.setTaxiCardId(userTaxiCard.getTaxiCardId()); + orderTaxi.setUserTaxiCardId(objectId); + orderTaxi.setDiscountAmount(yh); + } + + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderTaxi.getCompanyId(), 1, 2, orderMoney); + if (null != query && orderMoney.compareTo(query.getMoney()) > 0) { + orderMoney = orderMoney - query.getMoney(); + orderTaxi.setRedPacketMoney(query.getMoney()); + orderTaxi.setRedPacketId(query.getId()); + } + + //计算折扣 + UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderTaxi.getCompanyId()); + if (null != query2) { + Double taxi = query2.getTaxi(); + orderTaxi.setDiscount(taxi); + double v = new BigDecimal(orderMoney).multiply(new BigDecimal(taxi / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + if (orderMoney.compareTo(v) > 0) { + orderTaxi.setDiscountMoney(orderMoney - v); + orderTaxi.setActivityId(query2.getId()); + orderMoney = v; + } + } + orderMoney = orderMoney < 0 ? 0 : orderMoney; + orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue(); + System.out.println("!!!" + orderMoney + "!!!!"); + if (payType == 1) {//微信支付 + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 1, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); + paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 2, orderMoney, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付"); + } // if(orderMoney>0) { // resultUtil = appOrderController.moneyPay(orderId, userInfo.getId(), orderMoney); // if (resultUtil.getCode() == 500) { // return ResultUtil.error("电子余额不足,无法完成支付"); // } // } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderTaxi.getCompanyId()); - if(null != query1){ - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - } - - //添加交易明细 - transactionDetailsService.saveData(uid, "出租车", orderMoney, 2, 1, 1, 2, orderId); - userInfoService.updateById(userInfo); - - orderTaxi.setState(8); - orderTaxi.setPayType(3); - orderTaxi.setPayMoney(orderMoney); - - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - //处理打车卡 - if(null != userTaxiCard){ - userTaxiCardService.updateById(userTaxiCard); - } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); - } - - //添加收入 - Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); - orderTaxi.setSplitAllocation(JSON.toJSONString(map)); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - } - }).start(); - - //用户付款后,删除限制司机6分钟不能接单的标识 - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - if(ToolUtil.isNotEmpty(vehicle)){ - JSONArray jsonArray = JSON.parseArray(vehicle); - for(int i = 0; i < jsonArray.size(); i++){ - if(jsonArray.getInteger(i).compareTo(orderTaxi.getDriverId()) == 0){ - jsonArray.remove(i); - break; - } - } - redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); - } - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); - - }else if(payType == 4){ - if(orderMoney == 0){ - return ResultUtil.error("请使用余额支付"); - } - Double payMoney = orderTaxi.getOrderMoney(); - Integer integer = paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 4, orderMoney, "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4,orderId,9,integer); - - } - - this.updateAllColumnById(orderTaxi); - return resultUtil; - } - @Autowired - private AppOrderController appOrderController; - /** - * 手动完成订单操作 - * @param orderId - * @param orderType - * @return - * @throws Exception - */ - @Override - public ResultUtil completeOrder(Integer orderId, Integer orderType) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - if(orderTaxi.getState() != 7){ - return ResultUtil.error("订单不在待支付,无法完成订单"); - } - orderTaxi.setPayManner(2);//其他方式支付 + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + if (null != query1) { + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + } + + //添加交易明细 + transactionDetailsService.saveData(uid, "出租车", orderMoney, 2, 1, 1, 2, orderId); + userInfoService.updateById(userInfo); + + orderTaxi.setState(8); + orderTaxi.setPayType(3); + orderTaxi.setPayMoney(orderMoney); + + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + //处理打车卡 + if (null != userTaxiCard) { + userTaxiCardService.updateById(userTaxiCard); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + + //添加收入 + Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); + orderTaxi.setSplitAllocation(JSON.toJSONString(map)); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + } + }).start(); + + //用户付款后,删除限制司机6分钟不能接单的标识 + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + if (ToolUtil.isNotEmpty(vehicle)) { + JSONArray jsonArray = JSON.parseArray(vehicle); + for (int i = 0; i < jsonArray.size(); i++) { + if (jsonArray.getInteger(i).compareTo(orderTaxi.getDriverId()) == 0) { + jsonArray.remove(i); + break; + } + } + redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); + } + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + + } else if (payType == 4) { + if (orderMoney == 0) { + return ResultUtil.error("请使用余额支付"); + } + Double payMoney = orderTaxi.getOrderMoney(); + Integer integer = paymentRecordService.saveData(1, orderTaxi.getUserId(), 1, orderId, 2, 4, orderMoney, "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4, orderId, 9, integer); + + } + + this.updateAllColumnById(orderTaxi); + return resultUtil; + } + + @Autowired + private AppOrderController appOrderController; + + /** + * 手动完成订单操作 + * + * @param orderId + * @param orderType + * @return + * @throws Exception + */ + @Override + public ResultUtil completeOrder(Integer orderId, Integer orderType) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + if (orderTaxi.getState() != 7) { + return ResultUtil.error("订单不在待支付,无法完成订单"); + } + orderTaxi.setPayManner(2);//其他方式支付 // orderTaxi.setOrderMoney(0D); // orderTaxi.setTravelMoney(0D); // orderTaxi.setParkMoney(0D); // orderTaxi.setRoadTollMoney(0D); - orderTaxi.setRedPacketMoney(0D); - orderTaxi.setCouponMoney(0D); - orderTaxi.setDiscount(0D); - orderTaxi.setDiscountMoney(0D); - orderTaxi.setPayMoney(orderTaxi.getOrderMoney()); - orderTaxi.setState(8); - this.updateById(orderTaxi); - - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - } - }).start(); - return ResultUtil.success(); - } - - - /** - * 获取用户的订单列表 - * @param uid - * @param pageNum - * @param size - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { - pageNum = (pageNum - 1) * size; - List<Map<String, Object>> maps = orderTaxiMapper.queryMyOrderList(uid, pageNum, size); - for(Map<String, Object> map : maps){ - if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ - map.put("state", map.get("oldState")); - } - } - return maps; - } - - - /** - * 获取历史消费记录 - * @param uid - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryMyTravelRecord(Integer uid) throws Exception { - return orderTaxiMapper.queryMyTravelRecord(uid); - } - - - /** - * 获取红包使用记录 - * @param uid - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception { - return orderTaxiMapper.queryRedEnvelope(uid); - } - - - /** - * 获取用户单发票页面的订单列表 - * @param type 开票状态(1=未开票,2=已开票) - * @param startTime 订单开始时间 - * @param endTime 订单结束时间 - * @param startMoney 订单金额范围 - * @param endMoney - * @param uid - * @return - * @throws Exception - */ - @Override - public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, - Double endMoney, Integer uid) throws Exception { - startTime = dateUtil.getStartOrEndDate(startTime, "start"); - endTime = dateUtil.getStartOrEndDate(endTime, "end"); - return orderTaxiMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); - } - - - /** - * 获取订单详情 - * @param orderId - * @return - */ - @Override - public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception{ - Map<String, Object> map = orderTaxiMapper.queryOrderInfo(orderId); - if(null != map && null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 - OrderTaxi orderTaxi = this.selectById(orderId); - orderTaxi.setReassignNotice(0); - this.updateById(orderTaxi); - } - if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ - map.put("state", map.get("oldState")); - } - String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId")); - map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); - map.put("orderType", 2); - return map; - } - - - /** - * 获取下单推送完后没有司机下单的提醒 - * @return - * @throws Exception - */ - @Override - public EndPushWarpper queryEndPush(Integer uid) throws Exception { - List<OrderTaxi> list = orderTaxiMapper.queryByState(uid, 1); - EndPushWarpper endPushWarpper = new EndPushWarpper(); - if(list.size() > 0){ - OrderTaxi orderTaxi = list.get(0); - if(!orderIds.contains(orderTaxi.getId())){ - endPushWarpper.setOrderId(orderTaxi.getId()); - endPushWarpper.setOrderType(2); - endPushWarpper.setState(1); - List<PushOrder> querys = pushOrderService.querys(null, 2, orderTaxi.getCompanyId());//获取需要推送的次数 - int time = 0; - for(int i = 1; i <= querys.size()+5; i++){ - PushOrder pushOrder = pushOrderService.querys(i, 2, orderTaxi.getCompanyId()).get(0); - time += pushOrder.getPushTime() * 1000; - } - //当前时间减去推单总时间大于下单时间 - if((System.currentTimeMillis() - time) > orderTaxi.getInsertTime().getTime()){ - endPushWarpper.setState(2); - } - } - - } - return endPushWarpper; - } - - - - - /** - * 获取服务中的订单数据 - * @param uid - * @return - * @throws Exception - */ - @Override - public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { - OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); - OrderTaxi orderTaxi = this.selectById(orderId); - if (null == orderTaxi) { - return orderServerWarpper; - } - //计算预计距离和剩余时间 - String value = null; - if (null != orderTaxi.getDriverId()) { - value = (String) redisTemplate.opsForValue().get("DRIVER" + orderTaxi.getDriverId()); - if (null == value || "".equals(value)) { - System.err.println("司机没有上传位置信息"); - - //调用获取轨迹中的数据 - List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2); - if (list.size() > 0) { - Map<String, Object> map = list.get(list.size() - 1); - value = map.get("lon") + "," + map.get("lat"); - } - } - } - - orderServerWarpper.setOrderId(orderTaxi.getId()); - orderServerWarpper.setOrderType(2); - orderServerWarpper.setState(orderTaxi.getState()); - orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); - orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); - orderServerWarpper.setReassignNotice(orderTaxi.getReassignNotice()); - if (orderTaxi.getState() == 2 || orderTaxi.getState() == 3) {//前往预约地 - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderTaxi.getStartLon() + "," + orderTaxi.getStartLat(), 1); - String d = "0"; - String t = "0"; - if (null == distance) { - System.err.println("查询距离出错了"); - } else { - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; - } - orderServerWarpper.setReservationMileage(d); - orderServerWarpper.setReservationTime(t); - orderServerWarpper.setServedMileage("0"); - orderServerWarpper.setServedTime("0"); - orderServerWarpper.setLaveMileage("0"); - orderServerWarpper.setLaveTime("0"); - } - if(orderTaxi.getState() == 5 || orderTaxi.getState() == 6){//服务中 - // TODO: 2023/11/4 无法修改 - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderTaxi.getEndLon() + "," + orderTaxi.getEndLat(), 1); - String d = "0"; - String t = "0"; - if(null == distance){ - System.err.println("查询距离出错了"); - }else{ - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; - } - orderServerWarpper.setReservationMileage("0"); - orderServerWarpper.setReservationTime("0"); - orderServerWarpper.setServedMileage(String.valueOf(orderTaxi.getMileage() / 1000)); - orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderTaxi.getStartServiceTime().getTime()) / 60000).intValue() + ""); - orderServerWarpper.setLaveMileage(d); - orderServerWarpper.setLaveTime(t); - } - - return orderServerWarpper; - } - - - /** - * 评论成功后获取红包金额 - * @param orderId - * @return - * @throws Exception - */ - @Override - public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - Integer companyId = orderTaxi.getCompanyId(); - - Map<String, Object> query = userActivityRedenvelopeService.query(companyId, orderTaxi.getTravelTime()); - Double money = 0D; - BaseWarpper baseWarpper = new BaseWarpper(); - if(null != query){ - Integer type = Integer.valueOf(String.valueOf(query.get("type"))); - if(type == 1){//固定金额 - money = Double.valueOf(String.valueOf(query.get("money"))); - }else{//随机金额 - Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); - Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); - int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); - Random random = new Random(); - int num = random.nextInt(i); - money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - } - - //判断当前红包是否大于剩余可领取总金额 - if(money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0){ - baseWarpper.setAmount(0D); - return ResultUtil.success(baseWarpper); - } - } - baseWarpper.setAmount(money); - - if(money > 0){ - //添加临时红包数据 - UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); - userRedPacketRecord.setMoney(money); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); - userRedPacketRecord.setExpirationTime(calendar.getTime()); - userRedPacketRecord.setInsertTime(new Date()); - userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); - userRedPacketRecord.setState(0); - userRedPacketRecord.setOrderId(orderTaxi.getId()); - userRedPacketRecord.setOrderType(2); - userRedPacketRecord.setUserId(orderTaxi.getUserId()); - userRedPacketRecordService.insert(userRedPacketRecord); - } + orderTaxi.setRedPacketMoney(0D); + orderTaxi.setCouponMoney(0D); + orderTaxi.setDiscount(0D); + orderTaxi.setDiscountMoney(0D); + orderTaxi.setPayMoney(orderTaxi.getOrderMoney()); + orderTaxi.setState(8); + this.updateById(orderTaxi); + + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + } + }).start(); + return ResultUtil.success(); + } + + + /** + * 获取用户的订单列表 + * + * @param uid + * @param pageNum + * @param size + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { + pageNum = (pageNum - 1) * size; + List<Map<String, Object>> maps = orderTaxiMapper.queryMyOrderList(uid, pageNum, size); + for (Map<String, Object> map : maps) { + if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { + map.put("state", map.get("oldState")); + } + } + return maps; + } + + + /** + * 获取历史消费记录 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryMyTravelRecord(Integer uid) throws Exception { + return orderTaxiMapper.queryMyTravelRecord(uid); + } + + + /** + * 获取红包使用记录 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryRedEnvelope(Integer uid) throws Exception { + return orderTaxiMapper.queryRedEnvelope(uid); + } + + + /** + * 获取用户单发票页面的订单列表 + * + * @param type 开票状态(1=未开票,2=已开票) + * @param startTime 订单开始时间 + * @param endTime 订单结束时间 + * @param startMoney 订单金额范围 + * @param endMoney + * @param uid + * @return + * @throws Exception + */ + @Override + public List<Map<String, Object>> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, + Double endMoney, Integer uid) throws Exception { + startTime = dateUtil.getStartOrEndDate(startTime, "start"); + endTime = dateUtil.getStartOrEndDate(endTime, "end"); + return orderTaxiMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); + } + + + /** + * 获取订单详情 + * + * @param orderId + * @return + */ + @Override + public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception { + Map<String, Object> map = orderTaxiMapper.queryOrderInfo(orderId); + if (null != map && null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2) {//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 + OrderTaxi orderTaxi = this.selectById(orderId); + orderTaxi.setReassignNotice(0); + this.updateById(orderTaxi); + } + if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { + map.put("state", map.get("oldState")); + } + String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId")); + map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); + map.put("orderType", 2); + return map; + } + + + /** + * 获取下单推送完后没有司机下单的提醒 + * + * @return + * @throws Exception + */ + @Override + public EndPushWarpper queryEndPush(Integer uid) throws Exception { + List<OrderTaxi> list = orderTaxiMapper.queryByState(uid, 1); + EndPushWarpper endPushWarpper = new EndPushWarpper(); + if (list.size() > 0) { + OrderTaxi orderTaxi = list.get(0); + if (!orderIds.contains(orderTaxi.getId())) { + endPushWarpper.setOrderId(orderTaxi.getId()); + endPushWarpper.setOrderType(2); + endPushWarpper.setState(1); + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数 + int time = 0; + for (int i = 1; i <= querys.size() + 5; i++) { + int finalI = i; + PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); + time += pushOrder.getPushTime() * 1000; + } + //当前时间减去推单总时间大于下单时间 + if ((System.currentTimeMillis() - time) > orderTaxi.getInsertTime().getTime()) { + endPushWarpper.setState(2); + } + } + + } + return endPushWarpper; + } + + + /** + * 获取服务中的订单数据 + * + * @param uid + * @return + * @throws Exception + */ + @Override + public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { + OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); + OrderTaxi orderTaxi = this.selectById(orderId); + if (null == orderTaxi) { + return orderServerWarpper; + } + //计算预计距离和剩余时间 + String value = null; + if (null != orderTaxi.getDriverId()) { + value = (String) redisTemplate.opsForValue().get("DRIVER" + orderTaxi.getDriverId()); + if (null == value || "".equals(value)) { + System.err.println("司机没有上传位置信息"); + + //调用获取轨迹中的数据 + List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2); + if (list.size() > 0) { + Map<String, Object> map = list.get(list.size() - 1); + value = map.get("lon") + "," + map.get("lat"); + } + } + } + + orderServerWarpper.setOrderId(orderTaxi.getId()); + orderServerWarpper.setOrderType(2); + orderServerWarpper.setState(orderTaxi.getState()); + orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); + orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); + orderServerWarpper.setReassignNotice(orderTaxi.getReassignNotice()); + if (orderTaxi.getState() == 2 || orderTaxi.getState() == 3) {//前往预约地 + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderTaxi.getStartLon() + "," + orderTaxi.getStartLat(), 1); + String d = "0"; + String t = "0"; + if (null == distance) { + System.err.println("查询距离出错了"); + } else { + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage(d); + orderServerWarpper.setReservationTime(t); + orderServerWarpper.setServedMileage("0"); + orderServerWarpper.setServedTime("0"); + orderServerWarpper.setLaveMileage("0"); + orderServerWarpper.setLaveTime("0"); + } + if (orderTaxi.getState() == 5 || orderTaxi.getState() == 6) {//服务中 + // TODO: 2023/11/4 无法修改 + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderTaxi.getEndLon() + "," + orderTaxi.getEndLat(), 1); + String d = "0"; + String t = "0"; + if (null == distance) { + System.err.println("查询距离出错了"); + } else { + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + ""; + } + orderServerWarpper.setReservationMileage("0"); + orderServerWarpper.setReservationTime("0"); + orderServerWarpper.setServedMileage(String.valueOf(orderTaxi.getMileage() / 1000)); + orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderTaxi.getStartServiceTime().getTime()) / 60000).intValue() + ""); + orderServerWarpper.setLaveMileage(d); + orderServerWarpper.setLaveTime(t); + } + + return orderServerWarpper; + } + + + /** + * 评论成功后获取红包金额 + * + * @param orderId + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil<BaseWarpper> queryRedMoney(Integer orderId) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + Integer companyId = orderTaxi.getCompanyId(); + + Map<String, Object> query = userActivityRedenvelopeService.query(companyId, orderTaxi.getTravelTime()); + Double money = 0D; + BaseWarpper baseWarpper = new BaseWarpper(); + if (null != query) { + Integer type = Integer.valueOf(String.valueOf(query.get("type"))); + if (type == 1) {//固定金额 + money = Double.valueOf(String.valueOf(query.get("money"))); + } else {//随机金额 + Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); + Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); + int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); + Random random = new Random(); + int num = random.nextInt(i); + money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + } + + //判断当前红包是否大于剩余可领取总金额 + if (money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0) { + baseWarpper.setAmount(0D); + return ResultUtil.success(baseWarpper); + } + } + baseWarpper.setAmount(money); + + if (money > 0) { + //添加临时红包数据 + UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); + userRedPacketRecord.setMoney(money); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); + userRedPacketRecord.setExpirationTime(calendar.getTime()); + userRedPacketRecord.setInsertTime(new Date()); + userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); + userRedPacketRecord.setState(0); + userRedPacketRecord.setOrderId(orderTaxi.getId()); + userRedPacketRecord.setOrderType(2); + userRedPacketRecord.setUserId(orderTaxi.getUserId()); + userRedPacketRecordService.insert(userRedPacketRecord); + } // appOrderController.moneyPay(orderTaxi.getId(),orderTaxi.getUserId(),money); - return ResultUtil.success(baseWarpper); - } - - /** - * 分享成功后添加红包 - * @param orderId - * @return - * @throws Exception - */ - @Override - public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - UserRedPacketRecord query = userRedPacketRecordService.query_(orderTaxi.getUserId(), orderTaxi.getCompanyId(), 0, 2, null); - if(null != query){ - Double money = query.getMoney(); - Map<String, Object> map = userActivityRedenvelopeService.query(orderTaxi.getCompanyId(), orderTaxi.getTravelTime()); - Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); - if(money.compareTo(laveMoney) > 0){ - return ResultUtil.error("手速太慢了,红包已派发完啦!"); - } - //判断当前红包是否大于剩余可领取总金额 - if(money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0){ - return ResultUtil.error("手速太慢了,红包已派发完啦!"); - } - double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); - - UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); - id.setLaveMoney(v); - id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - userActivityRedenvelopeService.updateById(id); - - query.setState(1); - query.setRedPacketActivityId(id.getId()); - userRedPacketRecordService.updateById(query); - } - return ResultUtil.success(); - } - - - /** - * 获取订单数据 - * @param uid - * @param state - * @return - * @throws Exception - */ - @Override - public List<OrderTaxi> queryOrder(Integer uid, Integer... state) throws Exception { - List<OrderTaxi> list = orderTaxiMapper.queryByState(uid, state); - return list; - } - - - /** - * 订单支付完成后的处理 - * @param id 订单=id - * @param order_id 工行支付单号 - * @param type 1=微信,2=支付宝 - * @throws Exception - */ - @Override - public void payOrderTaxiCallback(Integer id, String order_id, Integer type,Integer paymentId) throws Exception { - OrderTaxi orderTaxi = this.selectById(id); - PaymentRecord query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); - if(null != query && query.getState() == 1){ - //添加交易明细 - transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车", query.getAmount(), 2, 1, 1, 2, query.getOrderId()); - orderTaxi.setState(8); - orderTaxi.setPayType(type); - orderTaxi.setPayMoney(query.getAmount()); - - UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); - SysIntegral query1 = sysIntegralMapper.query(orderTaxi.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 - userInfoService.updateById(userInfo); - - //处理优惠券和红包 - if(null != orderTaxi.getCouponId()){ - UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderTaxi.getCouponId()); - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); - } - if(null != orderTaxi.getUserTaxiCardId()){ - UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderTaxi.getUserTaxiCardId()); - if(userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3){ - JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); - jsonObject.put("time", jsonObject.getInteger("time") - 1); - userTaxiCard.setContent(jsonObject.toJSONString()); - userTaxiCardService.updateById(userTaxiCard); - } - } - if(null != orderTaxi.getRedPacketId()){ - UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderTaxi.getRedPacketId()); - userRedPacketRecord.setState(2); - userRedPacketRecord.setEndTime(new Date()); - userRedPacketRecordService.updateById(userRedPacketRecord); - } - - - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - //添加收入 - Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); - orderTaxi.setSplitAllocation(JSON.toJSONString(map)); - this.updateById(orderTaxi); - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); - } - }).start(); - - //用户付款后,删除限制司机6分钟不能接单的标识 - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - if(ToolUtil.isNotEmpty(vehicle)){ - JSONArray jsonArray = JSON.parseArray(vehicle); - for(int i = 0; i < jsonArray.size(); i++){ - if(jsonArray.getInteger(i).compareTo(orderTaxi.getDriverId()) == 0){ - jsonArray.remove(i); - break; - } - } - redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); - } - - - systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type==2?"支付宝":"云闪付")) + "成功完成出行订单支付,谢谢使用!", orderTaxi.getUserId(), 1); - }else{ - System.err.println("预支付数据异常(orderId = " + id + ")"); - } - } - - - /** - * 取消订单支付后的处理 - * @param id 订单=id - * @param order_id 工行支付单号 - * @param type 1=微信,2=支付宝 - * @throws Exception - */ - @Override - public void payCancelOrderTaxi(Integer id, String order_id, Integer type) throws Exception { - OrderTaxi orderTaxi = this.selectById(id); - PaymentRecord query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); - if(null != query){ - //添加交易明细 - transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车取消订单", query.getAmount(), 2, 1, 1, 2, query.getOrderId()); - orderTaxi.setState(10); - //解除小号绑定 - if(orderTaxi.getBindId() != null){ - chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(), orderTaxi.getTelX(), (System.currentTimeMillis() + 600000)); - } - orderTaxi.setBindId(""); - orderTaxi.setTelX(""); - this.updateById(orderTaxi); - - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); - if (null != query1){ - query1.setState(2); - orderCancelService.updateById(query1); - } - - //添加已收入明细 - incomeService.saveData(1, orderTaxi.getCompanyId(), 3, orderTaxi.getId(), 2, query.getAmount()); - - this.deleteTask(orderTaxi.getId());//删除定时任务 - - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + return ResultUtil.success(baseWarpper); + } + + /** + * 分享成功后添加红包 + * + * @param orderId + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + UserRedPacketRecord query = userRedPacketRecordService.query_(orderTaxi.getUserId(), orderTaxi.getCompanyId(), 0, 2, null); + if (null != query) { + Double money = query.getMoney(); + Map<String, Object> map = userActivityRedenvelopeService.query(orderTaxi.getCompanyId(), orderTaxi.getTravelTime()); + Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); + if (money.compareTo(laveMoney) > 0) { + return ResultUtil.error("手速太慢了,红包已派发完啦!"); + } + //判断当前红包是否大于剩余可领取总金额 + if (money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0) { + return ResultUtil.error("手速太慢了,红包已派发完啦!"); + } + double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); + + UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); + id.setLaveMoney(v); + id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + userActivityRedenvelopeService.updateById(id); + + query.setState(1); + query.setRedPacketActivityId(id.getId()); + userRedPacketRecordService.updateById(query); + } + return ResultUtil.success(); + } + + + /** + * 获取订单数据 + * + * @param uid + * @param state + * @return + * @throws Exception + */ + @Override + public List<OrderTaxi> queryOrder(Integer uid, Integer... state) throws Exception { + List<OrderTaxi> list = orderTaxiMapper.queryByState(uid, state); + return list; + } + + + /** + * 订单支付完成后的处理 + * + * @param id 订单=id + * @param order_id 工行支付单号 + * @param type 1=微信,2=支付宝 + * @throws Exception + */ + @Override + public void payOrderTaxiCallback(Integer id, String order_id, Integer type, Integer paymentId) throws Exception { + OrderTaxi orderTaxi = this.selectById(id); + PaymentRecord query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); + if (null != query && query.getState() == 1) { + //添加交易明细 + transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车", query.getAmount(), 2, 1, 1, 2, query.getOrderId()); + orderTaxi.setState(8); + orderTaxi.setPayType(type); + orderTaxi.setPayMoney(query.getAmount()); + + UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 + userInfoService.updateById(userInfo); + + //处理优惠券和红包 + if (null != orderTaxi.getCouponId()) { + UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderTaxi.getCouponId()); + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != orderTaxi.getUserTaxiCardId()) { + UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderTaxi.getUserTaxiCardId()); + if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { + JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); + jsonObject.put("time", jsonObject.getInteger("time") - 1); + userTaxiCard.setContent(jsonObject.toJSONString()); + userTaxiCardService.updateById(userTaxiCard); + } + } + if (null != orderTaxi.getRedPacketId()) { + UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderTaxi.getRedPacketId()); + userRedPacketRecord.setState(2); + userRedPacketRecord.setEndTime(new Date()); + userRedPacketRecordService.updateById(userRedPacketRecord); + } + + + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + //添加收入 + Map<String, Object> map = incomeService.saveIncome(orderTaxi.getId(), 2, orderTaxi.getOrderMoney()); + orderTaxi.setSplitAllocation(JSON.toJSONString(map)); + this.updateById(orderTaxi); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); + } + }).start(); + + //用户付款后,删除限制司机6分钟不能接单的标识 + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + if (ToolUtil.isNotEmpty(vehicle)) { + JSONArray jsonArray = JSON.parseArray(vehicle); + for (int i = 0; i < jsonArray.size(); i++) { + if (jsonArray.getInteger(i).compareTo(orderTaxi.getDriverId()) == 0) { + jsonArray.remove(i); + break; + } + } + redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); + } + + + systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功完成出行订单支付,谢谢使用!", orderTaxi.getUserId(), 1); + } else { + System.err.println("预支付数据异常(orderId = " + id + ")"); + } + } + + + /** + * 取消订单支付后的处理 + * + * @param id 订单=id + * @param order_id 工行支付单号 + * @param type 1=微信,2=支付宝 + * @throws Exception + */ + @Override + public void payCancelOrderTaxi(Integer id, String order_id, Integer type) throws Exception { + OrderTaxi orderTaxi = this.selectById(id); + PaymentRecord query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); + if (null != query) { + //添加交易明细 + transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车取消订单", query.getAmount(), 2, 1, 1, 2, query.getOrderId()); + orderTaxi.setState(10); + //解除小号绑定 + if (orderTaxi.getBindId() != null) { + chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(), orderTaxi.getTelX(), (System.currentTimeMillis() + 600000)); + } + orderTaxi.setBindId(""); + orderTaxi.setTelX(""); + this.updateById(orderTaxi); + + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); + if (null != query1) { + query1.setState(2); + orderCancelService.updateById(query1); + } + + //添加已收入明细 + incomeService.saveData(1, orderTaxi.getCompanyId(), 3, orderTaxi.getId(), 2, query.getAmount()); + + this.deleteTask(orderTaxi.getId());//删除定时任务 + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 // new Thread(new Runnable() { // @Override // public void run() { // pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState(), 0); // } // }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信": (type==2?"支付宝":"云闪付")) + "成功支付取消订单费用,谢谢使用!", orderTaxi.getUserId(), 1); - }else{ - System.err.println("预支付数据异常(orderId = " + id + ")"); - } - } - - - /** - * 推送订单给司机抢单 - * @param orderTaxi - * @throws Exception - */ - @Override - public void pushOrder(OrderTaxi orderTaxi, Integer type) throws Exception{ - new Thread(new Runnable() { - @Override - public void run() { - try { - orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单 - String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); - List<Integer> integers = new ArrayList<>(); - if (ToolUtil.isNotEmpty(vehicle)) { - integers = JSON.parseArray(vehicle).toJavaList(Integer.class); - } - Company query = companyCityService.query(String.valueOf(orderTaxi.getStartLon()), String.valueOf(orderTaxi.getStartLat()));//获取起点所属分公司 - List<PushOrder> querys = pushOrderService.querys(null, 2, query.getId());//获取需要推送的次数 - for (int i = 1; i <= querys.size()+5; i++) { - PushOrder pushOrder = pushOrderService.querys(i, 2, query.getId()).get(0); - System.out.println("pushOrder:" + pushOrder); - //获取空闲司机 - List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 - if (list.size() > 0) { - double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 - int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) - lastIndex = lastIndex == 0 ? list.size() : lastIndex; - list = list.subList(0, lastIndex);//获取空闲司机中占比数据 - for (Driver driver : list) {//开始进行推送 - //查询是否在限制推单范围内 - boolean bo = false; - for (Integer integer : integers) { - if (integer.compareTo(driver.getId()) == 0) { - bo = true; - break; - } - } - if (bo) { - continue; - } - pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); - } - } - Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 - OrderTaxi orderTaxi1 = OrderTaxiServiceImpl.this.selectById(orderTaxi.getId()); - Integer state = orderTaxi1.getState(); - if (state != 1) { - break; - } - if (i == querys.size()+5 && state == 1) { - pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2); - orderIds.remove(orderTaxi.getId()); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - }).start(); - } - - - - @Override - public synchronized String getOrderNum() throws Exception{ - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - return "TA" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5); - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW) - public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception { - UserInfo userInfo = userInfoService.selectById(uid); - OrderTaxi orderTaxi = this.selectById(orderId); - ResultUtil resultUtil = ResultUtil.success(); - if(payType == 1){//微信支付 - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(3, uid, 1, orderId, 2, 1, money, "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); - paymentRecordService.saveData(1, uid, 1, orderId, 2, 2, money, "", 1);//添加预支付数据 - } - if(payType == 3) {//余额支付 - if (userInfo.getBalance() == null || userInfo.getBalance() < money) { - return ResultUtil.error("余额不足,无法完成支付"); - } + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功支付取消订单费用,谢谢使用!", orderTaxi.getUserId(), 1); + } else { + System.err.println("预支付数据异常(orderId = " + id + ")"); + } + } + + + /** + * 推送订单给司机抢单 + * + * @param orderTaxi + * @throws Exception + */ + @Override + public void pushOrder(OrderTaxi orderTaxi, Integer type) throws Exception { + new Thread(new Runnable() { + @Override + public void run() { + try { + orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单 + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); + List<Integer> integers = new ArrayList<>(); + if (ToolUtil.isNotEmpty(vehicle)) { + integers = JSON.parseArray(vehicle).toJavaList(Integer.class); + } + + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数 + //整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后任无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车 + for (int i = 1; i <= querys.size() + 5; i++) { + int finalI = i; + PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); + System.out.println("pushOrder:" + pushOrder); + //获取空闲司机 + List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 + if (list.size() > 0) { + double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 + int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) + lastIndex = lastIndex == 0 ? list.size() : lastIndex; + list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + for (Driver driver : list) {//开始进行推送 + //查询是否在限制推单范围内 + boolean bo = false; + for (Integer integer : integers) { + if (integer.compareTo(driver.getId()) == 0) { + bo = true; + break; + } + } + if (bo) { + continue; + } + pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime()); + } + } + Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 + OrderTaxi orderTaxi1 = OrderTaxiServiceImpl.this.selectById(orderTaxi.getId()); + Integer state = orderTaxi1.getState(); + if (state != 1) { + break; + } + if (i == querys.size() + 5 && state == 1) { + pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2); + orderIds.remove(orderTaxi.getId()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + + @Override + public synchronized String getOrderNum() throws Exception { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + return "TA" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public ResultUtil payThankYouFee(Integer uid, Integer orderId, Double money, Integer payType, Integer type) throws Exception { + UserInfo userInfo = userInfoService.selectById(uid); + OrderTaxi orderTaxi = this.selectById(orderId); + ResultUtil resultUtil = ResultUtil.success(); + if (payType == 1) {//微信支付 + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(3, uid, 1, orderId, 2, 1, money, "", 1);//添加预支付数据 + } + if (payType == 2) {//支付宝支付 + resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_2_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); + paymentRecordService.saveData(1, uid, 1, orderId, 2, 2, money, "", 1);//添加预支付数据 + } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < money) { + return ResultUtil.error("余额不足,无法完成支付"); + } // resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),money); // if(resultUtil.getCode()==500){ // return ResultUtil.error("电子余额不足,无法完成支付"); // } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - - SysIntegral query1 = sysIntegralMapper.query(orderTaxi.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(uid, "出租车-感谢费", money, 2, 1, 1, 2, orderId); - userInfoService.updateById(userInfo); - - orderTaxi.setThankYouFee(money); - this.updateById(orderTaxi); - - //添加已收入明细 - incomeService.saveData(2, orderTaxi.getDriverId(), 6, orderTaxi.getId(), 2, money); - Driver driver = driverService.selectById(orderTaxi.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1); - - } - if(payType==4){ - Double payMoney = orderTaxi.getThankYouFee(); - Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 2, 4, money, "", 1); - resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4,orderId,12,integer); - } - return resultUtil; - } - - @Override - public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception { - OrderTaxi orderTaxi = this.selectById(orderId); - UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); - PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 2, payType, 1); - query.setState(2); - query.setCode(order_id); - paymentRecordService.updateById(query); - - SysIntegral query1 = sysIntegralMapper.query(orderTaxi.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 - - //添加交易明细 - transactionDetailsService.saveData(userInfo.getId(), "出租车-感谢费", query.getAmount(), 2, 1, 1, 2, orderId); - userInfoService.updateById(userInfo); - - orderTaxi.setThankYouFee(query.getAmount()); - this.updateById(orderTaxi); - - //添加已收入明细 - incomeService.saveData(2, orderTaxi.getDriverId(), 6, orderTaxi.getId(), 2, query.getAmount()); - Driver driver = driverService.selectById(orderTaxi.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType==2?"支付宝":"云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1); - } - - @Override - public List<UnPayOrderVO> getUnpayTaxiOrders(Integer uid) { - EntityWrapper<OrderTaxi> wrapper = new EntityWrapper<>(); - wrapper.eq("userId", uid); - wrapper.eq("state", 7); - //查出未支付订单 - List<OrderTaxi> orderTaxiList = this.selectList(wrapper); - List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>(); - for (OrderTaxi orderTaxi:orderTaxiList) { - UnPayOrderVO unPayOrderVO = new UnPayOrderVO(); - //添加司机信息 - DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper(); - Driver driver = driverService.selectById(orderTaxi.getDriverId()); - BeanUtils.copyProperties(driver, driverInfoWarpper); - unPayOrderVO.setDriverInfoWarpper(driverInfoWarpper); - //其余信息 - BeanUtils.copyProperties(orderTaxi, unPayOrderVO); - unPayOrderVOList.add(unPayOrderVO); - - } - - return unPayOrderVOList; - } + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (money.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "出租车-感谢费", money, 2, 1, 1, 2, orderId); + userInfoService.updateById(userInfo); + + orderTaxi.setThankYouFee(money); + this.updateById(orderTaxi); + + //添加已收入明细 + incomeService.saveData(2, orderTaxi.getDriverId(), 6, orderTaxi.getId(), 2, money); + Driver driver = driverService.selectById(orderTaxi.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成感谢费支付,谢谢使用!", uid, 1); + + } + if (payType == 4) { + Double payMoney = orderTaxi.getThankYouFee(); + Integer integer = paymentRecordService.saveData(3, uid, 1, orderId, 2, 4, money, "", 1); + resultUtil = appOrderController.placeAnOrder(new BigDecimal(money), 4, orderId, 12, integer); + } + return resultUtil; + } + + @Override + public void payThankYouFeeCallback(Integer orderId, String order_id, Integer payType) throws Exception { + OrderTaxi orderTaxi = this.selectById(orderId); + UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); + PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 2, payType, 1); + query.setState(2); + query.setCode(order_id); + paymentRecordService.updateById(query); + + OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); + SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); + userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(userInfo.getId(), "出租车-感谢费", query.getAmount(), 2, 1, 1, 2, orderId); + userInfoService.updateById(userInfo); + + orderTaxi.setThankYouFee(query.getAmount()); + this.updateById(orderTaxi); + + //添加已收入明细 + incomeService.saveData(2, orderTaxi.getDriverId(), 6, orderTaxi.getId(), 2, query.getAmount()); + Driver driver = driverService.selectById(orderTaxi.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(new BigDecimal(query.getAmount())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + systemNoticeService.addSystemNotice(1, "您已使用" + (payType == 1 ? "微信" : (payType == 2 ? "支付宝" : "云闪付")) + "成功完成感谢费支付,谢谢使用!", userInfo.getId(), 1); + } + + @Override + public List<UnPayOrderVO> getUnpayTaxiOrders(Integer uid) { + EntityWrapper<OrderTaxi> wrapper = new EntityWrapper<>(); + wrapper.eq("userId", uid); + wrapper.eq("state", 7); + //查出未支付订单 + List<OrderTaxi> orderTaxiList = this.selectList(wrapper); + List<UnPayOrderVO> unPayOrderVOList = new ArrayList<>(); + for (OrderTaxi orderTaxi : orderTaxiList) { + UnPayOrderVO unPayOrderVO = new UnPayOrderVO(); + //添加司机信息 + DriverInfoWarpper driverInfoWarpper = new DriverInfoWarpper(); + Driver driver = driverService.selectById(orderTaxi.getDriverId()); + BeanUtils.copyProperties(driver, driverInfoWarpper); + unPayOrderVO.setDriverInfoWarpper(driverInfoWarpper); + //其余信息 + BeanUtils.copyProperties(orderTaxi, unPayOrderVO); + unPayOrderVOList.add(unPayOrderVO); + + } + + return unPayOrderVOList; + } } -- Gitblit v1.7.1