diff --git a/ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java b/ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java
new file mode 100644
index 00000000..24633f4b
--- /dev/null
+++ b/ghy-common/src/main/java/com/ghy/common/config/SmsConfig.java
@@ -0,0 +1,50 @@
+package com.ghy.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 容联云短信配置
+ * @author clunt
+ */
+@Component
+@ConfigurationProperties(prefix = "sms")
+public class SmsConfig {
+
+ private String url;
+ private String account;
+ private String appId;
+ private String token;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+}
diff --git a/ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java b/ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java
new file mode 100644
index 00000000..04516a92
--- /dev/null
+++ b/ghy-common/src/main/java/com/ghy/common/constant/SmsConstants.java
@@ -0,0 +1,18 @@
+package com.ghy.common.constant;
+
+/**
+ * 容联云短信配置
+ * @author clunt
+ */
+public class SmsConstants {
+
+ // 短信验证码通知模版
+ public static final String TEMPLATE_ID = "216263";
+
+ // 短信模版发送地址
+ public static final String TEMPLATE_URL = "https://app.cloopen.com:8883";
+
+ // 短信模版发送路径
+ public static final String TEMPLATE_PATH = "/2013-12-26/Accounts/{accountSid}/SMS/TemplateSMS?sig={SigParameter}";
+
+}
diff --git a/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java b/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java
index 9bbb996a..40605ec0 100644
--- a/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java
+++ b/ghy-common/src/main/java/com/ghy/common/enums/FinancialDetailType.java
@@ -11,7 +11,8 @@ public enum FinancialDetailType {
WORKER_FEE(1, "大师傅/店铺提成金额"),
PLATFORM_FEE(2, "平台提成金额"),
PLACE_FEE(3, "分销金额,可能存在多级"),
- RETURN_FEE(4, "退款金额");
+ RETURN_FEE(4, "退款金额"),
+ FINE_FEE(5, "超时罚金");
private final Integer code;
private final String desc;
diff --git a/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java b/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java
index cde14c6a..fd8105fb 100644
--- a/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java
+++ b/ghy-common/src/main/java/com/ghy/common/utils/http/HttpUtils.java
@@ -6,6 +6,8 @@ import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
@@ -120,6 +122,19 @@ public class HttpUtils
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param)
+ {
+ return sendPost(url, param, null);
+ }
+
+
+ /**
+ * 向指定 URL 发送POST方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendPost(String url, String param, Map
header)
{
PrintWriter out = null;
BufferedReader in = null;
@@ -135,6 +150,9 @@ public class HttpUtils
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("contentType", "utf-8");
+ if(header != null){
+ header.forEach(conn::setRequestProperty);
+ }
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
@@ -242,22 +260,27 @@ public class HttpUtils
return result;
}
- public static String sendSSLPost(String url, String param)
- {
+ public static String sendSSLPost(String url, String param){
+ return sendSSLPost(url, param, null);
+ }
+
+ public static String sendSSLPost(String url, String param, Map header){
StringBuilder result = new StringBuilder();
- String urlNameString = url + "?" + param;
try
{
- log.info("sendSSLPost - {}", urlNameString);
+ log.info("sendSSLPost - {}", url);
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
- URL console = new URL(urlNameString);
+ URL console = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("contentType", "utf-8");
+ if(header != null){
+ header.forEach(conn::setRequestProperty);
+ }
conn.setDoOutput(true);
conn.setDoInput(true);
@@ -271,7 +294,7 @@ public class HttpUtils
{
if (ret != null && !ret.trim().equals(""))
{
- result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
+ result.append(new String(ret.getBytes("utf-8"), "utf-8"));
}
}
log.info("recv - {}", result);
diff --git a/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java b/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java
index 55fed6be..86e8ce15 100644
--- a/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java
+++ b/ghy-framework/src/main/java/com/ghy/framework/config/ShiroConfig.java
@@ -288,6 +288,7 @@ public class ShiroConfig
filterChainDefinitionMap.put("/adapay/**", "anon");
filterChainDefinitionMap.put("/system/area/**", "anon");
filterChainDefinitionMap.put("/customer/address/**", "anon");
+ filterChainDefinitionMap.put("/jim/**", "anon");
filterChainDefinitionMap.put("/MP_verify_bRFuvYpyQ4WLr0on.txt", "anon");
// 对静态资源设置匿名访问
filterChainDefinitionMap.put("/favicon.ico**", "anon");
diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java
index c494f3b8..2630511f 100644
--- a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java
+++ b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsCategoryServiceImpl.java
@@ -74,7 +74,7 @@ public class GoodsCategoryServiceImpl implements GoodsCategoryService {
if (category == null) {
return false;
}
- return category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId());
+ return !category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId());
}
@Override
@@ -83,7 +83,7 @@ public class GoodsCategoryServiceImpl implements GoodsCategoryService {
if (category == null) {
return false;
}
- return category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId());
+ return !category.getGoodsCategoryId().equals(goodsCategory.getGoodsCategoryId());
}
@Override
diff --git a/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml b/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml
index c1e7262d..615de5ea 100644
--- a/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml
+++ b/ghy-goods/src/main/resources/mapper/goods/GoodsCategoryMapper.xml
@@ -56,6 +56,7 @@
goods_category_code = #{goodsCategoryCode},
goods_category_name = #{goodsCategoryName},
parent_category_id = #{parentCategoryId},
+ category_sort = #{categorySort},
level = #{level},
type = #{type},
remark = #{remark},
@@ -79,6 +80,7 @@
goods_category_code,
goods_category_name,
parent_category_id,
+ category_sort,
level,
type,
remark,
@@ -89,6 +91,7 @@
#{goodsCategoryCode},
#{goodsCategoryName},
#{parentCategoryId},
+ #{categorySort},
#{level},
#{type},
#{remark},
diff --git a/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java b/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java
index fcac9b07..399aff2b 100644
--- a/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java
+++ b/ghy-message/src/main/java/com/ghy/message/config/JimConfig.java
@@ -10,9 +10,8 @@ import org.springframework.context.annotation.Configuration;
* @author clunt
* 极光消息配置文件
*/
-//@Configuration
-//@ConfigurationProperties(prefix = "jim")
-@Data
+@Configuration
+@ConfigurationProperties(prefix = "jim")
public class JimConfig {
private String appKey;
@@ -21,9 +20,33 @@ public class JimConfig {
private String maxRetryTimes;
- @Bean
- public JMessageClient jMessageClient(){
- return new JMessageClient(appKey,masterSecret,maxRetryTimes);
+ public String getAppKey() {
+ return appKey;
}
+ public void setAppKey(String appKey) {
+ this.appKey = appKey;
+ }
+
+ public String getMasterSecret() {
+ return masterSecret;
+ }
+
+ public void setMasterSecret(String masterSecret) {
+ this.masterSecret = masterSecret;
+ }
+
+ public String getMaxRetryTimes() {
+ return maxRetryTimes;
+ }
+
+ public void setMaxRetryTimes(String maxRetryTimes) {
+ this.maxRetryTimes = maxRetryTimes;
+ }
+
+// @Bean
+// public JMessageClient jMessageClient(){
+// return new JMessageClient(appKey,masterSecret,maxRetryTimes);
+// }
+
}
diff --git a/ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java b/ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java
new file mode 100644
index 00000000..7b587bcd
--- /dev/null
+++ b/ghy-message/src/main/java/com/ghy/message/domain/JimRegisterInfo.java
@@ -0,0 +1,4 @@
+package com.ghy.message.domain;
+
+public class JimRegisterInfo {
+}
diff --git a/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java b/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java
index 795af115..b4691264 100644
--- a/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java
+++ b/ghy-message/src/main/java/com/ghy/message/domain/JimUser.java
@@ -10,6 +10,18 @@ import lombok.Data;
@Data
public class JimUser extends BaseEntity {
+ // 自增组件
+ private Long jimUserId;
+
+ // D101W7 系统编码
+ private String sysUser;
+
+ private String userName;
+
+ private String password;
+
+ private String appKey;
+
}
diff --git a/ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java b/ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java
new file mode 100644
index 00000000..e0a9e8a0
--- /dev/null
+++ b/ghy-message/src/main/java/com/ghy/message/mapper/JimUserMapper.java
@@ -0,0 +1,14 @@
+package com.ghy.message.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 极光推送用户mapper
+ * @author clunt
+ */
+@Mapper
+public interface JimUserMapper {
+
+
+
+}
diff --git a/ghy-message/src/main/java/com/ghy/message/service/JimUserService.java b/ghy-message/src/main/java/com/ghy/message/service/JimUserService.java
new file mode 100644
index 00000000..b7faeb37
--- /dev/null
+++ b/ghy-message/src/main/java/com/ghy/message/service/JimUserService.java
@@ -0,0 +1,12 @@
+package com.ghy.message.service;
+
+import com.ghy.message.domain.JimUser;
+
+public interface JimUserService {
+
+ /**
+ * 注册极光推送信息并入库记录
+ * */
+ int registerJimUser(JimUser jimUser) throws Exception;
+
+}
diff --git a/ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java b/ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java
new file mode 100644
index 00000000..dbc44ef1
--- /dev/null
+++ b/ghy-message/src/main/java/com/ghy/message/service/impl/JimUserServiceImpl.java
@@ -0,0 +1,36 @@
+package com.ghy.message.service.impl;
+
+import cn.jmessage.api.JMessageClient;
+import cn.jmessage.api.common.model.RegisterInfo;
+import com.ghy.message.config.JimConfig;
+import com.ghy.message.domain.JimUser;
+import com.ghy.message.service.JimUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 极光推送用户impl
+ * @author clunt
+ */
+@Slf4j
+@Service
+public class JimUserServiceImpl implements JimUserService {
+
+ @Resource
+ private JimConfig jimConfig;
+
+ @Override
+ public int registerJimUser(JimUser jimUser) throws Exception{
+ JMessageClient messageClient = new JMessageClient(jimConfig.getAppKey(),jimConfig.getMasterSecret());
+ RegisterInfo.Builder builder = new RegisterInfo.Builder();
+ builder.setUsername(jimUser.getUserName());
+ builder.setPassword(jimUser.getPassword());
+ RegisterInfo [] registerInfos = new RegisterInfo[1];
+ registerInfos[0] = builder.build();
+ String result = messageClient.registerUsers(registerInfos);
+ return 0;
+ }
+
+}
diff --git a/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java b/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java
index ee2243f6..1d482c97 100644
--- a/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java
+++ b/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java
@@ -1,6 +1,7 @@
package com.ghy.order.mapper;
import com.ghy.order.domain.OrderDetail;
+import com.ghy.order.domain.OrderMaster;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -79,4 +80,9 @@ public interface OrderDetailMapper {
* @param orderDetail 子订单
*/
int updateByOrderMasterId(OrderDetail orderDetail);
+
+ /**
+ * 查询指定状态的订单
+ */
+ List selectByStatus(List status);
}
diff --git a/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java b/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java
index 82867922..6f289668 100644
--- a/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java
+++ b/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java
@@ -72,4 +72,9 @@ public interface OrderMasterMapper {
* @return 0失败 1成功
*/
int updateStatus(@Param("orderMasterId") Long orderMasterId, @Param("orderStatus") int orderStatus);
+
+ /**
+ * 查询指定状态的订单
+ */
+ List selectByStatus(List status);
}
diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java
index 72ab7a8e..a4506fa3 100644
--- a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java
+++ b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java
@@ -1,6 +1,7 @@
package com.ghy.order.service;
import com.ghy.order.domain.OrderDetail;
+import com.ghy.order.domain.OrderMaster;
import java.util.List;
import java.util.Map;
@@ -92,4 +93,9 @@ public interface OrderDetailService {
* @param orderDetail 子订单
*/
void updateByOrderMasterId(OrderDetail orderDetail);
+
+ /**
+ * 查询指定状态的订单
+ */
+ List selectByStatus(List status);
}
diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java
index 3d435eaa..d0e8f363 100644
--- a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java
+++ b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java
@@ -99,4 +99,9 @@ public interface OrderMasterService {
* @param agree 0=不同意 1=同意
*/
void cancelAgree(Long orderMasterId, Integer agree);
+
+ /**
+ * 查询指定状态的订单
+ */
+ List selectByStatus(List status);
}
diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java
index 97561861..e6a3c416 100644
--- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java
+++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -82,6 +83,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
for (OrderDetail detail : orderDetailMapper.selectByOrderMasterId(detailInfo.getOrderMasterId())) {
if (detail.getOrderStatus() < orderStatus) {
flag = false;
+ break;
}
}
if (flag) {
@@ -262,4 +264,9 @@ public class OrderDetailServiceImpl implements OrderDetailService {
orderDetailMapper.updateByOrderMasterId(orderDetail);
}
+ @Override
+ public List selectByStatus(List status) {
+ Assert.isTrue(!CollectionUtils.isEmpty(status), "订单状态为空");
+ return orderDetailMapper.selectByStatus(status);
+ }
}
diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java
index fea63bae..43470ba2 100644
--- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java
+++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java
@@ -30,6 +30,7 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -164,7 +165,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
switch (financialDetail.getFinancialDetailType()) {
case 0:
// 上门师傅结单 要判断一下这个单是否已退款
- if (financialDetail.getPayStatus().equals(PayStatus.REFUND.getCode())) {
+ if (financialDetail.getPayStatus() < 2) {
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
}
@@ -193,6 +194,10 @@ public class OrderMasterServiceImpl implements OrderMasterService {
case 4:
// 退款
confirmAmt = confirmAmt.subtract(financialDetail.getPayMoney());
+ case 5:
+ // 订单超时罚金 归平台所有
+ memberMap.merge("0", financialDetail.getPayMoney(), BigDecimal::add);
+ break;
default:
break;
}
@@ -324,6 +329,12 @@ public class OrderMasterServiceImpl implements OrderMasterService {
}
}
+ @Override
+ public List selectByStatus(List status) {
+ Assert.isTrue(!CollectionUtils.isEmpty(status), "订单状态为空");
+ return orderMasterMapper.selectByStatus(status);
+ }
+
/**
* 主订单发起退款
*
diff --git a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml
index 19c05327..ff8fec5e 100644
--- a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml
+++ b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml
@@ -223,4 +223,12 @@
+
+
diff --git a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml
index 5883ef11..19b173e8 100644
--- a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml
+++ b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml
@@ -256,4 +256,12 @@
WHERE `code` = #{orderMasterCode}
+
+
diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java
index 36089407..839a14c8 100644
--- a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java
+++ b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java
@@ -3,6 +3,7 @@ package com.ghy.payment.domain;
import com.ghy.common.annotation.Excel;
import com.ghy.common.core.domain.BaseEntity;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
@@ -12,6 +13,7 @@ import java.util.Date;
* 财务细单(可能是师傅分佣后的细单关联,也可能是分佣账单,平台提成账单等类型)
*/
@Data
+@EqualsAndHashCode(callSuper = true)
public class FinancialDetail extends BaseEntity {
private static final long serialVersionUID = 1L;
@@ -46,14 +48,14 @@ public class FinancialDetail extends BaseEntity {
@Excel(name = "实付金额", cellType = Excel.ColumnType.STRING)
private BigDecimal payMoney;
- @Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成/4撤销支付或退款", cellType = Excel.ColumnType.NUMERIC)
+ @Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成/4撤销支付或退款/5超时罚金", cellType = Excel.ColumnType.NUMERIC)
private Integer financialDetailType;
/**
* 收款人ID
* 当财务子单类型是师傅转派时 收款人ID是师傅或徒弟的workerId
* 当财务子单类型是多级分销时 收款人ID是分销者的customerId
- * 当财务子单类型是平台抽成和退款时 无需填写收款人ID
+ * 当财务子单类型是4或5时 无需填写收款人ID
*/
@Excel(name = "收款人ID", cellType = Excel.ColumnType.NUMERIC)
private Long payeeId;
diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java b/ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java
new file mode 100644
index 00000000..edf3da58
--- /dev/null
+++ b/ghy-payment/src/main/java/com/ghy/payment/domain/OrderFineRecord.java
@@ -0,0 +1,33 @@
+package com.ghy.payment.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 订单扣款记录
+ *
+ * @author HH 2022/8/4
+ */
+@Data
+public class OrderFineRecord {
+
+ private Long id;
+
+ private Long orderDetailId;
+
+ private Integer fineType;
+
+ private Integer orderStatus;
+
+ private Date createTime;
+
+ public OrderFineRecord() {
+ }
+
+ public OrderFineRecord(Long orderDetailId, Integer fineType, Integer orderStatus) {
+ this.orderDetailId = orderDetailId;
+ this.fineType = fineType;
+ this.orderStatus = orderStatus;
+ }
+}
diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java
new file mode 100644
index 00000000..974b972a
--- /dev/null
+++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/OrderFineRecordMapper.java
@@ -0,0 +1,15 @@
+package com.ghy.payment.mapper;
+
+import com.ghy.payment.domain.OrderFineRecord;
+
+import java.util.List;
+
+/**
+ * 订单扣款记录
+ */
+public interface OrderFineRecordMapper {
+
+ List selectList(OrderFineRecord orderFineRecord);
+
+ int insert(OrderFineRecord orderFineRecord);
+}
diff --git a/ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml b/ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml
new file mode 100644
index 00000000..458255a7
--- /dev/null
+++ b/ghy-payment/src/main/resources/mapper/financial/OrderFineRecordMapper.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT id, order_detail_id, fine_type, order_status, create_time
+ FROM order_fine_record
+
+
+
+
+
+ INSERT INTO order_fine_record (order_detail_id, fine_type, order_status)
+ VALUES (#{orderDetailId}, #{fineType}, #{orderStatus})
+
+
\ No newline at end of file
diff --git a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java
index dea627d6..0dd622c2 100644
--- a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java
+++ b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java
@@ -1,35 +1,144 @@
package com.ghy.quartz.service.impl;
+import com.ghy.common.enums.FinancialDetailType;
+import com.ghy.common.enums.OrderStatus;
+import com.ghy.order.domain.OrderDetail;
+import com.ghy.order.domain.OrderMaster;
+import com.ghy.order.service.OrderDetailService;
import com.ghy.order.service.OrderMasterService;
-import com.ghy.payment.service.FinancialMasterService;
+import com.ghy.payment.domain.FinancialDetail;
+import com.ghy.payment.domain.OrderFineRecord;
+import com.ghy.payment.mapper.OrderFineRecordMapper;
+import com.ghy.payment.service.FinancialDetailService;
import com.ghy.quartz.service.OrderService;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.huifu.adapay.core.exception.BaseAdaPayException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
@Service
public class OrderServiceImpl implements OrderService {
- @Autowired
- private OrderMasterService orderMasterService;
+ private static final Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);
+ /**
+ * 一小时的毫秒数
+ */
+ private static final long HOUR_TIME_MILLIS = 60 * 60 * 1000L;
+ /**
+ * 超时罚金2元
+ */
+ private static final BigDecimal TIMEOUT_MONEY = BigDecimal.valueOf(2);
- @Autowired
- private FinancialMasterService financialMasterService;
+ /**
+ * 需要超时扣款的订单状态
+ */
+ @Value("${order.timeout.status:-4,-3,-2,1,2,3}")
+ private List timeoutOrderStatus;
+
+ @Resource
+ private ThreadPoolTaskExecutor executor;
+ @Resource
+ private OrderMasterService orderMasterService;
+ @Resource
+ private OrderDetailService orderDetailService;
+ @Resource
+ private OrderFineRecordMapper orderFineRecordMapper;
+ @Resource
+ private FinancialDetailService financialDetailService;
@Override
public void overTimeOrder(String orderStatus) {
- // 查询符合超时的单
+ LocalDateTime now = LocalDateTime.now();
+ int nowDay = now.getDayOfMonth();
+ int nowHour = now.getHour();
+ if (nowHour > 17 || nowHour < 9) {
+ // 如果处于休息时间 定时任务不执行
+ return;
+ }
- // 更新对应单的状态
+ // 查询符合超时的单
+ List orders = orderDetailService.selectByStatus(timeoutOrderStatus);
+ for (OrderDetail order : orders) {
+ Date updateTime = order.getUpdateTime();
+ Calendar instance = Calendar.getInstance();
+ instance.setTime(updateTime);
+ if (instance.get(Calendar.DAY_OF_MONTH) == nowDay) {
+ // 如果订单更新的时间是今天
+ if (System.currentTimeMillis() - updateTime.getTime() > HOUR_TIME_MILLIS * 4) {
+ // 并且距离上一次更新时间已经超过4h 则判定超时
+ executor.execute(() -> orderTimeout(order));
+ }
+ } else {
+ // 如果订单更新的时间不是今天
+ if (System.currentTimeMillis() - updateTime.getTime() > HOUR_TIME_MILLIS * 19) {
+ // 并且距离上一次更新时间已经超过15h 则判定超时
+ executor.execute(() -> orderTimeout(order));
+ }
+ }
+ }
+
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void orderTimeout(OrderDetail order) {
+ // 查询扣款记录 如果已经扣过了 就不处理了
+ OrderFineRecord orderFineRecord = new OrderFineRecord(order.getId(), 1, order.getOrderStatus());
+ List records = orderFineRecordMapper.selectList(orderFineRecord);
+ if (!CollectionUtils.isEmpty(records)) {
+ return;
+ }
+
+ // 保存一条扣款记录
+ orderFineRecordMapper.insert(orderFineRecord);
+
+ // 从子订单对应的财务单里扣除2元
+ FinancialDetail orderFinancial = financialDetailService.selectByOrderDetailId(order.getId());
+ orderFinancial.setPayMoney(orderFinancial.getPayMoney().subtract(TIMEOUT_MONEY));
+ financialDetailService.updateFinancialDetail(orderFinancial);
// 生成对应的扣款明细
+ FinancialDetail fineFinancial = new FinancialDetail();
+ fineFinancial.setDeptId(orderFinancial.getDeptId());
+ fineFinancial.setCode(financialDetailService.createCode());
+ fineFinancial.setFinancialMasterId(orderFinancial.getFinancialMasterId());
+ fineFinancial.setFinancialMasterCode(orderFinancial.getFinancialMasterCode());
+ fineFinancial.setPayMoney(TIMEOUT_MONEY);
+ fineFinancial.setFinancialDetailType(FinancialDetailType.FINE_FEE.getCode());
+ financialDetailService.insertFinancialDetail(fineFinancial);
}
+
@Override
public void finishOrder() {
- // 查询符合自动确认的订单
-
- // 更新符合自动确认订单的状态
-
- // 调用分账动作
+ OrderMaster orderMaster = new OrderMaster();
+ orderMaster.setOrderStatus(OrderStatus.FINISH_CHECK.code());
+ List orders = orderMasterService.selectOrderMasterList(orderMaster);
+ long now = System.currentTimeMillis();
+ long day14ago = now - (14 * 24 * 60 * 60 * 1000L);
+ for (OrderMaster order : orders) {
+ // 查询符合自动确认的订单
+ if (day14ago > order.getUpdateTime().getTime()) {
+ logger.info("订单自动完成[id={}, code={}]", order.getId(), order.getCode());
+ try {
+ // 完单流程(分账与提现)
+ orderMasterService.finish(order.getId());
+ // 修改订单状态
+ orderMasterService.updateStatus(order.getId(), OrderStatus.FINISH.code());
+ } catch (BaseAdaPayException e) {
+ logger.error("订单自动完成[id={}, code={}]出错", order.getId(), order.getCode(), e);
+ }
+ }
+ }
}
}
diff --git a/pom.xml b/pom.xml
index 929f5f9f..2698500c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -313,11 +313,11 @@
-
-
-
-
-
+
+ com.ghy
+ ghy-message
+ ${ghy.version}
+
@@ -347,7 +347,7 @@
ghy-common
ghy-custom
ghy-worker
-
+ ghy-message
pom