add pos refund list

master
kira 6 years ago
parent 79cfa5085f
commit 43abd4d5b1

@ -149,4 +149,6 @@ public interface RetailAppService {
void applyToCompliance(JSONObject device);
JSONObject sendVerifyEmail(JSONObject device);
JSONObject getRefunds(JSONObject device, AppQueryBean appQueryBean);
}

@ -37,6 +37,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.tradelog.beans.TradeLogQuery;
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.device.DeviceSupport;
import au.com.royalpay.payment.tools.device.message.AppMessage;
@ -163,6 +164,8 @@ public class RetailAppServiceImp implements RetailAppService {
@Resource
private ClientMapper clientMapper;
@Resource
private RefundService refundService;
@Resource
private ClientModifySupport clientModifySupport;
@Resource
private ClearingLogMapper clearingLogMapper;
@ -329,11 +332,11 @@ public class RetailAppServiceImp implements RetailAppService {
}
tradeLogQuery.setClient_ids(appQueryBean.getApp_client_ids().split(","));
JSONObject client = clientManager.getClientInfo(Integer.parseInt(tradeLogQuery.getClient_ids()[0]));
if(client==null){
if (client == null) {
throw new NotFoundException("Client Not Exists");
}
device.put("client_moniker", client.getString("client_moniker"));
device.put("client",client);
device.put("client", client);
tradeLogService.exportTransFlow(tradeLogQuery, device, httpResponse);
}
@ -410,6 +413,16 @@ public class RetailAppServiceImp implements RetailAppService {
return result;
}
@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
public void updateClient(JSONObject device, AppClientBean appClientBean) {
String clientType = device.getString("client_type");
@ -554,11 +567,11 @@ public class RetailAppServiceImp implements RetailAppService {
JSONObject result = PageListUtils.buildPageListResult(logs);
if (appQueryBean.getPage() == 1) {
if (!logs.isEmpty() && logs.size() > 0) {
JSONObject clearingLog = clearingLogMapper.findById(logs.get(0).getIntValue("clearing_id"));
if(clearingLog.getBoolean("editable")){
result.put("padding", true);
logs.get(0).put("padding",true);
}
JSONObject clearingLog = clearingLogMapper.findById(logs.get(0).getIntValue("clearing_id"));
if (clearingLog.getBoolean("editable")) {
result.put("padding", true);
logs.get(0).put("padding", true);
}
}
}
return result;
@ -1160,7 +1173,7 @@ public class RetailAppServiceImp implements RetailAppService {
JSONObject unReadParams = new JSONObject();
unReadParams.put("client_id", client_id);
unReadParams.put("status", 0);
unReadParams.put("is_to_app",1);
unReadParams.put("is_to_app", 1);
int counts = noticePartnerMapper.countNoticePartner(unReadParams);
notice.put("unReadCounts", counts);
notice.put("type", "notice");
@ -1205,7 +1218,7 @@ public class RetailAppServiceImp implements RetailAppService {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
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;
}
@ -1296,7 +1309,7 @@ public class RetailAppServiceImp implements RetailAppService {
public JSONObject listDailyTransactions(String dateStr, String timezone, boolean thisDevOnly, JSONObject device, String app_client_ids) {
try {
JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id"));
if(client==null){
if (client == null) {
return null;
}
timezone = client.getString("timezone");

@ -1,34 +1,5 @@
package au.com.royalpay.payment.manage.appclient.web;
import static au.com.royalpay.payment.tools.CommonConsts.RETAIL_DEVICE;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import au.com.royalpay.payment.core.exceptions.ParamInvalidException;
import au.com.royalpay.payment.manage.activities.app_index.core.AppActService;
import au.com.royalpay.payment.manage.activities.monsettledelay.core.ActMonDelaySettleService;
@ -55,6 +26,35 @@ import au.com.royalpay.payment.tools.http.HttpUtils;
import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig;
import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import static au.com.royalpay.payment.tools.CommonConsts.RETAIL_DEVICE;
/**
* Created by yishuqian on 28/03/2017.
*/
@ -109,6 +109,10 @@ public class RetailAppController {
public JSONObject getTradeCommonData(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean 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)
public JSONObject getTradeCommonDataNew(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, AppQueryBean appQueryBean) {

@ -1,16 +1,19 @@
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.AutoMapper;
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
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.
@ -55,4 +58,7 @@ public interface RefundMapper {
List<JSONObject> listRefundDate(@Param("begin") Date begin, @Param("end") Date end);
List<JSONObject> listClientRefund(JSONObject param);
PageList<JSONObject> listUnionAllApply(JSONObject params, PageBounds pagination);
}

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

@ -87,7 +87,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
throw new RefundExistException();
}
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;
} else {
if (account != null) {
@ -118,7 +119,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
if (undoRefundOrder != null) {
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;
}
@ -143,12 +145,13 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
int clientId = order.getIntValue("client_id");
String currency = order.getString("currency");
//增加角色审核
// 增加角色审核
JSONObject client = clientManager.getClientInfo(clientId);
Assert.notNull(client, "client not exists");
JSONObject clientConfig = clientConfigService.find(clientId);
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);
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"));
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) {
//订单需要审核
// 订单需要审核
boolean casherRefund = reviewNewRefundOrder(orderId, realAmount, remark, partnerAccount, manager);
if (casherRefund) {
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);
JSONObject clientConfig = clientConfigService.find(client.getIntValue("client_id"));
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", 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);
return paymentApi.refundOrder(orderId, null, amount, remark, operator, type, requireAudit);
}
//订单使用积分商城优惠券,仅支持全额退款
// 订单使用积分商城优惠券,仅支持全额退款
private void checkOrderUseCustomerCoupon(JSONObject order, BigDecimal feeAmount) {
JSONObject couponLogs = couponAccuessLogMapper.findUsedCouponByOrderId(order.getString("order_id"));
if (couponLogs != null) {
@ -237,7 +242,7 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
}
@Override
// @Transactional
// @Transactional
public JSONObject newReviewRefundOrder(String orderId, BigDecimal fee, boolean original, String remark, JSONObject manager) {
JSONObject reviewOrder = refundReviewMapper.findUnResolveByOrderId(orderId);
reviewOrder.put("status", 1);
@ -338,7 +343,8 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
private void submitRefund(JSONObject account, JSONObject audition) {
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) {
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) {
if (amount.compareTo(BigDecimal.ZERO) > 0) {
JSONObject refundConfig = checkRefundAuditFlag();
if (refundConfig != null && refundConfig.getBoolean("refundAudit") &&
amount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) >= 0) {
//订单需要审核
if (refundConfig != null && refundConfig.getBoolean("refundAudit") && amount.compareTo(refundConfig.getBigDecimal("refundAuditAmount")) >= 0) {
// 订单需要审核
reviewNewRefundOrder(orderId, amount, remark, account, null);
return true;
}
//退款
// 退款
return false;
} else {
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());
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("channel", order.getString("channel"));
return review;
@ -427,6 +433,15 @@ public class RefundServiceImpl implements RefundService, ApplicationEventPublish
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
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.publisher = applicationEventPublisher;

@ -69,4 +69,62 @@
and DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(#{today},'%Y-%m-%d');
</if>
</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>
Loading…
Cancel
Save