Monterey 3 anni fa
parent
commit
46115a9c1b
29 ha cambiato i file con 509 aggiunte e 71 eliminazioni
  1. 2 2
      ruoyi-admin/pom.xml
  2. 3 2
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5OrderController.java
  3. 8 11
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5PersonalController.java
  4. 20 2
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5SystemController.java
  5. 80 0
      ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/dto/CompnayInfo.java
  6. 5 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/ConfirmInfo.java
  7. 6 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/Info.java
  8. 6 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LineCallBankParam.java
  9. 29 2
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LineConfig.java
  10. 66 0
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LineConfigFactory.java
  11. 53 0
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LineMessagingClient.java
  12. 63 17
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePay.java
  13. 5 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePayAPOD.java
  14. 5 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePayConfirmAPOD.java
  15. 5 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePayRefundAPOD.java
  16. 13 0
      ruoyi-admin/src/main/java/com/ruoyi/web/line/Messages.java
  17. 3 4
      ruoyi-admin/src/main/java/com/ruoyi/web/line/PayApi.java
  18. 6 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/PayInfo.java
  19. 6 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/PaymentUrl.java
  20. 6 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/Product.java
  21. 42 0
      ruoyi-admin/src/main/java/com/ruoyi/web/line/PushMessage.java
  22. 6 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/RefundInfo.java
  23. 5 1
      ruoyi-admin/src/main/java/com/ruoyi/web/line/SendMessage.java
  24. 34 0
      ruoyi-admin/src/main/java/com/ruoyi/web/line/TextMessage.java
  25. 2 1
      ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderManage.java
  26. 12 9
      ruoyi-admin/src/main/java/com/ruoyi/web/schedulTask/schedulTask.java
  27. 3 8
      ruoyi-admin/src/main/resources/application.yml
  28. 9 0
      ruoyi-admin/src/main/resources/mapper/order/TOrderManageMapper.xml
  29. 6 2
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginCustomerManage.java

+ 2 - 2
ruoyi-admin/pom.xml

@@ -70,11 +70,11 @@
             <groupId>org.apache.httpcomponents.client5</groupId>
             <artifactId>httpclient5</artifactId>
         </dependency>
-        <!-- line bot -->
+        <!-- line bot 
         <dependency>
             <groupId>com.linecorp.bot</groupId>
             <artifactId>line-bot-spring-boot</artifactId>
-    	</dependency>
+    	</dependency>-->
     	
         <dependency>
             <groupId>org.apache.velocity</groupId>

+ 3 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5OrderController.java

@@ -320,7 +320,8 @@ public class H5OrderController extends BaseController {
     		return AjaxResult.success("Line支払不要");
     	}
         // 接入支付接口
-    	LinePayAPOD resp = linePay.pay(orderManageTotal, orderManageTotalService.getDeptName(orderManageTotal.getId()));
+    	LinePayAPOD resp = linePay.pay(getLoginUser().getLoginCustomer().getDeptId(),
+    			orderManageTotal, orderManageTotalService.getDeptName(orderManageTotal.getId()));
     	
     	//ok
     	if (resp != null && "0000".equals(resp.returnCode)) {
@@ -388,7 +389,7 @@ public class H5OrderController extends BaseController {
     	LinePayConfirmAPOD resp = null;
     	//0元支付不要。
     	if (orderManageTotal.getOrderMoney().longValue() > 0) {
-    		resp = linePay.payConfirm(param.getTransactionId(), orderManageTotal.getOrderMoney().longValue());
+    		resp = linePay.payConfirm(getLoginUser().getLoginCustomer().getDeptId(), param.getTransactionId(), orderManageTotal.getOrderMoney().longValue());
     	}
     	if (resp == null || "0000".equals(resp.returnCode)) {
     		

+ 8 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5PersonalController.java

@@ -16,19 +16,19 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.linecorp.bot.client.LineMessagingClient;
-import com.linecorp.bot.model.PushMessage;
-import com.linecorp.bot.model.message.TextMessage;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.OperatorType;
+import com.ruoyi.web.line.LineMessagingClient;
 import com.ruoyi.web.line.LinePay;
 import com.ruoyi.web.line.LinePayRefundAPOD;
 import com.ruoyi.web.line.PayApi;
+import com.ruoyi.web.line.PushMessage;
 import com.ruoyi.web.line.SendMessage;
+import com.ruoyi.web.line.TextMessage;
 import com.ruoyi.web.pcApi.domain.TCommodityCoupon;
 import com.ruoyi.web.pcApi.domain.TCommoditySchedul;
 import com.ruoyi.web.pcApi.domain.TCustomerCollectionOrFootprint;
@@ -49,7 +49,6 @@ import com.ruoyi.web.pcApi.service.ITCustomerManageService;
 import com.ruoyi.web.pcApi.service.ITCustomerNoticeService;
 import com.ruoyi.web.pcApi.service.ITOrderEvaluateService;
 import com.ruoyi.web.pcApi.service.ITOrderManageService;
-import com.ruoyi.web.pcApi.service.ITOrderManageTotalService;
 
 /**
  * h5端-个人中心api
@@ -83,8 +82,6 @@ public class H5PersonalController extends BaseController
     @Autowired
     private LinePay linePay;
     @Autowired
-    private ITOrderManageTotalService orderManageTotalService;
-    @Autowired
     private PayApi payBackApi;
     @Autowired
     private LineMessagingClient lineMessagingClient;
@@ -194,7 +191,7 @@ public class H5PersonalController extends BaseController
 
         LinePayRefundAPOD resp = null;
         if (orderManage.getOrderMoney().longValue() > 0) {
-            resp = linePay.payRefund(orderManage.getTransactionId(), orderManage.getOrderMoney().longValue());
+            resp = linePay.payRefund(getLoginUser().getLoginCustomer().getDeptId(), orderManage.getTransactionId(), orderManage.getOrderMoney().longValue());
         }
         if (resp != null && !"0000".equals(resp.returnCode)) {
         	AjaxResult.error("LINE PAY取引返金失敗しました。");
@@ -205,7 +202,7 @@ public class H5PersonalController extends BaseController
       	
       	list.add(orderManage);
       	
-      	lineMessagingClient.pushMessage(new PushMessage(list.get(0).getPhone(),
+      	lineMessagingClient.pushMessage(orderManage.getDeptId(), new PushMessage(list.get(0).getPhone(),
       			new TextMessage(SendMessage.getCancelMessage(list))));
       	
         return AjaxResult.success(orderManageService.updateTOrderManage(TOrderManage.builder().id(id)
@@ -225,12 +222,12 @@ public class H5PersonalController extends BaseController
     {
         List<TCustomerManage> customerManages = customerManageService.selectTCustomerManageList(TCustomerManage.builder().username(phone).build());
         if(customerManages.size()<=0){
-            return AjaxResult.error("未查询到该用户信息");
+            return AjaxResult.error("ユーザーが存在しません。");
         }
         // 转入人
         TCustomerManage turnIn = customerManages.get(0);
         if(turnIn.getId() == getLoginUser().getLoginCustomer().getId()){
-            return AjaxResult.error("无法为自己转入");
+            return AjaxResult.error("自分のアカウントにできません。");
         }
 
         // 转出人记录
@@ -238,7 +235,7 @@ public class H5PersonalController extends BaseController
         {
             // 当前用户减去积分
             if (turnOut.getIntegral() - Long.parseLong(integral) < 0) {
-                return AjaxResult.error("用户积分不足");
+                return AjaxResult.error("ポイント足りません。");
             }
             turnOut.setIntegral(turnOut.getIntegral() - Long.parseLong(integral));
             customerManageService.updateTCustomerManage(turnOut);

+ 20 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/api/H5SystemController.java

@@ -1,6 +1,8 @@
 package com.ruoyi.web.H5Api.api;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -23,6 +25,7 @@ import com.ruoyi.common.enums.OperatorType;
 import com.ruoyi.common.utils.CommonUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.web.H5Api.dto.CompnayInfo;
 import com.ruoyi.web.line.LineConfig;
 import com.ruoyi.web.pcApi.domain.BusCompany;
 import com.ruoyi.web.pcApi.domain.TCustomerManage;
@@ -68,12 +71,23 @@ public class H5SystemController extends BaseController
     @RepeatSubmit
     @PostMapping("/lineLogin")
     public AjaxResult lineLogin(@RequestBody LoginCustomerManage loginCustomerManage){
+    	//通过LIFEID取得公司数据。
+    	BusCompany busCmp = new BusCompany();
+    	busCmp.setLiffId(loginCustomerManage.getLiffId());
+    	List<BusCompany> busCompanies = busCompanyService.selectBusCompanyList(busCmp);
+    	if (busCompanies.size() == 0) {
+    		return AjaxResult.error("バス会社取得できません。");
+    	}
+    	busCmp = busCompanies.get(0);
+
+    	//LIFEID
+    	loginCustomerManage.setDeptId(busCmp.getDeptId());
         // 校验用户名是否存在
     	LoginCustomerManage loginCustomer = customerManageService.selectLoginUser(loginCustomerManage);
         if(loginCustomer == null){
         	TCustomerManage customerManage = new TCustomerManage();
         	customerManage.setUsername(loginCustomerManage.getUsername());
-        	customerManage.setDeptId(loginCustomerManage.getDeptId());
+        	customerManage.setDeptId(busCmp.getDeptId());
         	customerManage.setName(loginCustomerManage.getName());
         	customerManage.setCustomerNo(CommonUtils.getStringSnowflakeId());
             customerManage.setPassword(SecurityUtils.encryptPassword(lineConfig.password));
@@ -87,7 +101,11 @@ public class H5SystemController extends BaseController
         SecurityContextHolder.getContext().setAuthentication(authenticationToken);
         String token = tokenService.createToken(loginUser);
 
-        return AjaxResult.success(token);
+        Map<String, Object> res = new HashMap<String, Object>();
+        
+        res.put("token", token);
+        res.put("companyinfo", new CompnayInfo(busCmp));
+        return AjaxResult.success(res);
     }
     
     /**

+ 80 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/H5Api/dto/CompnayInfo.java

@@ -0,0 +1,80 @@
+package com.ruoyi.web.H5Api.dto;
+
+import java.io.Serializable;
+
+import com.ruoyi.web.pcApi.domain.BusCompany;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Data
+@Getter
+@Setter
+public class CompnayInfo implements Serializable {
+	/**
+	 * serialVersionUID
+	 */
+    private static final long serialVersionUID = 1L;
+    /** 部门id */
+    private Long deptId;
+
+    /** 出発までの流れ */
+    private String process;
+
+    /** シートベルト着用のお願い */
+    private String safety;
+
+    /** 変更・取消料 */
+    private String cancel;
+
+    /** ご利用案内 */
+    private String about;
+
+    /** 標識・約款 */
+    private String mark;
+
+    /** プライバシーポリシー */
+    private String privacy;
+
+    /** ポイントルール説明 */
+    private String pointDesc;
+
+    /** クーポン使用説明 */
+    private String couponDesc;
+
+    /**  親権者同意書 */
+    private String agreement;
+
+    /**  Line LIff ID */
+    private String liffId;
+
+	/**
+	 * 构造
+	 * @param busCmp bus公司对象
+	 */
+	public CompnayInfo(BusCompany busCmp) {
+	    /** 部门id */
+	    this.setDeptId(busCmp.getDeptId());
+	    /** 出発までの流れ */
+	    this.setProcess(busCmp.getProcess());
+	    /** シートベルト着用のお願い */
+	    this.setSafety(busCmp.getSafety());
+	    /** 変更・取消料 */
+	    this.setCancel(busCmp.getCancel());
+	    /** ご利用案内 */
+	    this.setAbout(busCmp.getAbout());
+	    /** 標識・約款 */
+	    this.setMark(busCmp.getMark());
+	    /** プライバシーポリシー */
+	    this.setPrivacy(busCmp.getPrivacy());
+	    /** ポイントルール説明 */
+	    this.setPointDesc(busCmp.getPointDesc());
+	    /** クーポン使用説明 */
+	    this.setCouponDesc(busCmp.getCouponDesc());
+	    /**  親権者同意書 */
+	    this.setAgreement(busCmp.getAgreement());
+	    /**  Line LIff ID */
+	    this.setLiffId(busCmp.getLiffId());
+	}
+}

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/ConfirmInfo.java

@@ -1,10 +1,14 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
 import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class ConfirmInfo {
+public class ConfirmInfo implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String transactionId;
 	public final String orderId;
 	public final List<PayInfo> payInfo;

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/Info.java

@@ -1,8 +1,13 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class Info {
+public class Info implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String transactionId;
 	public final String paymentAccessToken;
 	public final PaymentUrl paymentUrl;

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/LineCallBankParam.java

@@ -1,12 +1,17 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
+
 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
 @Data
 @Getter
 @Setter
-public class LineCallBankParam {
+public class LineCallBankParam implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	private String transactionId;
 	private String orderId;
 }

+ 29 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/line/LineConfig.java

@@ -1,14 +1,17 @@
 package com.ruoyi.web.line;
 
+import java.text.MessageFormat;
+
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class LineConfig {
-    @Value("${line.channelId}")
+	public String lifeId;
     public String channelId;
-    @Value("${line.channelSecret}")
     public String channelSecret;
+    public String botChannelToken;
+    public String botChannelSecret;
     @Value("${line.payUrl}")
     public String payUrl;
     @Value("${line.confirmUrl}")
@@ -21,5 +24,29 @@ public class LineConfig {
     public String password;
     @Value("${line.refundUrl}")
     public String refundUrl;
+    @Value("${line.pullMsgUrl}")
+    public String pullMsgUrl;
+    
+    /**
+     * 确认用URL
+     * @return 确认用URL
+     */
+    public String getCallbankConfirmUrl() {
+    	MessageFormat form = new MessageFormat(this.callbankConfirmUrl);
+		
+		String formatStr = form.format(new Object[] {this.lifeId});
+		return formatStr;
+    }
+    
+    /**
+     * 取消用URL
+     * @return 取消用URL
+     */
+    public String getCallbankCancelUrl() {
+    	MessageFormat form = new MessageFormat(this.callbankCancelUrl);
+		
+		String formatStr = form.format(new Object[] {this.lifeId});
+		return formatStr;
+    }
 
 }

+ 66 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/line/LineConfigFactory.java

@@ -0,0 +1,66 @@
+package com.ruoyi.web.line;
+
+import java.io.Serializable;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.alibaba.druid.util.StringUtils;
+import com.ruoyi.web.pcApi.domain.BusCompany;
+import com.ruoyi.web.pcApi.service.IBusCompanyService;
+
+@Component
+public class LineConfigFactory implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
+    @Autowired
+    private IBusCompanyService busCompanyService;
+    
+    @Autowired
+    private LineConfig lineConfig;
+
+    /**
+     * 通过busId取得bus公司信息。
+     * 
+     * @param deptId バスID
+     */
+    private void setConfig(long deptId) {
+    	//未設定の場合
+    	if (StringUtils.isEmpty(lineConfig.channelId)) {
+	    	BusCompany busCmp = busCompanyService.selectBusCompanyByDeptId(deptId);
+	    	setConfig(busCmp);
+    	}
+    }
+    
+    private void setConfig(BusCompany busCmp) {
+    	//未設定の場合
+    	if (StringUtils.isEmpty(lineConfig.channelId)) {
+	    	lineConfig.channelId = busCmp.getLinePayChannelId();
+	    	lineConfig.channelSecret = busCmp.getLinePayChannelSecret();
+	    	lineConfig.lifeId = busCmp.getLiffId();
+	    	lineConfig.botChannelToken = busCmp.getBotChannelToken();
+	    	lineConfig.botChannelSecret = busCmp.getBotChannelSecret();
+    	}
+    }
+    
+    /**
+     * lineConfig
+     * @param deptId bus id
+     * @return
+     */
+    public LineConfig getLineConfig(long deptId) {
+    	setConfig(deptId);
+    	return lineConfig;
+    }
+
+    /**
+     * lineConfig
+     * @param deptId bus id
+     * @return
+     */
+    public LineConfig getLineConfig(BusCompany busCmp) {
+    	setConfig(busCmp);
+    	return lineConfig;
+    }
+}

+ 53 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/line/LineMessagingClient.java

@@ -0,0 +1,53 @@
+package com.ruoyi.web.line;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.apache.hc.client5.http.classic.methods.HttpPost;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.core5.http.ContentType;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
+import org.apache.hc.core5.http.io.entity.StringEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Component
+public class LineMessagingClient implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /** log */
+    private static final Logger log = LoggerFactory.getLogger(LineMessagingClient.class);
+    @Autowired
+    private LineConfigFactory lineConfigFactory;
+    
+	/**
+	 * 
+	 */
+	public void pushMessage(long deptId, PushMessage msg) {
+		LineConfig lineConfig = lineConfigFactory.getLineConfig(deptId);
+		
+		ObjectMapper mapper = new ObjectMapper();
+		
+		try (CloseableHttpClient client = HttpClients.createDefault()) {
+
+			HttpPost request = new HttpPost(lineConfig.pullMsgUrl);
+			
+			request.setHeader("Content-Type", "application/json");
+			request.setHeader("Authorization", "Bearer " + lineConfig.botChannelToken);
+
+			request.setEntity(new StringEntity(mapper.writeValueAsString(msg), ContentType.APPLICATION_JSON));
+
+			client.execute(request, httpResponse ->
+		       mapper.readValue(EntityUtils.toString(httpResponse.getEntity()), Object.class));
+
+		} catch (IOException e) {
+			
+			log.error("line message API エラーが発生しました。", e);
+		}
+
+	}
+}

+ 63 - 17
ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePay.java

@@ -26,25 +26,34 @@ import com.ruoyi.web.pcApi.domain.TOrderManageTotal;
 import com.ruoyi.web.pcApi.service.ITOrderManageService;
 
 @Component
-public class LinePay  implements Serializable {
+public class LinePay implements Serializable {
 	
     private static final long serialVersionUID = 1L;
     /** log */
     private static final Logger log = LoggerFactory.getLogger(LinePay.class);
     
-    @Autowired
-    private LineConfig lineConfig;
-    
     @Autowired
     private ITOrderManageService orderManageService;
+    @Autowired
+    private LineConfigFactory lineConfigFactory;
     
+    /**
+     * 通过busId取得bus公司信息。
+     * 
+     * @param deptId バスID
+     */
+    public LineConfig getConfig(long deptId) {
+    	return lineConfigFactory.getLineConfig(deptId);
+    }
+ 
 	/**
 	 * create the line pay request body.
-	 * 
+     * @param deptId バスID
 	 * @param orderManageTotal 订单管理-总对象
 	 * @return line pay request body
 	 */
-	public SendBody createSendBody(TOrderManageTotal orderManageTotal, String deptName) {
+	public SendBody createSendBody(long deptId, TOrderManageTotal orderManageTotal, String deptName) {
+		LineConfig lineConfig = getConfig(deptId);
 		//create line pay request body
 		SendBody sendBody = new SendBody();
 		
@@ -93,9 +102,9 @@ public class LinePay  implements Serializable {
 		//call back urls
 		RedirectUrls callBack = new RedirectUrls();
 		//confirm url
-		callBack.setConfirmUrl(lineConfig.callbankConfirmUrl);
+		callBack.setConfirmUrl(lineConfig.getCallbankConfirmUrl());
 		//cancel url
-		callBack.setCancelUrl(lineConfig.callbankCancelUrl);
+		callBack.setCancelUrl(lineConfig.getCallbankCancelUrl());
 		
 		sendBody.setRedirectUrls(callBack);
 		
@@ -104,10 +113,11 @@ public class LinePay  implements Serializable {
 	
 	/**
 	 * set the header info
+	 * 
 	 * @param request
 	 * @throws URISyntaxException 
 	 */
-	private void setHeaderAndEntity(HttpPost request, String sendBody) throws URISyntaxException {
+	private void setHeaderAndEntity(HttpPost request, String sendBody, LineConfig lineConfig) throws URISyntaxException {
 		String nonce = UUID.randomUUID().toString();
 		request.setHeader("Content-Type", "application/json");
 		request.setHeader("X-LINE-ChannelId", lineConfig.channelId);
@@ -134,12 +144,14 @@ public class LinePay  implements Serializable {
 	}
 	/**
 	 * line pay 
+	 * 
+     * @param deptId バスID
 	 * @param orderManageTotal
 	 */
-	public LinePayAPOD pay(TOrderManageTotal orderManageTotal, String deptName) {
-
+	public LinePayAPOD pay(long deptId, TOrderManageTotal orderManageTotal, String deptName) {
+		LineConfig lineConfig = getConfig(deptId);
 		//create request body
-		SendBody sendBody = createSendBody(orderManageTotal, deptName);
+		SendBody sendBody = createSendBody(deptId, orderManageTotal, deptName);
 		
 		ObjectMapper mapper = new ObjectMapper();
 	
@@ -153,7 +165,7 @@ public class LinePay  implements Serializable {
 			
 			log.info(sendBodyStr);
 			 
-			setHeaderAndEntity(request, sendBodyStr);
+			setHeaderAndEntity(request, sendBodyStr, lineConfig);
 			
 			response = client.execute(request, httpResponse ->
 		       mapper.readValue(EntityUtils.toString(httpResponse.getEntity()), LinePayAPOD.class));
@@ -170,10 +182,13 @@ public class LinePay  implements Serializable {
 
 	/**
 	 * confirm line pay
+	 * 
+     * @param deptId バスID
 	 * @param transactionId
 	 * @param total
 	 */
-	public LinePayConfirmAPOD payConfirm(String transactionId, long total) {
+	public LinePayConfirmAPOD payConfirm(long deptId, String transactionId, long total) {
+		LineConfig lineConfig = getConfig(deptId);
 		//
 		ConfirmBody body = new ConfirmBody();
 		
@@ -191,7 +206,7 @@ public class LinePay  implements Serializable {
 
 			HttpPost request = new HttpPost(formatStr);
 	
-			setHeaderAndEntity(request, mapper.writeValueAsString(body));
+			setHeaderAndEntity(request, mapper.writeValueAsString(body), lineConfig);
 
 			response = client.execute(request, httpResponse ->
 		       mapper.readValue(EntityUtils.toString(httpResponse.getEntity()), LinePayConfirmAPOD.class));
@@ -208,10 +223,14 @@ public class LinePay  implements Serializable {
 
 	/**
 	 * 決済完了(売上確定済み)された取引を返金します。
+     * @param deptId バスID
 	 * @param transactionId
 	 * @param refundAmount
 	 */
-	public LinePayRefundAPOD payRefund(String transactionId, Long refundAmount) {
+	public LinePayRefundAPOD payRefund(long deptId, String transactionId, Long refundAmount) {
+		
+		LineConfig lineConfig = getConfig(deptId);
+		
 		//
 		RefundBody body = new RefundBody();
 		
@@ -229,7 +248,7 @@ public class LinePay  implements Serializable {
 
 			HttpPost request = new HttpPost(formatStr);
 	
-			setHeaderAndEntity(request, mapper.writeValueAsString(body));
+			setHeaderAndEntity(request, mapper.writeValueAsString(body), lineConfig);
 
 			response = client.execute(request, httpResponse ->
 		       mapper.readValue(EntityUtils.toString(httpResponse.getEntity()), LinePayRefundAPOD.class));
@@ -243,4 +262,31 @@ public class LinePay  implements Serializable {
 		
 		return response;
 	}
+	
+	/**
+	 * 
+	 */
+	public void pushMessage(long deptId, PushMessage msg) {
+		LineConfig lineConfig = getConfig(deptId);
+		
+		ObjectMapper mapper = new ObjectMapper();
+		
+		try (CloseableHttpClient client = HttpClients.createDefault()) {
+
+			HttpPost request = new HttpPost(lineConfig.pullMsgUrl);
+			
+			request.setHeader("Content-Type", "application/json");
+			request.setHeader("Authorization", "Bearer " + lineConfig.botChannelToken);
+
+			request.setEntity(new StringEntity(mapper.writeValueAsString(msg), ContentType.APPLICATION_JSON));
+
+			client.execute(request, httpResponse ->
+		       mapper.readValue(EntityUtils.toString(httpResponse.getEntity()), Object.class));
+
+		} catch (IOException e) {
+			
+			log.error("line message API エラーが発生しました。", e);
+		}
+
+	}
 }

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePayAPOD.java

@@ -1,12 +1,16 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class LinePayAPOD {
+public class LinePayAPOD implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String returnCode;
     public final String returnMessage;
 	public final Info info;

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePayConfirmAPOD.java

@@ -1,12 +1,16 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class LinePayConfirmAPOD {
+public class LinePayConfirmAPOD implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String returnCode;
     public final String returnMessage;
 	public final ConfirmInfo info;

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/LinePayRefundAPOD.java

@@ -1,12 +1,16 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
 import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class LinePayRefundAPOD {
+public class LinePayRefundAPOD implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String returnCode;
     public final String returnMessage;
 	public final RefundInfo info;

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/line/Messages.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.line;
+
+public interface Messages {
+
+	/**
+	 * message type
+	 */
+	public String getType();
+	/**
+	 * message text
+	 */
+	public String getText();
+}

+ 3 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/line/PayApi.java

@@ -10,9 +10,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import com.linecorp.bot.client.LineMessagingClient;
-import com.linecorp.bot.model.PushMessage;
-import com.linecorp.bot.model.message.TextMessage;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.web.pcApi.domain.TCommodityCoupon;
 import com.ruoyi.web.pcApi.domain.TCommoditySchedul;
@@ -60,6 +57,7 @@ public class PayApi implements Serializable {
     private ITOrderManageTotalService orderManageTotalService;
     @Autowired
     private LineMessagingClient lineMessagingClient;
+
 	/**
 	 * 
 	 * @param orderManage 订单管理对象
@@ -220,7 +218,8 @@ public class PayApi implements Serializable {
         
       	List<TOrderManage> list = orderManageService.selectByManagerTotalId(orderManageTotal.getId());
       	
-      	lineMessagingClient.pushMessage(new PushMessage(list.get(0).getPhone(),
+      	lineMessagingClient.pushMessage(loginuser.getLoginCustomer().getId(),
+      			new PushMessage(list.get(0).getPhone(),
       			new TextMessage(SendMessage.getOrderMessage(list))));
 	}
 }

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/PayInfo.java

@@ -1,8 +1,13 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class PayInfo {
+public class PayInfo implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final int amount;
 	public final String method;
 	public PayInfo(@JsonProperty("amount") int amount,

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/PaymentUrl.java

@@ -1,8 +1,13 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class PaymentUrl {
+public class PaymentUrl implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String web;
 	public final String app;
 	public PaymentUrl(@JsonProperty("web") String web,

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/Product.java

@@ -1,8 +1,13 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class Product {
+public class Product implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final int price;
 	public final int quantity;
 	public final String name;

+ 42 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/line/PushMessage.java

@@ -0,0 +1,42 @@
+package com.ruoyi.web.line;
+
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Data
+@Getter
+@Setter
+public class PushMessage implements Serializable {
+	/**
+	 * 构造
+	 */
+	public PushMessage(String to, Messages messages) {
+		this.to = to;
+		this.messages = new Messages[] {messages};
+	}
+	
+	/**
+	 * message to
+	 */
+	private String to;
+	/**
+	 * messages
+	 */
+	private Messages[] messages;
+	/**
+	 * notificationDisabled
+	 */
+	private boolean notificationDisabled;
+	/**
+	 * customAggregationUnits
+	 */
+	private String[] customAggregationUnits;
+	/**
+	 * serialVersionUID
+	 */
+    private static final long serialVersionUID = 1L;
+
+}

+ 6 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/RefundInfo.java

@@ -1,8 +1,13 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class RefundInfo {
+public class RefundInfo implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	public final String refundTransactionId;
 	public final String refundTransactionDate;
 

+ 5 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/line/SendMessage.java

@@ -1,5 +1,6 @@
 package com.ruoyi.web.line;
 
+import java.io.Serializable;
 import java.io.StringWriter;
 import java.util.List;
 
@@ -10,7 +11,10 @@ import org.apache.velocity.app.Velocity;
 import com.ruoyi.generator.util.VelocityInitializer;
 import com.ruoyi.web.pcApi.domain.TOrderManage;
 
-public class SendMessage {
+public class SendMessage implements Serializable {
+	
+    private static final long serialVersionUID = 1L;
+
 	static {
 	    //
 	    VelocityInitializer.initVelocity();

+ 34 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/line/TextMessage.java

@@ -0,0 +1,34 @@
+package com.ruoyi.web.line;
+
+import java.io.Serializable;
+
+
+public class TextMessage implements Messages, Serializable {
+	/**
+	 * serialVersionUID
+	 */
+    private static final long serialVersionUID = 1L;
+    
+    /**
+     * 构造
+     * @param text 发送消息内容
+     */
+    public TextMessage(String text) {
+    	this.text = text;
+    }
+    
+	/**
+	 * message text
+	 */
+	private String text;
+	
+	@Override
+	public String getType() {
+		return "text";
+	}
+	
+	@Override
+	public String getText() {
+		return this.text;
+	}
+}

+ 2 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/pcApi/domain/TOrderManage.java

@@ -107,7 +107,8 @@ public class TOrderManage extends BaseEntity
     private String transactionId;
     /** 本记录是否已经赋予过积分  1以外-否  1-是 */
     private String pointScalReady;
-    
+    /** 出发案内消息发送标记 0-未发送,1-已发送 */
+    private String messageSendAt;
     // 临时字段
     /** 商品类型*/
     private String typeName;

+ 12 - 9
ruoyi-admin/src/main/java/com/ruoyi/web/schedulTask/schedulTask.java

@@ -17,14 +17,14 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.linecorp.bot.client.LineMessagingClient;
-import com.linecorp.bot.model.PushMessage;
-import com.linecorp.bot.model.message.TextMessage;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.web.line.LineMessagingClient;
 import com.ruoyi.web.line.LinePay;
 import com.ruoyi.web.line.LinePayRefundAPOD;
 import com.ruoyi.web.line.PayApi;
+import com.ruoyi.web.line.PushMessage;
 import com.ruoyi.web.line.SendMessage;
+import com.ruoyi.web.line.TextMessage;
 import com.ruoyi.web.pcApi.domain.TCommodityCoupon;
 import com.ruoyi.web.pcApi.domain.TCommodityManage;
 import com.ruoyi.web.pcApi.domain.TCommoditySchedul;
@@ -62,9 +62,6 @@ public class schedulTask
     private ITCommodityManageService commodityManageService;
     @Autowired
     private ITOrderManageService orderManageService;
-
-    @Autowired
-    private LineMessagingClient lineMessagingClient;
     @Autowired
     MessageSource messages;
     @Autowired
@@ -83,6 +80,8 @@ public class schedulTask
     private ITCustomerDistributionRecordService customerDistributionRecordService;
     @Autowired
     private ITCustomerDistributionSetService customerDistributionSetService;
+    @Autowired
+    private LineMessagingClient lineMessagingClient;
     
     private static final SimpleDateFormat dateSdf = new SimpleDateFormat("yyyy-MM-dd");
 
@@ -162,13 +161,13 @@ public class schedulTask
                         	//line pay back
                             LinePayRefundAPOD resp = null;
                             if (orderManage.getOrderMoney().longValue() > 0) {
-                                resp = linePay.payRefund(orderManage.getTransactionId(), orderManage.getOrderMoney().longValue());
+                                resp = linePay.payRefund(orderManage.getDeptId(), orderManage.getTransactionId(), orderManage.getOrderMoney().longValue());
                             }
                             if (resp == null || "0000".equals(resp.returnCode)) {
                             	List<TOrderManage> lst = new ArrayList<TOrderManage>();
                             	lst.add(orderManage);
                                 //send message
-                            	lineMessagingClient.pushMessage(new PushMessage(orderManage.getPhone(),
+                            	lineMessagingClient.pushMessage(orderManage.getDeptId(), new PushMessage(orderManage.getPhone(),
                               			new TextMessage(SendMessage.getPayBackMessage(lst))));
                             }
                         }
@@ -230,7 +229,11 @@ public class schedulTask
         		    		  String.valueOf(orderManage.getAdultNum()), String.valueOf(orderManage.getChildNum())}, Locale.JAPAN
         		    );
         	
-        	lineMessagingClient.pushMessage(new PushMessage(orderManage.getPhone(), new TextMessage(msg)));
+        	lineMessagingClient.pushMessage(orderManage.getDeptId(), new PushMessage(orderManage.getPhone(), new TextMessage(msg)));
+        	
+        	orderManage.setMessageSendAt("1");
+        	
+        	orderManageService.updateTOrderManage(orderManage);
         }
     }
     

+ 3 - 8
ruoyi-admin/src/main/resources/application.yml

@@ -141,15 +141,10 @@ xss:
 
 #line pay
 line:
-  channelId: 1657699044
-  channelSecret: a83d9e950a065aab3866a69f7c92c69d
   password: PiswoFEo823DeiL
   payUrl: https://api-pay.line.me/v3/payments/request
   confirmUrl: https://api-pay.line.me/v3/payments/{0}/confirm
   refundUrl: https://api-pay.line.me/v3/payments/{0}/refund
-  callbankConfirmUrl: https://liff.line.me/1657344394-LBE9V9k9/linePayConfirm
-  callbankCancelUrl: https://liff.line.me/1657344394-LBE9V9k9/linePayCancel
-  bot:
-    channel-token: Hag8D2Wi00uYb+CVxJcFNemkJ6oODQyifF0HDHMOw6Yjkcqe1nw6JuA7M4w054Nwdf4olteEzukJpHcub4zxCuFa11iYIe4hGJe6z5VYVpqfteQK4qeplo6lDpxNef9sPwSE03hclYvhbW5emb2cRQdB04t89/1O/w1cDnyilFU=
-    channel-secret: f3a08536c678934e207c10f1355de9c6
-    handler.path: /callback
+  callbankConfirmUrl: https://liff.line.me/{0}/linePayConfirm
+  callbankCancelUrl: https://liff.line.me/{0}/linePayCancel
+  pullMsgUrl: https://api.line.me/v2/bot/message/push

+ 9 - 0
ruoyi-admin/src/main/resources/mapper/order/TOrderManageMapper.xml

@@ -39,6 +39,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="returnDate"    column="return_date"    />
         <result property="transactionId"    column="transaction_id"    />
         <result property="pointScalReady"    column="point_scal_ready"    />
+        <result property="messageSendAt"    column="message_send_at"    />
+        
     </resultMap>
 
     <sql id="selectTOrderManageVo">
@@ -66,6 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             a.remark,
             a.transaction_id,
             a.point_scal_ready,
+            a.message_send_at,
             b.commodity_name,
             c.type_name,
             a.del_flag,
@@ -102,6 +105,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderTotalId != null "> and a.order_total_id = #{orderTotalId}</if>
             <if test="transactionId != null">and transaction_id = #{transactionId}</if>
             <if test="pointScalReady != null">and point_scal_ready = #{pointScalReady}</if>
+            <if test="messageSendAt != null">and message_send_at = #{messageSendAt}</if>
             <if test="params.beginDate != null and params.beginDate != ''"><!-- 开始时间检索 -->
                 and date_format(a.create_time,'%y%m%d') &gt;= date_format(#{params.beginDate},'%y%m%d')
             </if>
@@ -130,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="orderTotalId != null "> and a.order_total_id = #{orderTotalId}</if>
         <if test="transactionId != null">and transaction_id = #{transactionId}</if>
         <if test="pointScalReady != null">and point_scal_ready = #{pointScalReady}</if>
+        <if test="messageSendAt != null">and message_send_at = #{messageSendAt}</if>
         <if test="params.beginDate != null and params.beginDate != ''"><!-- 开始时间检索 -->
             and date_format(a.create_time,'%y%m%d') &gt;= date_format(#{params.beginDate},'%y%m%d')
         </if>
@@ -171,6 +176,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="returnDate != null">return_date,</if>
             <if test="transactionId != null">transaction_id,</if>
             <if test="pointScalReady != null">point_scal_ready,</if>
+            <if test="messageSendAt != null">message_send_at,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="orderNo != null">#{orderNo},</if>
@@ -197,6 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="returnDate != null">#{returnDate},</if>
             <if test="transactionId != null">#{transactionId},</if>
             <if test="pointScalReady != null">#{pointScalReady},</if>
+            <if test="messageSendAt != null">#{messageSendAt},</if>
          </trim>
     </insert>
 
@@ -227,6 +234,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="returnDate != null">return_date = #{returnDate},</if>
             <if test="transactionId != null">transaction_id = #{transactionId},</if>
             <if test="pointScalReady != null">point_scal_ready = #{pointScalReady},</if>
+            <if test="messageSendAt != null">message_send_at = #{messageSendAt},</if>
         </trim>
         where id = #{id}
     </update>
@@ -420,6 +428,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 left join t_commodity_manage c on a.commodity_id = c.id
             where 
                 a.del_flag = '0' and b.del_flag = '0' and a.status = '1'
+                and a.message_send_at != '1'
                 and a.departure_date = #{departureDate}
     </select>
     

+ 6 - 2
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginCustomerManage.java

@@ -3,9 +3,12 @@ package com.ruoyi.common.core.domain.model;
 
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
-import lombok.*;
 
-import java.util.List;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
 
 /**
  * 客户信息管理对象 t_customer_manage
@@ -52,4 +55,5 @@ public class LoginCustomerManage extends BaseEntity
     @Excel(name = "昵称")
     private String nickName;
 
+    private String liffId;
 }