fllmoyu 4 år sedan
förälder
incheckning
2e347835c6

+ 4 - 2
common/src/main/java/com/jpsoft/bus/modules/base/dao/OrderInfoDAO.java

@@ -29,7 +29,9 @@ public interface OrderInfoDAO {
 
     OrderInfo findByPassengerIdMergeOrderId(String passengerId, String mergeOrderId);
 
-    BigDecimal paySum(List<VehicleInfo> vehicleInfoList, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag);
+    BigDecimal paySum(List<VehicleInfo> vehicleInfoList, String companyId,String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag);
 
-    Integer payNum(List<VehicleInfo> vehicleInfoList, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag);
+    Integer payNum(List<VehicleInfo> vehicleInfoList,String companyId, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag);
+
+	List<OrderInfo> findBySearchParams(Map<String, Object> searchParams);
 }

+ 2 - 0
common/src/main/java/com/jpsoft/bus/modules/base/entity/MergeOrderInfo.java

@@ -23,6 +23,8 @@ public class MergeOrderInfo {
     private String openId;
     @ApiModelProperty(value = "班次id")
     private String vehicleShiftId;
+    @ApiModelProperty(value = "公司id")
+    private String companyId;
     @ApiModelProperty(value = "支付状态(10:未支付,15:部分支付,20:支付完成,30:关闭,40:全额退款,45:部分退款)")
     private Integer payStatus;
     @ApiModelProperty(value = "支付方式(wechat:微信,alipay:支付宝,cash:现金,ticket:车票)")

+ 4 - 2
common/src/main/java/com/jpsoft/bus/modules/base/service/OrderInfoService.java

@@ -37,7 +37,9 @@ public interface OrderInfoService {
 	 */
 	Boolean refund(String orderId,String userId) throws Exception;
 
-    BigDecimal paySum(List<VehicleInfo> vehicleInfoList, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag);
+    BigDecimal paySum(List<VehicleInfo> vehicleInfoList,String companyId, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag);
 
-	Integer payNum(List<VehicleInfo> vehicleInfoList, String payName, Date beginOfDay, Date endOfDay,Boolean settlementFlag);
+	Integer payNum(List<VehicleInfo> vehicleInfoList,String companyId, String payName, Date beginOfDay, Date endOfDay,Boolean settlementFlag);
+
+	List<OrderInfo> findBySearchParams(Map<String, Object> searchParams,List<Sort> sortList);
 }

+ 9 - 4
common/src/main/java/com/jpsoft/bus/modules/base/service/impl/OrderInfoServiceImpl.java

@@ -153,12 +153,17 @@ public class OrderInfoServiceImpl implements OrderInfoService {
 	}
 
 	@Override
-	public BigDecimal paySum(List<VehicleInfo> vehicleInfoList, String payName, Date beginOfDay, Date endOfDay,Boolean settlementFlag) {
-		return orderInfoDAO.paySum(vehicleInfoList,payName,beginOfDay,endOfDay,settlementFlag);
+	public BigDecimal paySum(List<VehicleInfo> vehicleInfoList,String companyId, String payName, Date beginOfDay, Date endOfDay,Boolean settlementFlag) {
+		return orderInfoDAO.paySum(vehicleInfoList,companyId,payName,beginOfDay,endOfDay,settlementFlag);
 	}
 
 	@Override
-	public Integer payNum(List<VehicleInfo> vehicleInfoList, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag) {
-		return orderInfoDAO.payNum(vehicleInfoList,payName,beginOfDay,endOfDay,settlementFlag);
+	public Integer payNum(List<VehicleInfo> vehicleInfoList,String companyId, String payName, Date beginOfDay, Date endOfDay, Boolean settlementFlag) {
+		return orderInfoDAO.payNum(vehicleInfoList,companyId,payName,beginOfDay,endOfDay,settlementFlag);
+	}
+
+	@Override
+	public List<OrderInfo> findBySearchParams(Map<String, Object> searchParams,List<Sort> sortList) {
+		return orderInfoDAO.search(searchParams,sortList);
 	}
 }

+ 23 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/service/impl/PassengerInfoServiceImpl.java

@@ -42,6 +42,12 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
     @Autowired
     private MergeOrderInfoService mergeOrderInfoService;
 
+    @Autowired
+    private VehicleInfoService vehicleInfoService;
+
+    @Autowired
+    private ShiftInfoService shiftInfoService;
+
     @Autowired
     private StationInfoService stationInfoService;
 
@@ -219,7 +225,12 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
             MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
             mergeOrderInfo.setId(UUID.randomUUID().toString());
             mergeOrderInfo.setVehicleShiftId(passengerInfo.getVehicleShiftId());
+            //当前车辆所属公司
+            ShiftInfo shiftInfo = shiftInfoService.get(passengerInfo.getVehicleShiftId());
+            VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+
             mergeOrderInfo.setPayStatus(20);
+            mergeOrderInfo.setCompanyId(vehicleInfo.getCompanyId());
             mergeOrderInfo.setOutOrderNo(wxJpsoftConfig.getUrlKey() + com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
             mergeOrderInfo.setPayName(payName);
             mergeOrderInfo.setPaymentId(paymentId);
@@ -262,6 +273,12 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
             mergeOrderInfo.setId(UUID.randomUUID().toString());
             mergeOrderInfo.setVehicleShiftId(passengerInfo.getVehicleShiftId());
             mergeOrderInfo.setPayStatus(10);
+
+            //当前车辆所属公司
+            ShiftInfo shiftInfo = shiftInfoService.get(passengerInfo.getVehicleShiftId());
+            VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+
+            mergeOrderInfo.setCompanyId(vehicleInfo.getCompanyId());
             mergeOrderInfo.setOutOrderNo(wxJpsoftConfig.getUrlKey() + com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());
             mergeOrderInfo.setPaymentId(paymentId);
             mergeOrderInfo.setCreateTime(new Date());
@@ -379,6 +396,12 @@ public class PassengerInfoServiceImpl implements PassengerInfoService {
             MergeOrderInfo mergeOrderInfo = new MergeOrderInfo();
             mergeOrderInfo.setId(UUID.randomUUID().toString());
             mergeOrderInfo.setVehicleShiftId(shiftInfo.getId());
+
+            //当前车辆所属公司
+           // ShiftInfo shiftInfo = shiftInfoService.get(passengerInfo.getVehicleShiftId());
+          //  VehicleInfo vehicleInfo = vehicleInfoService.get(shiftInfo.getVehicleId());
+
+            mergeOrderInfo.setCompanyId(vehicleInfo.getCompanyId());
             mergeOrderInfo.setOpenId(openId);
             mergeOrderInfo.setPayStatus(10);
             mergeOrderInfo.setOutOrderNo(wxJpsoftConfig.getUrlKey() + com.jpsoft.bus.modules.common.utils.StringUtils.getOutTradeNo());

+ 6 - 1
common/src/main/resources/mapper/base/MergeOrderInfo.xml

@@ -7,6 +7,7 @@
 		<id property="id" column="id_" />
 			<result property="openId" column="open_id" />
 			<result property="vehicleShiftId" column="vehicle_shift_id"/>
+			<result property="companyId" column="company_id"/>
 			<result property="payStatus" column="pay_status" />
 			<result property="payName" column="pay_name" />
 			<result property="outOrderNo" column="out_order_no" />
@@ -26,12 +27,13 @@
 	-->
 	<![CDATA[
 		insert into base_merge_order_info
-	    (id_,open_id,vehicle_shift_id,pay_status,pay_name,out_order_no,transaction_id,payment_id,create_by,create_time,update_by,update_time,del_flag)
+	    (id_,open_id,vehicle_shift_id,company_id,pay_status,pay_name,out_order_no,transaction_id,payment_id,create_by,create_time,update_by,update_time,del_flag)
 		values
 		(
 #{id,jdbcType=VARCHAR}
 ,#{openId,jdbcType=VARCHAR}
 ,#{vehicleShiftId,jdbcType=VARCHAR}
+,#{companyId,jdbcType=VARCHAR}
 ,#{payStatus,jdbcType= NUMERIC }
 ,#{payName,jdbcType=VARCHAR}
 ,#{outOrderNo,jdbcType=VARCHAR}
@@ -56,6 +58,9 @@
 		</if>
 			<if test="vehicleShiftId!=null">
 				vehicle_shift_id=#{vehicleShiftId,jdbcType=VARCHAR},
+			</if>
+			<if test="companyId != null!=null">
+				company_id=#{companyId,jdbcType=VARCHAR},
 			</if>
 				<if test="payStatus!=null">
 		pay_status=#{payStatus,jdbcType= NUMERIC },

+ 24 - 1
common/src/main/resources/mapper/base/OrderInfo.xml

@@ -140,7 +140,7 @@
 				ticket_down_station_id = #{ticketDownStationId,jdbcType=VARCHAR},
 			</if>
 			<if test="settlementFlag != null">
-				settlement_flag = #{settlementFlag,jdbcType=NUMERIC}}
+				settlement_flag = #{settlementFlag,jdbcType=NUMERIC}
 			</if>
 		</set>
 	where id_=#{id}
@@ -173,6 +173,14 @@
 			<if test="searchParams.companyId != null">
 				and g.id_ = #{searchParams.companyId}
 			</if>
+
+			<if test="searchParams.orderCompanyId != null">
+				and h.company_id = #{searchParams.orderCompanyId}
+			</if>
+			<if test="searchParams.vehicleId != null">
+				and c.vehicle_id = #{searchParams.vehicleId}
+			</if>
+
 			<if test="searchParams.licensePlateNumber != null">
 				and e.license_plate_number like #{searchParams.licensePlateNumber}
 			</if>
@@ -191,6 +199,10 @@
 			<if test="searchParams.shiftId != null">
 				and h.vehicle_shift_id = #{searchParams.shiftId}
 			</if>
+			<if test="searchParams.settlementFlag != null">
+				and a.settlement_flag = #{searchParams.settlementFlag}
+			</if>
+
 			<if test="searchParams.createBeginTime != null">
 				<![CDATA[
                   and a.create_time >= #{searchParams.createBeginTime}
@@ -291,6 +303,9 @@
 			<if test="settlementFlag != null">
 			and	a.settlement_flag = #{settlementFlag}
 			</if>
+			<if test="companyId != null">
+				and b.company_id = #{companyId}
+			</if>
 		</where>
 	</select>
 
@@ -324,6 +339,14 @@
 			<if test="settlementFlag != null">
 				and	a.settlement_flag = #{settlementFlag}
 			</if>
+			<if test="companyId != null">
+				and b.company_id = #{companyId}
+			</if>
 		</where>
 	</select>
+
+
+	<select id="findBySearchParams" resultMap="OrderInfoMap">
+
+	</select>
 </mapper>

+ 26 - 22
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/MerchantApiController.java

@@ -254,27 +254,27 @@ public class MerchantApiController {
                 totalRevenue = capitalInfo.getTotalRevenue();
             }
 
-            if (vehicleInfoList.size()>0){
+      //      if (vehicleInfoList.size()>0){
                 //今日收益
-                BigDecimal todaySum = orderInfoService.paySum(vehicleInfoList,null, DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
+                BigDecimal todaySum = orderInfoService.paySum(null,companyInfo.getId(),null, DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
                 if (todaySum != null){
                     todayRevenue = todaySum;
                 }
                 //昨日收益
-                BigDecimal yesterdaySum = orderInfoService.paySum(vehicleInfoList,null,DateUtil.beginOfDay(DateUtil.offsetDay(new Date(),-1)),DateUtil.endOfDay(DateUtil.offsetDay(new Date(),-1)),null);
+                BigDecimal yesterdaySum = orderInfoService.paySum(null,companyInfo.getId(),null,DateUtil.beginOfDay(DateUtil.offsetDay(new Date(),-1)),DateUtil.endOfDay(DateUtil.offsetDay(new Date(),-1)),null);
                 if (yesterdaySum != null){
                     yesterdayRevenue = yesterdaySum;
                 }
 
                 //总收益
-                BigDecimal totalSum = orderInfoService.paySum(vehicleInfoList,null,null,new cn.hutool.core.date.DateTime(),null);
+                BigDecimal totalSum = orderInfoService.paySum(null,companyInfo.getId(),null,null,new cn.hutool.core.date.DateTime(),null);
 
                 if (totalSum != null){
                     totalRevenue = totalSum;
                 }
 
 
-            }
+      //      }
 
             Map<String,Object> map = new HashMap<>();
             map.put("todayRevenue",todayRevenue);
@@ -322,37 +322,37 @@ public class MerchantApiController {
 
 
 
-            if (vehicleInfoList.size()>0){
+          //  if (vehicleInfoList.size()>0){
                 //微信
-                BigDecimal wechatSum = orderInfoService.paySum(vehicleInfoList,"wechat", DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
+                BigDecimal wechatSum = orderInfoService.paySum(null,companyInfo.getId(),"wechat", DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
                 if (wechatSum != null){
                     wechatRevenue = wechatSum;
                 }
                 //支付宝
-                BigDecimal alipaySum = orderInfoService.paySum(vehicleInfoList,"alipay",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
+                BigDecimal alipaySum = orderInfoService.paySum(null,companyInfo.getId(),"alipay",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
                 if (alipaySum != null){
                     alipayRevenue = alipaySum;
                 }
 
                 //现金
-                BigDecimal cashSum = orderInfoService.paySum(vehicleInfoList,"cash",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
+                BigDecimal cashSum = orderInfoService.paySum(null,companyInfo.getId(),"cash",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
                 if (cashSum != null){
                     cashRevenue = cashSum;
                 }
 
                 //车票
-                BigDecimal ticketSum = orderInfoService.paySum(vehicleInfoList,"ticket",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
+                BigDecimal ticketSum = orderInfoService.paySum(null,companyInfo.getId(),"ticket",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
                 if (ticketSum != null){
                     ticketRevenue = ticketSum;
                 }
 
-                Integer ticketNum = orderInfoService.payNum(vehicleInfoList,null,DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
+                Integer ticketNum = orderInfoService.payNum(null,companyInfo.getId(),null,DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),null);
                 if (ticketNum != null){
                     num = ticketNum;
                 }
 
 
-            }
+      //      }
 
             Map<String,Object> map = new HashMap<>();
             map.put("onlineRevenue",wechatRevenue.add(alipayRevenue));
@@ -474,10 +474,10 @@ public class MerchantApiController {
                     ProfitListDTO profitListDTO1 = new ProfitListDTO();
                     Date baseDate = DateUtil.offsetDay(startDate,-m);
                     Date baseStartDate = DateUtil.beginOfDay(baseDate);
-                    BigDecimal baseSum = BigDecimal.ZERO;
-                    if (vehicleInfoList.size()>0){
-                       baseSum  = orderInfoService.paySum(vehicleInfoList,payName,baseStartDate,baseDate,null);
-                    }
+                 //   BigDecimal baseSum = BigDecimal.ZERO;
+                  //  if (vehicleInfoList.size()>0){
+                    BigDecimal baseSum  = orderInfoService.paySum(null,companyInfo.getId(),payName,baseStartDate,baseDate,null);
+                //    }
 
                     profitListDTO1.setDateDesc(DateUtil.format(baseDate,"yyyy-MM-dd"));
                     profitListDTO1.setRevenue(baseSum == null?BigDecimal.ZERO:baseSum);
@@ -550,7 +550,11 @@ public class MerchantApiController {
 
             searchParams.put("payBeginTime",startTime);
             searchParams.put("payEndTime",endTime);
-            searchParams.put("vehicleInfoList",vehicleInfoList);
+            if (StringUtils.isNotBlank(vehicleId)){
+                searchParams.put("vehicleId",vehicleId);
+            }
+            searchParams.put("orderCompanyId",companyInfo.getId());
+       //     searchParams.put("vehicleInfoList",vehicleInfoList);
 
             List<Sort> sortList = new ArrayList<>();
             sortList.add(new Sort("a.pay_time","desc"));
@@ -708,17 +712,17 @@ public class MerchantApiController {
             }
             CompanyInfo companyInfo = companyInfoService.get(accountInfo.getCompanyId());
             List<VehicleInfo> vehicleInfoList = vehicleInfoService.findByCompanyId(companyInfo.getId());
-            if (vehicleInfoList.size()>0){
-                BigDecimal wechatTodaySum = orderInfoService.paySum(vehicleInfoList,"wechat",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),false);
-                BigDecimal alipayTodaySum = orderInfoService.paySum(vehicleInfoList,"alipay",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),false);
+         //   if (vehicleInfoList.size()>0){
+                BigDecimal wechatTodaySum = orderInfoService.paySum(null,companyInfo.getId(),"wechat",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),false);
+                BigDecimal alipayTodaySum = orderInfoService.paySum(null,companyInfo.getId(),"alipay",DateUtil.beginOfDay(new Date()),DateUtil.endOfDay(new Date()),false);
                 todayRevenue = (wechatTodaySum == null?BigDecimal.ZERO:wechatTodaySum).add(alipayTodaySum==null?BigDecimal.ZERO:alipayTodaySum);
 
-            }
+        //    }
 
             Map<String,Object> map = new HashMap<>();
             map.put("withdrawalAmount",withdrawalAmount);
             map.put("todayRevenue",todayRevenue);
-            map.put("onlineTotalRevenue",onlineTotalRevenue);
+            map.put("onlineTotalRevenue",onlineTotalRevenue.add(todayRevenue));
             map.put("alreadyWithdrawalAmount",alreadyWithdrawalAmount);
             map.put("account",accountInfo);
 

+ 88 - 0
web/src/main/java/com/jpsoft/bus/scheduled/SettlementTask.java

@@ -0,0 +1,88 @@
+package com.jpsoft.bus.scheduled;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.db.sql.Order;
+import com.jpsoft.bus.modules.base.entity.OrderInfo;
+import com.jpsoft.bus.modules.base.service.OrderInfoService;
+import com.jpsoft.bus.modules.common.dto.Sort;
+import com.jpsoft.bus.modules.merchant.entity.AccountInfo;
+import com.jpsoft.bus.modules.merchant.entity.CapitalInfo;
+import com.jpsoft.bus.modules.merchant.service.AccountInfoService;
+import com.jpsoft.bus.modules.merchant.service.CapitalInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2021-5-08 10:28
+ */
+@Component
+@Slf4j
+@Transactional
+public class SettlementTask {
+
+    @Autowired
+    private CapitalInfoService capitalInfoService;
+
+    @Autowired
+    private OrderInfoService orderInfoService;
+
+    @Autowired
+    private AccountInfoService accountInfoService;
+
+
+    //每天凌晨12点01分开始
+    @Scheduled(cron = "0 01 0 ? * *")
+    public  void run() {
+
+        log.warn("每日资金结算定时任务开始");
+
+        Date yesterdayDate = DateUtil.offsetDay(new Date(),-1);
+    //    Date startDate = DateUtil.beginOfDay(yesterdayDate);
+        Date endDate = DateUtil.endOfDay(yesterdayDate);
+
+        List<CapitalInfo> capitalInfoList = capitalInfoService.list();
+        if (capitalInfoList.size()>0){
+            for (CapitalInfo capitalInfo : capitalInfoList){
+
+                //线上收益
+                BigDecimal onlineRevenue = BigDecimal.ZERO;
+                //线下收益
+                BigDecimal downRevenue = BigDecimal.ZERO;
+                AccountInfo accountInfo = accountInfoService.get(capitalInfo.getMerchantId());
+                Map<String,Object> searchParams = new HashMap<>();
+                searchParams.put("orderCompanyId",accountInfo.getCompanyId());
+                searchParams.put("payStatus",20);
+                searchParams.put("settlementFlag",false);
+                searchParams.put("payEndTime",endDate);
+                List<Sort> sortList = new ArrayList<>();
+                sortList.add(new Sort("a.pay_time","desc"));
+                List<OrderInfo> orderInfoList = orderInfoService.findBySearchParams(searchParams,sortList);
+                if (orderInfoList.size()>0){
+                    for (OrderInfo orderInfo : orderInfoList){
+                        if ("wechat".equals(orderInfo.getPayName()) || "alipay".equals(orderInfo.getPayName())){
+                            onlineRevenue = onlineRevenue.add(orderInfo.getPayFee());
+                        }
+                        if ("cash".equals(orderInfo.getPayName()) || "ticket".equals(orderInfo.getPayName())){
+                           downRevenue = downRevenue.add(orderInfo.getPayFee());
+                        }
+                        orderInfo.setSettlementFlag(true);
+                        orderInfoService.update(orderInfo);
+                    }
+                }
+
+                capitalInfo.setWithdrawalAmount(capitalInfo.getWithdrawalAmount().add(onlineRevenue));
+                capitalInfo.setTotalRevenue(capitalInfo.getTotalRevenue().add(onlineRevenue).add(downRevenue));
+                capitalInfo.setOnlineTotalRevenue(capitalInfo.getOnlineTotalRevenue().add(onlineRevenue));
+                capitalInfoService.update(capitalInfo);
+            }
+        }
+        log.warn("每日资金结算定时任务结束");
+    }
+}