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 c27663a7..52dfb688 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 @@ -11,6 +11,8 @@ import com.ghy.payment.domain.OrderTimeoutRecord; import com.ghy.payment.mapper.OrderFineRecordMapper; import com.ghy.payment.service.FinancialDetailService; import com.ghy.quartz.service.OrderService; +import com.ghy.system.domain.SysDeptConfig; +import com.ghy.system.service.ISysDeptConfigService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -31,14 +33,6 @@ import java.util.stream.Collectors; public class OrderServiceImpl implements OrderService { 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); /** * 需要超时扣款的订单状态 @@ -56,6 +50,8 @@ public class OrderServiceImpl implements OrderService { private OrderFineRecordMapper orderFineRecordMapper; @Resource private FinancialDetailService financialDetailService; + @Resource + private ISysDeptConfigService sysDeptConfigService; @Override public void overTimeOrder(String orderStatus) { @@ -74,7 +70,7 @@ public class OrderServiceImpl implements OrderService { } } else if (timeoutOrderStatus.contains(order.getOrderStatus())) { // 其它状态用update_time判断超时 30min超时 4h扣款 - if (order.getUpdateTime().before(fourHour)) { + if (fourHour.after(order.getUpdateTime())) { executor.execute(() -> orderTimeout(order, true)); } else if (order.getUpdateTime().before(halfHour)) { executor.execute(() -> orderTimeout(order, false)); @@ -115,10 +111,35 @@ public class OrderServiceImpl implements OrderService { record.setFineStatus(1); orderFineRecordMapper.update(record); + FinancialDetail orderFinancial = financialDetailService.selectByOrderDetailId(order.getId()); + SysDeptConfig deptConfig = sysDeptConfigService.selectByDeptId(order.getDeptId()); + BigDecimal timeoutMoney = deptConfig.getGoingOutTime(); + // 如果扣款额为null或<0 + if (timeoutMoney == null || BigDecimal.ZERO.compareTo(timeoutMoney) > 0) { + timeoutMoney = BigDecimal.ZERO; + } + BigDecimal timeoutRate = deptConfig.getGoingOutTimeRate(); + // 如果扣款比例 为null 或 <0 或 >1.00 + if (timeoutRate == null || BigDecimal.ZERO.compareTo(timeoutRate) > 0 || BigDecimal.ONE.compareTo(timeoutRate) < 0) { + timeoutRate = BigDecimal.ZERO; + } + timeoutMoney = orderFinancial.getPayMoney().multiply(timeoutRate).add(timeoutMoney); + if (BigDecimal.ZERO.compareTo(timeoutMoney) == 0) { + // 如果罚金=0时 无需扣款 + logger.info("订单[ID={}]超时无需扣款 GoingOutTime={}, GoingOutTimeRate={}", order.getId(), + deptConfig.getGoingOutTime(), deptConfig.getGoingOutTimeRate()); + return; + } + if (timeoutMoney.compareTo(orderFinancial.getPayMoney()) > 0) { + // 如果罚金大于本单金额的情况 + logger.warn("订单[ID={}]超时罚金[{}]大于订单金额[{}]!!! GoingOutTime={}, GoingOutTimeRate={}", order.getId(), + timeoutMoney, orderFinancial.getPayMoney(), deptConfig.getGoingOutTime(), deptConfig.getGoingOutTimeRate()); + timeoutMoney = orderFinancial.getPayMoney(); + } + //下面是扣款逻辑 // 从子订单对应的财务单里扣除2元 - FinancialDetail orderFinancial = financialDetailService.selectByOrderDetailId(order.getId()); - orderFinancial.setPayMoney(orderFinancial.getPayMoney().subtract(TIMEOUT_MONEY)); + orderFinancial.setPayMoney(orderFinancial.getPayMoney().subtract(timeoutMoney)); financialDetailService.updateFinancialDetail(orderFinancial); // 生成对应的扣款明细 @@ -127,7 +148,7 @@ public class OrderServiceImpl implements OrderService { fineFinancial.setCode(financialDetailService.createCode()); fineFinancial.setFinancialMasterId(orderFinancial.getFinancialMasterId()); fineFinancial.setFinancialMasterCode(orderFinancial.getFinancialMasterCode()); - fineFinancial.setPayMoney(TIMEOUT_MONEY); + fineFinancial.setPayMoney(timeoutMoney); fineFinancial.setFinancialDetailType(FinancialDetailType.FINE_FEE.getCode()); financialDetailService.insertFinancialDetail(fineFinancial); } diff --git a/ghy-system/src/main/java/com/ghy/system/domain/SysDeptConfig.java b/ghy-system/src/main/java/com/ghy/system/domain/SysDeptConfig.java index 4b0082db..c48f95f6 100644 --- a/ghy-system/src/main/java/com/ghy/system/domain/SysDeptConfig.java +++ b/ghy-system/src/main/java/com/ghy/system/domain/SysDeptConfig.java @@ -64,6 +64,9 @@ public class SysDeptConfig extends BaseEntity { @Excel(name = "进行超时罚金", cellType = Excel.ColumnType.NUMERIC) private BigDecimal goingOutTime; + @Excel(name = "进行超时罚金比例", cellType = Excel.ColumnType.NUMERIC) + private BigDecimal goingOutTimeRate; + @Excel(name = "金牌服务罚金倍数", cellType = Excel.ColumnType.NUMERIC) private BigDecimal goldenServer; diff --git a/ghy-system/src/main/java/com/ghy/system/mapper/SysDeptConfigMapper.java b/ghy-system/src/main/java/com/ghy/system/mapper/SysDeptConfigMapper.java index 32bbd631..3f6a5a19 100644 --- a/ghy-system/src/main/java/com/ghy/system/mapper/SysDeptConfigMapper.java +++ b/ghy-system/src/main/java/com/ghy/system/mapper/SysDeptConfigMapper.java @@ -15,7 +15,7 @@ public interface SysDeptConfigMapper { * @param deptId 部门id * @return 部门配置 */ - public SysDeptConfig selectByDeptId(Long deptId); + SysDeptConfig selectByDeptId(Long deptId); /** * 获取所有商户的配置 @@ -28,7 +28,7 @@ public interface SysDeptConfigMapper { * @param sysDeptConfigId 分公司配置主键 * @return 分公司配置 */ - public SysDeptConfig selectSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); + SysDeptConfig selectSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); /** * 查询分公司配置列表 @@ -36,7 +36,7 @@ public interface SysDeptConfigMapper { * @param sysDeptConfig 分公司配置 * @return 分公司配置集合 */ - public List selectSysDeptConfigList(SysDeptConfig sysDeptConfig); + List selectSysDeptConfigList(SysDeptConfig sysDeptConfig); /** * 新增分公司配置 @@ -44,7 +44,7 @@ public interface SysDeptConfigMapper { * @param sysDeptConfig 分公司配置 * @return 结果 */ - public int insertSysDeptConfig(SysDeptConfig sysDeptConfig); + int insertSysDeptConfig(SysDeptConfig sysDeptConfig); /** * 修改分公司配置 @@ -52,7 +52,7 @@ public interface SysDeptConfigMapper { * @param sysDeptConfig 分公司配置 * @return 结果 */ - public int updateSysDeptConfig(SysDeptConfig sysDeptConfig); + int updateSysDeptConfig(SysDeptConfig sysDeptConfig); /** * 删除分公司配置 @@ -60,7 +60,7 @@ public interface SysDeptConfigMapper { * @param sysDeptConfigId 分公司配置主键 * @return 结果 */ - public int deleteSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); + int deleteSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); /** * 批量删除分公司配置 @@ -68,5 +68,5 @@ public interface SysDeptConfigMapper { * @param sysDeptConfigIds 需要删除的数据主键集合 * @return 结果 */ - public int deleteSysDeptConfigBySysDeptConfigIds(String[] sysDeptConfigIds); + int deleteSysDeptConfigBySysDeptConfigIds(String[] sysDeptConfigIds); } diff --git a/ghy-system/src/main/java/com/ghy/system/service/ISysDeptConfigService.java b/ghy-system/src/main/java/com/ghy/system/service/ISysDeptConfigService.java index b5cf63e1..c265dc4d 100644 --- a/ghy-system/src/main/java/com/ghy/system/service/ISysDeptConfigService.java +++ b/ghy-system/src/main/java/com/ghy/system/service/ISysDeptConfigService.java @@ -14,7 +14,7 @@ public interface ISysDeptConfigService { * @param deptId 当前登陆用户的部门id * @return 部门配置 */ - public SysDeptConfig selectByDeptId(Long deptId); + SysDeptConfig selectByDeptId(Long deptId); /** * 获取所有商户的配置 @@ -27,7 +27,7 @@ public interface ISysDeptConfigService { * @param sysDeptConfigId 分公司配置主键 * @return 分公司配置 */ - public SysDeptConfig selectSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); + SysDeptConfig selectSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); /** * 查询分公司配置列表 @@ -35,7 +35,7 @@ public interface ISysDeptConfigService { * @param sysDeptConfig 分公司配置 * @return 分公司配置集合 */ - public List selectSysDeptConfigList(SysDeptConfig sysDeptConfig); + List selectSysDeptConfigList(SysDeptConfig sysDeptConfig); /** * 新增分公司配置 @@ -43,7 +43,7 @@ public interface ISysDeptConfigService { * @param sysDeptConfig 分公司配置 * @return 结果 */ - public int insertSysDeptConfig(SysDeptConfig sysDeptConfig); + int insertSysDeptConfig(SysDeptConfig sysDeptConfig); /** * 修改分公司配置 @@ -51,7 +51,7 @@ public interface ISysDeptConfigService { * @param sysDeptConfig 分公司配置 * @return 结果 */ - public int updateSysDeptConfig(SysDeptConfig sysDeptConfig); + int updateSysDeptConfig(SysDeptConfig sysDeptConfig); /** * 批量删除分公司配置 @@ -59,7 +59,7 @@ public interface ISysDeptConfigService { * @param sysDeptConfigIds 需要删除的分公司配置主键集合 * @return 结果 */ - public int deleteSysDeptConfigBySysDeptConfigIds(String sysDeptConfigIds); + int deleteSysDeptConfigBySysDeptConfigIds(String sysDeptConfigIds); /** * 删除分公司配置信息 @@ -67,6 +67,6 @@ public interface ISysDeptConfigService { * @param sysDeptConfigId 分公司配置主键 * @return 结果 */ - public int deleteSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); + int deleteSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId); } diff --git a/ghy-system/src/main/java/com/ghy/system/service/impl/SysDeptConfigServiceImpl.java b/ghy-system/src/main/java/com/ghy/system/service/impl/SysDeptConfigServiceImpl.java index c7964ea4..c531687c 100644 --- a/ghy-system/src/main/java/com/ghy/system/service/impl/SysDeptConfigServiceImpl.java +++ b/ghy-system/src/main/java/com/ghy/system/service/impl/SysDeptConfigServiceImpl.java @@ -1,10 +1,7 @@ package com.ghy.system.service.impl; -import com.ghy.common.core.domain.entity.SysDept; import com.ghy.common.core.text.Convert; -import com.ghy.common.exception.ServiceException; import com.ghy.common.utils.DateUtils; -import com.ghy.common.utils.StringUtils; import com.ghy.system.domain.SysDeptConfig; import com.ghy.system.mapper.SysDeptConfigMapper; import com.ghy.system.mapper.SysDeptMapper; @@ -44,8 +41,7 @@ public class SysDeptConfigServiceImpl implements ISysDeptConfigService { * @return 分公司配置 */ @Override - public SysDeptConfig selectSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId) - { + public SysDeptConfig selectSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId) { return sysDeptConfigMapper.selectSysDeptConfigBySysDeptConfigId(sysDeptConfigId); } @@ -56,8 +52,7 @@ public class SysDeptConfigServiceImpl implements ISysDeptConfigService { * @return 分公司配置 */ @Override - public List selectSysDeptConfigList(SysDeptConfig sysDeptConfig) - { + public List selectSysDeptConfigList(SysDeptConfig sysDeptConfig) { return sysDeptConfigMapper.selectSysDeptConfigList(sysDeptConfig); } @@ -68,8 +63,7 @@ public class SysDeptConfigServiceImpl implements ISysDeptConfigService { * @return 结果 */ @Override - public int insertSysDeptConfig(SysDeptConfig sysDeptConfig) - { + public int insertSysDeptConfig(SysDeptConfig sysDeptConfig) { sysDeptConfig.setCreateTime(DateUtils.getNowDate()); return sysDeptConfigMapper.insertSysDeptConfig(sysDeptConfig); } @@ -81,8 +75,7 @@ public class SysDeptConfigServiceImpl implements ISysDeptConfigService { * @return 结果 */ @Override - public int updateSysDeptConfig(SysDeptConfig sysDeptConfig) - { + public int updateSysDeptConfig(SysDeptConfig sysDeptConfig) { sysDeptConfig.setUpdateTime(DateUtils.getNowDate()); return sysDeptConfigMapper.updateSysDeptConfig(sysDeptConfig); } @@ -94,8 +87,7 @@ public class SysDeptConfigServiceImpl implements ISysDeptConfigService { * @return 结果 */ @Override - public int deleteSysDeptConfigBySysDeptConfigIds(String sysDeptConfigIds) - { + public int deleteSysDeptConfigBySysDeptConfigIds(String sysDeptConfigIds) { return sysDeptConfigMapper.deleteSysDeptConfigBySysDeptConfigIds(Convert.toStrArray(sysDeptConfigIds)); } @@ -106,8 +98,7 @@ public class SysDeptConfigServiceImpl implements ISysDeptConfigService { * @return 结果 */ @Override - public int deleteSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId) - { + public int deleteSysDeptConfigBySysDeptConfigId(Long sysDeptConfigId) { return sysDeptConfigMapper.deleteSysDeptConfigBySysDeptConfigId(sysDeptConfigId); } diff --git a/ghy-system/src/main/resources/mapper/system/SysDeptConfigMapper.xml b/ghy-system/src/main/resources/mapper/system/SysDeptConfigMapper.xml index 33bd4d51..bb696012 100644 --- a/ghy-system/src/main/resources/mapper/system/SysDeptConfigMapper.xml +++ b/ghy-system/src/main/resources/mapper/system/SysDeptConfigMapper.xml @@ -21,6 +21,7 @@ + @@ -42,7 +43,11 @@ select - sys_dept_config_id, dept_id, banner_url, single_money, single_order_pay, single_order_no_pay, area_money, area_order_pay, area_order_no_pay, city_money, city_order_pay, city_order_no_pay, worker_rate, phone, plain_out_time, go_out_time, going_out_time, golden_server, month_rent, adapay_app_id, adapay_api_key, adapay_mock_key, adapay_rsa_private_key, adapay_max_retry_times, wx_app_id, wx_secret, serv_wx_app_id, serv_wx_secret, take_rate, create_by, create_time, update_by, update_time, remark + sys_dept_config_id, dept_id, banner_url, single_money, single_order_pay, single_order_no_pay, area_money, + area_order_pay, area_order_no_pay, city_money, city_order_pay, city_order_no_pay, worker_rate, phone, + plain_out_time, go_out_time, going_out_time, going_out_time_rate, golden_server, month_rent, adapay_app_id, + adapay_api_key, adapay_mock_key, adapay_rsa_private_key, adapay_max_retry_times, wx_app_id, wx_secret, + serv_wx_app_id, serv_wx_secret, take_rate, create_by, create_time, update_by, update_time, remark from sys_dept_config @@ -94,6 +99,7 @@ plain_out_time, go_out_time, going_out_time, + going_out_time_rate, golden_server, month_rent, adapay_app_id, @@ -129,6 +135,7 @@ #{plainOutTime}, #{goOutTime}, #{goingOutTime}, + #{goingOutTimeRate}, #{goldenServer}, #{monthRent}, #{adapayAppId}, @@ -168,6 +175,7 @@ plain_out_time = #{plainOutTime}, go_out_time = #{goOutTime}, going_out_time = #{goingOutTime}, + going_out_time_rate = #{goingOutTimeRate}, golden_server = #{goldenServer}, month_rent = #{monthRent}, adapay_app_id = #{adapayAppId},