Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

zhengqiang 4 vuotta sitten
vanhempi
commit
2462987382

+ 18 - 0
common/src/main/java/com/jpsoft/bus/modules/base/dao/OrderLogDAO.java

@@ -0,0 +1,18 @@
+package com.jpsoft.bus.modules.base.dao;
+
+import java.util.List;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.bus.modules.base.entity.OrderLog;
+import java.util.Map;
+import com.jpsoft.bus.modules.common.dto.Sort;
+
+@Repository
+public interface OrderLogDAO {
+	int insert(OrderLog entity);
+	int update(OrderLog entity);
+	int exist(String id);
+	OrderLog get(String id);
+	int delete(String id);
+	List<OrderLog> list();
+	List<OrderLog> search(Map<String, Object> searchParams, List<Sort> sortList);
+}

+ 26 - 0
common/src/main/java/com/jpsoft/bus/modules/base/entity/OrderLog.java

@@ -0,0 +1,26 @@
+package com.jpsoft.bus.modules.base.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+  描述:base_order_log的实体类
+ */
+@Data
+public class OrderLog {
+	private String id;
+	private String orderId;
+	private String content;
+	private String createBy;
+	private Date createTime;
+	private String updateBy;
+	private Date updateTime;
+	private Boolean delFlag;
+
+}

+ 9 - 0
common/src/main/java/com/jpsoft/bus/modules/base/service/OrderInfoService.java

@@ -22,4 +22,13 @@ public interface OrderInfoService {
 	List<OrderInfo> findByMergeOrderId(String mergeOrderId);
 
     OrderInfo findByPassengerIdMergeOrderId(String id, String mergeOrderId);
+
+
+	/**
+	 * 订单在线退款
+	 * @param orderId
+	 * @return
+	 * @throws Exception
+	 */
+	Boolean refund(String orderId,String userId) throws Exception;
 }

+ 17 - 0
common/src/main/java/com/jpsoft/bus/modules/base/service/OrderLogService.java

@@ -0,0 +1,17 @@
+package com.jpsoft.bus.modules.base.service;
+
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.bus.modules.base.entity.OrderLog;
+import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.common.dto.Sort;
+
+public interface OrderLogService {
+	OrderLog get(String id);
+	boolean exist(String id);
+	int insert(OrderLog model);
+	int update(OrderLog model);
+	int delete(String id);
+	List<OrderLog> list();
+	Page<OrderLog> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, List<Sort> sortList);
+}

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

@@ -1,9 +1,19 @@
 package com.jpsoft.bus.modules.base.service.impl;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Resource;
+
+import com.jpsoft.bus.modules.base.dao.OrderLogDAO;
+import com.jpsoft.bus.modules.base.entity.OrderLog;
+import com.jpsoft.bus.modules.base.service.OrderLogService;
+import com.jpsoft.bus.modules.bus.entity.PassengerInfo;
+import com.jpsoft.bus.modules.bus.service.PassengerInfoService;
+import com.jpsoft.bus.modules.pay.service.AlipayService;
+import com.jpsoft.bus.modules.pay.service.WechatService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import com.jpsoft.bus.modules.base.dao.OrderInfoDAO;
@@ -19,6 +29,18 @@ public class OrderInfoServiceImpl implements OrderInfoService {
 	@Resource(name="orderInfoDAO")
 	private OrderInfoDAO orderInfoDAO;
 
+	@Resource(name="orderLogDAO")
+	private OrderLogDAO orderLogDAO;
+
+	@Autowired
+	private AlipayService alipayService;
+
+	@Autowired
+	private PassengerInfoService passengerInfoService;
+
+	@Autowired
+	private WechatService wechatService;
+
 	@Override
 	public OrderInfo get(String id) {
 		// TODO Auto-generated method stub
@@ -87,4 +109,43 @@ public class OrderInfoServiceImpl implements OrderInfoService {
 	public OrderInfo findByPassengerIdMergeOrderId(String id, String mergeOrderId) {
 		return orderInfoDAO.findByPassengerIdMergeOrderId(id,mergeOrderId);
 	}
+
+	@Override
+	public Boolean refund(String orderId,String userId) throws Exception {
+
+		OrderInfo orderInfo = get(orderId);
+		if (orderInfo == null){
+			throw new Exception("订单不存在");
+		}
+		if (orderInfo.getPayStatus() !=20){
+			throw new Exception("订单状态错误,不可退款");
+		}
+		if (!"wechat".equals(orderInfo.getPayName()) && !"alipay".equals(orderInfo.getPayName())){
+			throw new Exception("非在线支付,不可在线退款");
+		}
+
+		if ("wechat".equals(orderInfo.getPayName())){
+			wechatService.wxRefund(orderInfo);
+		}
+
+		if ("alipay".equals(orderInfo.getPayName())){
+			alipayService.aliPayRefund(orderInfo);
+		}
+
+		//退款成功修改乘客记录
+		PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
+		passengerInfo.setPayStatus("0");
+		passengerInfoService.update(passengerInfo);
+
+		OrderLog orderLog = new OrderLog();
+		orderLog.setId(UUID.randomUUID().toString());
+		orderLog.setCreateBy(userId);
+		orderLog.setCreateTime(new Date());
+		orderLog.setContent("线上退款成功,退款金额:"+ orderInfo.getPayFee().toString()+"元");
+		orderLog.setOrderId(orderInfo.getId());
+		orderLogDAO.insert(orderLog);
+
+
+		return true;
+	}
 }

+ 70 - 0
common/src/main/java/com/jpsoft/bus/modules/base/service/impl/OrderLogServiceImpl.java

@@ -0,0 +1,70 @@
+package com.jpsoft.bus.modules.base.service.impl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.bus.modules.base.dao.OrderLogDAO;
+import com.jpsoft.bus.modules.base.entity.OrderLog;
+import com.jpsoft.bus.modules.base.service.OrderLogService;
+import com.github.pagehelper.Page;
+import com.jpsoft.bus.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="orderLogService")
+public class OrderLogServiceImpl implements OrderLogService {
+	@Resource(name="orderLogDAO")
+	private OrderLogDAO orderLogDAO;
+
+	@Override
+	public OrderLog get(String id) {
+		// TODO Auto-generated method stub
+		return orderLogDAO.get(id);
+	}
+
+	@Override
+	public int insert(OrderLog model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return orderLogDAO.insert(model);
+	}
+
+	@Override
+	public int update(OrderLog model) {
+		// TODO Auto-generated method stub
+		return orderLogDAO.update(model);		
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return orderLogDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = orderLogDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<OrderLog> list() {
+		// TODO Auto-generated method stub
+		return orderLogDAO.list();
+	}
+		
+	@Override
+	public Page<OrderLog> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,List<Sort> sortList) {
+        Page<OrderLog> page = PageHelper.startPage(1,10).doSelectPage(()->{
+            orderLogDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+}

+ 14 - 0
common/src/main/java/com/jpsoft/bus/modules/bus/dto/PassengerMessageDTO.java

@@ -23,6 +23,20 @@ public class PassengerMessageDTO {
 
     private String statusName;
 
+    private String ticketType;
+
+    private String ticketTypeName;
+
     private String imageUrl;
 
+    public String getTicketTypeName(String ticketType){
+        String ticketTypeName = "成人票";
+
+        if ("1".equals(ticketType)){
+            ticketTypeName = "儿童票";
+        }
+
+        return ticketTypeName;
+    }
+
 }

+ 8 - 3
common/src/main/java/com/jpsoft/bus/modules/common/utils/StringUtils.java

@@ -1,5 +1,7 @@
 package com.jpsoft.bus.modules.common.utils;
 
+import cn.hutool.core.date.DateUtil;
+
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.text.MessageFormat;
@@ -47,11 +49,14 @@ public final class StringUtils extends org.apache.commons.lang3.StringUtils {
 	 * @return {String}
 	 */
 	public synchronized static String getOutTradeNo() {
-		SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss", Locale.getDefault());
+		/*SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss", Locale.getDefault());
 		Date date = new Date();
 		String key = format.format(date);
-		Integer ran = (int)((Math.random()*9+1)*100000);
-		key = key +ran.toString();
+		DateUtil.formatDateTime(new Date());
+		Integer ran = (int)((Math.random()*9+1)*100000);*/
+
+		String key = System.currentTimeMillis() + "cxd" + (int) (Math.random() * 900000000 + 100000000);
+	//	key = key +ran.toString();
 	//	key = key.substring(0, 24);
 		return key;
 	}

+ 15 - 0
common/src/main/java/com/jpsoft/bus/modules/pay/service/AlipayService.java

@@ -1,5 +1,9 @@
 package com.jpsoft.bus.modules.pay.service;
 
+import com.jpsoft.bus.modules.base.entity.OrderInfo;
+
+import java.math.BigDecimal;
+
 /**
  * @author 墨鱼_mo
  * @date 2021-4-9 14:51
@@ -7,4 +11,15 @@ package com.jpsoft.bus.modules.pay.service;
 public interface AlipayService {
 
     String tradePrecreatePay(String mergeOrderId) throws Exception;
+
+
+    /**
+     * 支付宝退款
+     * @param orderInfo
+     * @return
+     * @throws Exception
+     */
+    Boolean aliPayRefund(OrderInfo orderInfo) throws Exception;
+
+
 }

+ 13 - 0
common/src/main/java/com/jpsoft/bus/modules/pay/service/WechatService.java

@@ -1,5 +1,9 @@
 package com.jpsoft.bus.modules.pay.service;
 
+import com.jpsoft.bus.modules.base.entity.OrderInfo;
+
+import java.math.BigDecimal;
+
 /**
  * @author 墨鱼_mo
  * @date 2021-4-9 14:50
@@ -7,4 +11,13 @@ package com.jpsoft.bus.modules.pay.service;
 public interface WechatService {
 
     String wxNativePay(String mergeOrderId) throws Exception;
+
+
+    /**
+     *微信退款
+     * @param orderInfo
+     * @return
+     * @throws Exception
+     */
+    Boolean wxRefund(OrderInfo orderInfo) throws Exception;
 }

+ 52 - 0
common/src/main/java/com/jpsoft/bus/modules/pay/service/impl/AlipayServiceImpl.java

@@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.request.AlipayTradePrecreateRequest;
+import com.alipay.api.request.AlipayTradeRefundRequest;
 import com.alipay.api.response.AlipayTradePrecreateResponse;
+import com.alipay.api.response.AlipayTradeRefundResponse;
 import com.jpsoft.bus.config.AliPayConfig;
 import com.jpsoft.bus.modules.base.entity.MergeOrderInfo;
 import com.jpsoft.bus.modules.base.entity.OrderInfo;
@@ -13,6 +15,7 @@ import com.jpsoft.bus.modules.base.service.MergeOrderInfoService;
 import com.jpsoft.bus.modules.base.service.OrderInfoService;
 import com.jpsoft.bus.modules.base.service.PaymentInfoService;
 import com.jpsoft.bus.modules.pay.service.AlipayService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -97,4 +100,53 @@ public class AlipayServiceImpl implements AlipayService {
 
         return qr_code;
     }
+
+    @Override
+    public Boolean aliPayRefund(OrderInfo orderInfo) throws Exception {
+
+
+
+
+        Integer payStatus = 40;
+
+        MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(orderInfo.getMergeOrderId());
+
+
+        AlipayClient alipayClient = new DefaultAlipayClient(aliPayConfig.getServiceUrl(), aliPayConfig.getAppId(), aliPayConfig.getPrivateKey(), "json", aliPayConfig.getInputCharset(), aliPayConfig.getZfbPublicKey(), aliPayConfig.getSignType());
+        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
+
+
+        Map<String, Object> maps = new HashMap<>();
+        maps.put("trade_no", orderInfo.getTransactionId());
+        maps.put("out_trade_no",mergeOrderInfo.getOutOrderNo());
+        maps.put("refund_reason", "正常退款");
+        maps.put("refund_amount", orderInfo.getPayFee());
+
+
+        JSONObject extendParams = new JSONObject();
+
+        extendParams.put("sys_service_provider_id", aliPayConfig.getMchId());
+        maps.put("extend_params", extendParams);
+        request.putOtherTextParam("app_auth_token", aliPayConfig.getAppAuthToken());
+        //把订单信息转换为json对象的字符串
+        String postdata = JSONObject.toJSONString(maps);
+        request.setBizContent(postdata);
+
+
+        AlipayTradeRefundResponse response = alipayClient.execute(request);
+
+        //退款成功
+        if ("10000".equals(response.getCode())){
+            orderInfo.setRefundFee(orderInfo.getPayFee());
+            orderInfo.setPayStatus(payStatus);
+            orderInfoService.update(orderInfo);
+
+        }else {
+            throw new Exception(response.getSubMsg());
+        }
+
+        return true;
+
+
+    }
 }

+ 62 - 0
common/src/main/java/com/jpsoft/bus/modules/pay/service/impl/WechatServiceImpl.java

@@ -4,8 +4,10 @@ import com.ijpay.core.enums.SignType;
 import com.ijpay.core.enums.TradeType;
 import com.ijpay.core.kit.WxPayKit;
 import com.ijpay.wxpay.WxPayApi;
+import com.ijpay.wxpay.model.RefundModel;
 import com.ijpay.wxpay.model.UnifiedOrderModel;
 import com.jpsoft.bus.config.WxJpsoftConfig;
+import com.jpsoft.bus.modules.base.dto.MergeOrderDTO;
 import com.jpsoft.bus.modules.base.entity.MergeOrderInfo;
 import com.jpsoft.bus.modules.base.entity.OrderInfo;
 import com.jpsoft.bus.modules.base.entity.PaymentInfo;
@@ -109,4 +111,64 @@ public class WechatServiceImpl implements WechatService {
 
         return qrCodeUrl;
     }
+
+    @Override
+    public Boolean wxRefund(OrderInfo orderInfo) throws Exception {
+
+
+
+        Integer payStatus = 40;
+
+        MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.get(orderInfo.getMergeOrderId());
+
+        List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(mergeOrderInfo.getId());
+        BigDecimal totalDecimal = BigDecimal.ZERO;
+        if (orderInfoList.size()>0){
+            for (OrderInfo orderInfo1 : orderInfoList){
+                if (orderInfo1.getPayStatus() != 10){
+                    totalDecimal = totalDecimal.add(orderInfo1.getPayFee());
+                }
+            }
+        }
+
+
+        String totalFee = totalDecimal.multiply(new BigDecimal(100)).setScale(0).toString();
+        String refundFeeStr = orderInfo.getPayFee().multiply(new BigDecimal(100)).setScale(0).toString();
+
+
+        Map<String, String> params = RefundModel.builder()
+                .appid(wxJpsoftConfig.getAppId())
+                .mch_id(wxJpsoftConfig.getMchId())
+                .sub_mch_id(wxJpsoftConfig.getSubMchId())
+                .nonce_str(WxPayKit.generateStr())
+                .transaction_id(orderInfo.getTransactionId())
+                .out_trade_no(mergeOrderInfo.getOutOrderNo())
+                .out_refund_no(WxPayKit.generateStr())
+                .total_fee(totalFee)
+                .refund_fee(refundFeeStr)
+                .notify_url(wxJpsoftConfig.getRefundUrl())
+                .build()
+                .createSign(wxJpsoftConfig.getMchKey(), SignType.HMACSHA256);
+        //  .createSign(wxTransferConfig.getKey(), SignType.HMACSHA256);
+
+        //  return WxPayApi.orderRefund(false, params, wxTransferConfig.getCertPath(), wxTransferConfig.getMchId());
+        String result = WxPayApi.orderRefund(false, params, wxJpsoftConfig.getCertPath(), wxJpsoftConfig.getMchId());
+        Map<String, String> map = WxPayKit.xmlToMap(result);
+        String returnCode = map.get("return_code");
+        String resultCode = map.get("result_code");
+        if (WxPayKit.codeIsOk(returnCode) && WxPayKit.codeIsOk(resultCode)) {
+
+            orderInfo.setRefundFee(orderInfo.getPayFee());
+            orderInfo.setPayStatus(payStatus);
+            orderInfoService.update(orderInfo);
+
+
+
+            return true;
+        } else {
+            // 退款失败
+            throw new Exception("退款失败," + map.get("return_msg") + "," + map.get("err_code_des"));
+        }
+
+    }
 }

+ 91 - 0
common/src/main/resources/mapper/base/OrderLog.xml

@@ -0,0 +1,91 @@
+<?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">
+<!-- namespace必须指向DAO接口 -->
+<mapper namespace="com.jpsoft.bus.modules.base.dao.OrderLogDAO">
+	<resultMap id="OrderLogMap" type="com.jpsoft.bus.modules.base.entity.OrderLog">
+		<id property="id" column="id_" />
+			<result property="orderId" column="order_id" />
+			<result property="content" column="content_" />
+			<result property="createBy" column="create_by" />
+			<result property="createTime" column="create_time" />
+			<result property="updateBy" column="update_by" />
+			<result property="updateTime" column="update_time" />
+			<result property="delFlag" column="del_flag" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.bus.modules.base.entity.OrderLog">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into base_order_log
+	    (id_,order_id,content_,create_by,create_time,update_by,update_time,del_flag)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{orderId,jdbcType=VARCHAR}
+,#{content,jdbcType=VARCHAR}
+,#{createBy,jdbcType=VARCHAR}
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateBy,jdbcType=VARCHAR}
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{delFlag,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from base_order_log where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.bus.modules.base.entity.OrderLog">
+		update base_order_log
+		<set>
+				<if test="orderId!=null">
+		order_id=#{orderId,jdbcType=VARCHAR},
+		</if>
+				<if test="content!=null">
+		content_=#{content,jdbcType=VARCHAR},
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="OrderLogMap">
+		select 
+id_,order_id,content_,create_by,create_time,update_by,update_time,del_flag		from base_order_log where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from base_order_log where id_=#{0}
+	</select>
+	<select id="list" resultMap="OrderLogMap">
+		select * from base_order_log
+	</select>
+	<select id="search" parameterType="hashmap" resultMap="OrderLogMap">
+		<![CDATA[
+			select * from base_order_log
+		]]>
+		<where>
+			<if test="searchParams.id != null">
+				and ID_ like #{searchParams.id}
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+</mapper>

+ 1 - 0
web/src/main/java/com/jpsoft/bus/config/WebMvcConfig.java

@@ -79,6 +79,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/bus/deviceCmdApi/queryPadLatestVersion")
 				.excludePathPatterns("/mobile/passengerApi/passengerMessageNoReadNum")
 				.excludePathPatterns("/mobile/passengerApi/passengerMessage")
+				.excludePathPatterns("/mobile/passengerApi/mergeInfo")
 
 				;
 	}

+ 27 - 0
web/src/main/java/com/jpsoft/bus/modules/base/controller/OrderInfoController.java

@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -319,4 +320,30 @@ public class OrderInfoController {
 
         return msgResult;
     }
+
+
+    @ApiOperation(value = "修改订单状态")
+    @PostMapping("updateOrder")
+    public MessageResult<Boolean> updateOrder(String id, Integer payStatus, @RequestAttribute String subject) {
+        MessageResult<Boolean> msgResult = new MessageResult<>();
+
+        try {
+
+            boolean result = orderInfoService.refund(id,subject);
+
+            if (result) {
+                msgResult.setResult(true);
+                msgResult.setData(result);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库修改失败");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
 }

+ 53 - 0
web/src/main/java/com/jpsoft/bus/modules/mobile/controller/PassengerApiController.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.symmetric.DES;
 import cn.hutool.db.sql.Order;
 import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.PropertyMetadata;
 import com.github.pagehelper.Page;
 import com.jpsoft.bus.config.OSSConfig;
 import com.jpsoft.bus.modules.base.dto.MergeOrderDTO;
@@ -974,6 +975,8 @@ public class PassengerApiController {
                     passengerMessageDTO.setSendTime(DateUtil.format(passengerMessage.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
                     passengerMessageDTO.setStatusName("已过站");
                     passengerMessageDTO.setImageUrl(passengerInfo.getImageUrl());
+                    passengerMessageDTO.setTicketType(passengerInfo.getTicketType());
+                    passengerMessageDTO.setTicketTypeName(passengerMessageDTO.getTicketTypeName(passengerMessageDTO.getTicketType()));
                     list.add(passengerMessageDTO);
 
                     passengerMessage.setReadStatus(true);
@@ -1286,4 +1289,54 @@ public class PassengerApiController {
         return messageResult;
     }
 
+    @PostMapping("mergeInfo")
+    @ApiOperation(value = "综合账单详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "outOrderNo", value = "商户订单号", paramType = "form")
+    })
+    public MessageResult<List<PassengerRecordDTO>> mergeInfo(String outOrderNo) {
+        MessageResult<List<PassengerRecordDTO>> messageResult = new MessageResult<>();
+
+        try {
+
+            List<PassengerRecordDTO> list = new ArrayList<>();
+            MergeOrderInfo mergeOrderInfo = mergeOrderInfoService.findByOutOrderNo(outOrderNo);
+            if (mergeOrderInfo != null){
+                List<OrderInfo> orderInfoList = orderInfoService.findByMergeOrderId(mergeOrderInfo.getId());
+                if (orderInfoList.size()>0){
+                    for (OrderInfo orderInfo : orderInfoList){
+                        PassengerRecordDTO passengerRecordDTO = new PassengerRecordDTO();
+
+                        //乘客记录
+                        PassengerInfo passengerInfo = passengerInfoService.get(orderInfo.getPassengerId());
+                        passengerRecordDTO.setId(orderInfo.getId());
+                        passengerRecordDTO.setImageUrl(passengerInfo.getImageUrl());
+                        //开始站点
+                        StationInfo startStation = stationInfoService.get(orderInfo.getTicketUpStationId());
+                        //终点站
+                        StationInfo endStation = stationInfoService.get(orderInfo.getTicketDownStationId());
+                        passengerRecordDTO.setStartStation(startStation.getName());
+                        passengerRecordDTO.setEndStation(endStation.getName());
+                        passengerRecordDTO.setTicketType(orderInfo.getTicketType());
+                        passengerRecordDTO.setTicketTypeName(passengerRecordDTO.getTicketTypeName(passengerRecordDTO.getTicketType()));
+                        passengerRecordDTO.setGoodTicket(orderInfo.getGoodsTicket());
+                        passengerRecordDTO.setPayTime(DateUtil.format(orderInfo.getPayTime(),"yyyy-MM-dd HH:mm:ss"));
+                        passengerRecordDTO.setTotalFee(orderInfo.getTotalFee());
+                        list.add(passengerRecordDTO);
+                    }
+                }
+            }
+
+            messageResult.setData(list);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
 }