Merge branch 'refundList' into develop

# Conflicts:
#	src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailAppService.java
#	src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailAppServiceImp.java
master
kira 6 years ago
commit 9e0ec85b81

@ -151,4 +151,7 @@ public interface RetailAppService {
JSONObject sendVerifyEmail(JSONObject device); JSONObject sendVerifyEmail(JSONObject device);
void openimCheck(JSONObject device); void openimCheck(JSONObject device);
JSONObject getRefunds(JSONObject device, AppQueryBean appQueryBean);
} }

@ -38,6 +38,7 @@ import au.com.royalpay.payment.manage.signin.core.SignInAccountService;
import au.com.royalpay.payment.manage.signin.core.impls.SignInAccountServiceImpl; import au.com.royalpay.payment.manage.signin.core.impls.SignInAccountServiceImpl;
import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery; import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery;
import au.com.royalpay.payment.manage.tradelog.core.TradeLogService; import au.com.royalpay.payment.manage.tradelog.core.TradeLogService;
import au.com.royalpay.payment.manage.tradelog.refund.RefundService;
import au.com.royalpay.payment.tools.cms.RoyalPayCMSSupport; import au.com.royalpay.payment.tools.cms.RoyalPayCMSSupport;
import au.com.royalpay.payment.tools.device.DeviceSupport; import au.com.royalpay.payment.tools.device.DeviceSupport;
import au.com.royalpay.payment.tools.device.message.AppMessage; import au.com.royalpay.payment.tools.device.message.AppMessage;
@ -164,6 +165,8 @@ public class RetailAppServiceImp implements RetailAppService {
@Resource @Resource
private ClientMapper clientMapper; private ClientMapper clientMapper;
@Resource @Resource
private RefundService refundService;
@Resource
private ClientModifySupport clientModifySupport; private ClientModifySupport clientModifySupport;
@Resource @Resource
private ClearingLogMapper clearingLogMapper; private ClearingLogMapper clearingLogMapper;
@ -332,11 +335,11 @@ public class RetailAppServiceImp implements RetailAppService {
} }
tradeLogQuery.setClient_ids(appQueryBean.getApp_client_ids().split(",")); tradeLogQuery.setClient_ids(appQueryBean.getApp_client_ids().split(","));
JSONObject client = clientManager.getClientInfo(Integer.parseInt(tradeLogQuery.getClient_ids()[0])); JSONObject client = clientManager.getClientInfo(Integer.parseInt(tradeLogQuery.getClient_ids()[0]));
if(client==null){ if (client == null) {
throw new NotFoundException("Client Not Exists"); throw new NotFoundException("Client Not Exists");
} }
device.put("client_moniker", client.getString("client_moniker")); device.put("client_moniker", client.getString("client_moniker"));
device.put("client",client); device.put("client", client);
tradeLogService.exportTransFlow(tradeLogQuery, device, httpResponse); tradeLogService.exportTransFlow(tradeLogQuery, device, httpResponse);
} }
@ -419,6 +422,16 @@ public class RetailAppServiceImp implements RetailAppService {
customerServiceService.checkAndSave(account); customerServiceService.checkAndSave(account);
} }
@Override
public JSONObject getRefunds(JSONObject device, AppQueryBean appQueryBean) {
JSONObject appParam = appQueryBean.toParams();
JSONObject param = new JSONObject();
param.put("client_id",device.getIntValue("client_id"));
param.put("start_time",appParam.getDate("begin"));
param.put("end_time",appParam.getDate("end"));
return refundService.listUnionAllApply(param, new PageBounds(appQueryBean.getPage(), appQueryBean.getLimit()));
}
@Override @Override
public void updateClient(JSONObject device, AppClientBean appClientBean) { public void updateClient(JSONObject device, AppClientBean appClientBean) {
String clientType = device.getString("client_type"); String clientType = device.getString("client_type");
@ -563,11 +576,11 @@ public class RetailAppServiceImp implements RetailAppService {
JSONObject result = PageListUtils.buildPageListResult(logs); JSONObject result = PageListUtils.buildPageListResult(logs);
if (appQueryBean.getPage() == 1) { if (appQueryBean.getPage() == 1) {
if (!logs.isEmpty() && logs.size() > 0) { if (!logs.isEmpty() && logs.size() > 0) {
JSONObject clearingLog = clearingLogMapper.findById(logs.get(0).getIntValue("clearing_id")); JSONObject clearingLog = clearingLogMapper.findById(logs.get(0).getIntValue("clearing_id"));
if(clearingLog.getBoolean("editable")){ if (clearingLog.getBoolean("editable")) {
result.put("padding", true); result.put("padding", true);
logs.get(0).put("padding",true); logs.get(0).put("padding", true);
} }
} }
} }
return result; return result;
@ -1169,7 +1182,7 @@ public class RetailAppServiceImp implements RetailAppService {
JSONObject unReadParams = new JSONObject(); JSONObject unReadParams = new JSONObject();
unReadParams.put("client_id", client_id); unReadParams.put("client_id", client_id);
unReadParams.put("status", 0); unReadParams.put("status", 0);
unReadParams.put("is_to_app",1); unReadParams.put("is_to_app", 1);
int counts = noticePartnerMapper.countNoticePartner(unReadParams); int counts = noticePartnerMapper.countNoticePartner(unReadParams);
notice.put("unReadCounts", counts); notice.put("unReadCounts", counts);
notice.put("type", "notice"); notice.put("type", "notice");
@ -1214,7 +1227,7 @@ public class RetailAppServiceImp implements RetailAppService {
String clientType = device.getString("client_type"); String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType); deviceSupport.findRegister(clientType);
JSONObject bankInfo = clientManager.getBankAccountByClientId(device.getIntValue("client_id")); JSONObject bankInfo = clientManager.getBankAccountByClientId(device.getIntValue("client_id"));
bankInfo.put("account_no","***"+ StringUtils.substring(bankInfo.getString("account_no"), -4)); bankInfo.put("account_no", "***" + StringUtils.substring(bankInfo.getString("account_no"), -4));
return bankInfo; return bankInfo;
} }
@ -1305,7 +1318,7 @@ public class RetailAppServiceImp implements RetailAppService {
public JSONObject listDailyTransactions(String dateStr, String timezone, boolean thisDevOnly, JSONObject device, String app_client_ids) { public JSONObject listDailyTransactions(String dateStr, String timezone, boolean thisDevOnly, JSONObject device, String app_client_ids) {
try { try {
JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id")); JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id"));
if(client==null){ if (client == null) {
return null; return null;
} }
timezone = client.getString("timezone"); timezone = client.getString("timezone");

@ -109,6 +109,10 @@ public class RetailAppController {
public JSONObject getTradeCommonData(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) { public JSONObject getTradeCommonData(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) {
return retailAppService.getTradeCommonDate(device, appQueryBean); return retailAppService.getTradeCommonDate(device, appQueryBean);
} }
@RequestMapping(value = "/trade/refund", method = RequestMethod.GET)
public JSONObject getRefunds(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) {
return retailAppService.getRefunds(device, appQueryBean);
}
@RequestMapping(value = "/trade_common_new", method = RequestMethod.GET) @RequestMapping(value = "/trade_common_new", method = RequestMethod.GET)
public JSONObject getTradeCommonDataNew(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) { public JSONObject getTradeCommonDataNew(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) {

@ -1,16 +1,19 @@
package au.com.royalpay.payment.manage.mappers.payment; package au.com.royalpay.payment.manage.mappers.payment;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect; import cn.yixblog.support.mybatis.autosql.annotations.AdvanceSelect;
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
import cn.yixblog.support.mybatis.autosql.annotations.SqlType; import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/** /**
* Created by yixian on 2016-06-25. * Created by yixian on 2016-06-25.
@ -55,4 +58,7 @@ public interface RefundMapper {
List<JSONObject> listRefundDate(@Param("begin") Date begin, @Param("end") Date end); List<JSONObject> listRefundDate(@Param("begin") Date begin, @Param("end") Date end);
List<JSONObject> listClientRefund(JSONObject param); List<JSONObject> listClientRefund(JSONObject param);
PageList<JSONObject> listUnionAllApply(JSONObject params, PageBounds pagination);
} }

@ -1,7 +1,10 @@
package au.com.royalpay.payment.manage.tradelog.refund; package au.com.royalpay.payment.manage.tradelog.refund;
import au.com.royalpay.payment.manage.analysis.beans.RefundReviewBean; import au.com.royalpay.payment.manage.analysis.beans.RefundReviewBean;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -44,4 +47,6 @@ public interface RefundService {
JSONObject findReviewOrder(String reviewId); JSONObject findReviewOrder(String reviewId);
JSONObject checkRefundAuditFlag(); JSONObject checkRefundAuditFlag();
JSONObject listUnionAllApply(JSONObject params,PageBounds pagination);
} }

@ -87,7 +87,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
throw new RefundExistException(); throw new RefundExistException();
} }
if (apply.isEmpty()) { if (apply.isEmpty()) {
order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")).subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount"))
.subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue());
return order; return order;
} else { } else {
if (account != null) { if (account != null) {
@ -118,7 +119,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
if (undoRefundOrder != null) { if (undoRefundOrder != null) {
throw new BadRequestException("该笔订单有退款正在处理,请稍后再试!"); throw new BadRequestException("该笔订单有退款正在处理,请稍后再试!");
} }
order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")).subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); order.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount"))
.subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue());
return order; return order;
} }
@ -143,12 +145,13 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
int clientId = order.getIntValue("client_id"); int clientId = order.getIntValue("client_id");
String currency = order.getString("currency"); String currency = order.getString("currency");
//增加角色审核 // 增加角色审核
JSONObject client = clientManager.getClientInfo(clientId); JSONObject client = clientManager.getClientInfo(clientId);
Assert.notNull(client, "client not exists"); Assert.notNull(client, "client not exists");
JSONObject clientConfig = clientConfigService.find(clientId); JSONObject clientConfig = clientConfigService.find(clientId);
OperatorType type = account != null ? OperatorType.PARTNER : OperatorType.MANAGER; OperatorType type = account != null ? OperatorType.PARTNER : OperatorType.MANAGER;
boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(account.getIntValue("role")) == PartnerRole.CASHIER && clientConfig.getBooleanValue("enable_refund_auth"); boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(account.getIntValue("role")) == PartnerRole.CASHIER
&& clientConfig.getBooleanValue("enable_refund_auth");
logger.debug("applyer type=" + type + "; require audit=" + requireAudit); logger.debug("applyer type=" + type + "; require audit=" + requireAudit);
paymentApi.clientRefundBalanceCheck(clientId, orderId, currency, feeAmount); paymentApi.clientRefundBalanceCheck(clientId, orderId, currency, feeAmount);
@ -189,9 +192,9 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
BigDecimal realAmount = original ? fee : CurrencyAmountUtils.toAmount(fee, order.getString("currency")); BigDecimal realAmount = original ? fee : CurrencyAmountUtils.toAmount(fee, order.getString("currency"));
JSONObject refundConfig = checkRefundAuditFlag(); JSONObject refundConfig = checkRefundAuditFlag();
if (partnerAccount!=null && refundConfig != null && refundConfig.size() > 0 && refundConfig.getBoolean("refundAudit")) { if (partnerAccount != null && refundConfig != null && refundConfig.size() > 0 && refundConfig.getBoolean("refundAudit")) {
if (realAmount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) > 0) { if (realAmount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) > 0) {
//订单需要审核 // 订单需要审核
boolean casherRefund = reviewNewRefundOrder(orderId, realAmount, remark, partnerAccount, manager); boolean casherRefund = reviewNewRefundOrder(orderId, realAmount, remark, partnerAccount, manager);
if (casherRefund) { if (casherRefund) {
return executeRefund(orderId, realAmount, remark, partnerAccount, manager, order, client); return executeRefund(orderId, realAmount, remark, partnerAccount, manager, order, client);
@ -204,7 +207,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
} }
private JSONObject executeRefund(String orderId, BigDecimal amount, String remark, JSONObject partnerAccount, JSONObject manager, JSONObject order, JSONObject client) { private JSONObject executeRefund(String orderId, BigDecimal amount, String remark, JSONObject partnerAccount, JSONObject manager, JSONObject order,
JSONObject client) {
checkOrderUseCustomerCoupon(order, amount); checkOrderUseCustomerCoupon(order, amount);
JSONObject clientConfig = clientConfigService.find(client.getIntValue("client_id")); JSONObject clientConfig = clientConfigService.find(client.getIntValue("client_id"));
OperatorType type = partnerAccount != null ? OperatorType.PARTNER : OperatorType.MANAGER; OperatorType type = partnerAccount != null ? OperatorType.PARTNER : OperatorType.MANAGER;
@ -220,12 +224,13 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
operator.put("operator_id", manager.getIntValue("manager_id")); operator.put("operator_id", manager.getIntValue("manager_id"));
operator.put("operator", manager.getString("display_name")); operator.put("operator", manager.getString("display_name"));
} }
boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(partnerAccount.getIntValue("role")) == PartnerRole.CASHIER && clientConfig.getBooleanValue("enable_refund_auth"); boolean requireAudit = type == OperatorType.PARTNER && PartnerRole.getRole(partnerAccount.getIntValue("role")) == PartnerRole.CASHIER
&& clientConfig.getBooleanValue("enable_refund_auth");
logger.debug("applyer type=" + type + "; require audit=" + requireAudit); logger.debug("applyer type=" + type + "; require audit=" + requireAudit);
return paymentApi.refundOrder(orderId, null, amount, remark, operator, type, requireAudit); return paymentApi.refundOrder(orderId, null, amount, remark, operator, type, requireAudit);
} }
//订单使用积分商城优惠券,仅支持全额退款 // 订单使用积分商城优惠券,仅支持全额退款
private void checkOrderUseCustomerCoupon(JSONObject order, BigDecimal feeAmount) { private void checkOrderUseCustomerCoupon(JSONObject order, BigDecimal feeAmount) {
JSONObject couponLogs = couponAccuessLogMapper.findUsedCouponByOrderId(order.getString("order_id")); JSONObject couponLogs = couponAccuessLogMapper.findUsedCouponByOrderId(order.getString("order_id"));
if (couponLogs != null) { if (couponLogs != null) {
@ -237,7 +242,7 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
} }
@Override @Override
// @Transactional // @Transactional
public JSONObject newReviewRefundOrder(String orderId, BigDecimal fee, boolean original, String remark, JSONObject manager) { public JSONObject newReviewRefundOrder(String orderId, BigDecimal fee, boolean original, String remark, JSONObject manager) {
JSONObject reviewOrder = refundReviewMapper.findUnResolveByOrderId(orderId); JSONObject reviewOrder = refundReviewMapper.findUnResolveByOrderId(orderId);
reviewOrder.put("status", 1); reviewOrder.put("status", 1);
@ -338,7 +343,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
private void submitRefund(JSONObject account, JSONObject audition) { private void submitRefund(JSONObject account, JSONObject audition) {
JSONObject refundLog = refundMapper.find(audition.getString("refund_id")); JSONObject refundLog = refundMapper.find(audition.getString("refund_id"));
boolean platformAuditFlag = auditRefundAndCommitToPlatform(refundLog.getBigDecimal("amount"), audition.getString("remark"), refundLog.getString("order_id"), account); boolean platformAuditFlag = auditRefundAndCommitToPlatform(refundLog.getBigDecimal("amount"), audition.getString("remark"),
refundLog.getString("order_id"), account);
if (!platformAuditFlag) { if (!platformAuditFlag) {
paymentApi.submitRefund(audition.getString("refund_id")); paymentApi.submitRefund(audition.getString("refund_id"));
} }
@ -347,13 +353,12 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
private boolean auditRefundAndCommitToPlatform(BigDecimal amount, String remark, String orderId, JSONObject account) { private boolean auditRefundAndCommitToPlatform(BigDecimal amount, String remark, String orderId, JSONObject account) {
if (amount.compareTo(BigDecimal.ZERO) > 0) { if (amount.compareTo(BigDecimal.ZERO) > 0) {
JSONObject refundConfig = checkRefundAuditFlag(); JSONObject refundConfig = checkRefundAuditFlag();
if (refundConfig != null && refundConfig.getBoolean("refundAudit") && if (refundConfig != null && refundConfig.getBoolean("refundAudit") && amount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) >= 0) {
amount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) >= 0) { // 订单需要审核
//订单需要审核
reviewNewRefundOrder(orderId, amount, remark, account, null); reviewNewRefundOrder(orderId, amount, remark, account, null);
return true; return true;
} }
//退款 // 退款
return false; return false;
} else { } else {
throw new BadRequestException("Refund amount can not be 0"); throw new BadRequestException("Refund amount can not be 0");
@ -411,7 +416,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
} }
review.put("bd_name", bdNameStr.deleteCharAt(bdNameStr.length() - 1).toString()); review.put("bd_name", bdNameStr.deleteCharAt(bdNameStr.length() - 1).toString());
JSONObject order = orderMapper.find(review.getString("order_id")); JSONObject order = orderMapper.find(review.getString("order_id"));
review.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount")).subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue()); review.put("available", BigDecimal.valueOf(order.getDoubleValue("customer_payment_amount"))
.subtract(BigDecimal.valueOf(order.getDoubleValue("refund_fee"))).doubleValue());
review.put("create_time", order.getDate("create_time")); review.put("create_time", order.getDate("create_time"));
review.put("channel", order.getString("channel")); review.put("channel", order.getString("channel"));
return review; return review;
@ -427,6 +433,15 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
return refundConfig; return refundConfig;
} }
@Override
public JSONObject listUnionAllApply(JSONObject params, PageBounds pagination) {
if(params.get("cleint_id")==null && params.get("client_ids")==null){
return null;
}
return PageListUtils.buildPageListResult(refundMapper.listUnionAllApply(params, pagination));
}
@Override @Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher; this.publisher = applicationEventPublisher;

@ -69,4 +69,62 @@
and DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(#{today},'%Y-%m-%d'); and DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(#{today},'%Y-%m-%d');
</if> </if>
</select> </select>
<select id="listUnionAllApply" resultType="com.alibaba.fastjson.JSONObject">
SELECT
order_id order_id,
client_id client_id,
create_time create_time,
confirm_time confirm_time,
operator_name operator_name,
`status` `status` ,
1 type
FROM
pmt_refunds
<where>
<if test="client_id!=null">
and client_id = #{client_id}
</if>
<if test="start_time!=null">
and create_time &lt;= #{start_time}
</if>
<if test="start_time!=null">
and create_time &gt;= #{end_time}
</if>
<if test="client_ids!=null">
client_id in
<foreach collection="client_ids" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</where>
UNION ALL
SELECT
order_id order_id,
client_id client_id,
applytime create_time,
audittime confirm_time,
auditorname operator_name,
audit_result `status` ,
2 type
FROM
pmt_refund_applies
<where>
<if test="client_id!=null">
and client_id = #{client_id}
</if>
<if test="start_time!=null">
and applytime &lt;= #{start_time}
</if>
<if test="start_time!=null">
and applytime &gt;= #{end_time}
</if>
<if test="client_ids!=null">
client_id in
<foreach collection="client_ids" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</where>
order by create_time desc
</select>
</mapper> </mapper>
Loading…
Cancel
Save