diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantDetalLogMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantDetalLogMapper.java new file mode 100644 index 000000000..b421b0d89 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantDetalLogMapper.java @@ -0,0 +1,20 @@ +package au.com.royalpay.payment.manage.mappers.risk; + +import com.alibaba.fastjson.JSONObject; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Create by yixian at 2017-12-21 11:45 + */ +@AutoMapper(tablename = "risk_merchant_detail_log", pkName = "id") +public interface RiskMerchantDetalLogMapper { + @AutoSql(type = SqlType.INSERT) + void save(JSONObject record); + + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject record); + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantRecordMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantRecordMapper.java new file mode 100644 index 000000000..998a95695 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantRecordMapper.java @@ -0,0 +1,26 @@ +package au.com.royalpay.payment.manage.mappers.risk; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.alibaba.fastjson.JSONObject; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Create by yixian at 2017-12-21 11:45 + */ +@AutoMapper(tablename = "risk_merchant_record", pkName = "id") +public interface RiskMerchantRecordMapper { + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject record); + + List query(JSONObject params); + + @AutoSql(type = SqlType.SELECT) + JSONObject findById(@Param("id") String id); + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskTransactionLogMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskTransactionLogMapper.java new file mode 100644 index 000000000..17f2aa4d2 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskTransactionLogMapper.java @@ -0,0 +1,24 @@ +package au.com.royalpay.payment.manage.mappers.risk; + +import com.alibaba.fastjson.JSONObject; + +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Create by yixian at 2017-12-21 11:45 + */ +@AutoMapper(tablename = "risk_transaction_log", pkName = "id") +public interface RiskTransactionLogMapper { + @AutoSql(type = SqlType.SELECT) + JSONObject findByOrderId(@Param("order_id") String order_id); + + @AutoSql(type = SqlType.SELECT) + List findByRecordId(@Param("record_id") String record_id); + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskWhiteListMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskWhiteListMapper.java new file mode 100644 index 000000000..20b8a13bb --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/risk/RiskWhiteListMapper.java @@ -0,0 +1,26 @@ +package au.com.royalpay.payment.manage.mappers.risk; + +import com.alibaba.fastjson.JSONObject; + +import org.apache.ibatis.annotations.Param; + +import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper; +import cn.yixblog.support.mybatis.autosql.annotations.AutoSql; +import cn.yixblog.support.mybatis.autosql.annotations.SqlType; + +/** + * Create by yixian at 2017-12-21 11:45 + */ +@AutoMapper(tablename = "risk_white_list", pkName = "client_id") +public interface RiskWhiteListMapper { + @AutoSql(type = SqlType.SELECT) + JSONObject findByClientMoniker(@Param("client_moniker") String client_moniker); + + @AutoSql(type = SqlType.INSERT) + void save(JSONObject record); + + @AutoSql(type = SqlType.UPDATE) + void update(JSONObject record); + + +} \ No newline at end of file diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/bean/AddRiskDetailLog.java b/src/main/java/au/com/royalpay/payment/manage/risk/bean/AddRiskDetailLog.java new file mode 100644 index 000000000..8b4f44e4a --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/bean/AddRiskDetailLog.java @@ -0,0 +1,55 @@ +package au.com.royalpay.payment.manage.risk.bean; + +import com.alibaba.fastjson.JSONObject; + +public class AddRiskDetailLog { + + private String record_id; + + private int client_id; + + private String files; + + private String operation; + + public JSONObject params(){ + JSONObject params = new JSONObject(); + params.put("record_id",this.record_id); + params.put("client_id",this.client_id); + params.put("files",this.files); + params.put("operation",this.operation); + return params; + + } + public String getRecord_id() { + return record_id; + } + + public void setRecord_id(String record_id) { + this.record_id = record_id; + } + + public int getClient_id() { + return client_id; + } + + public void setClient_id(int client_id) { + this.client_id = client_id; + } + + public String getFiles() { + return files; + } + + public void setFiles(String files) { + this.files = files; + } + + public String getOperation() { + return operation; + } + + public void setOperation(String operation) { + this.operation = operation; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/bean/DealRiskRecord.java b/src/main/java/au/com/royalpay/payment/manage/risk/bean/DealRiskRecord.java new file mode 100644 index 000000000..a1976e3f6 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/bean/DealRiskRecord.java @@ -0,0 +1,37 @@ +package au.com.royalpay.payment.manage.risk.bean; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; + +public class DealRiskRecord { + +private String recordId; + private BigDecimal limitAmount; + @JsonProperty(defaultValue = "false") + private boolean disableMerchat; + + public String getRecordId() { + return recordId; + } + + public void setRecordId(String recordId) { + this.recordId = recordId; + } + + public BigDecimal getLimitAmount() { + return limitAmount; + } + + public void setLimitAmount(BigDecimal limitAmount) { + this.limitAmount = limitAmount; + } + + public Boolean getDisableMerchat() { + return disableMerchat; + } + + public void setDisableMerchat(Boolean disableMerchat) { + this.disableMerchat = disableMerchat; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRIskRecord.java b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRIskRecord.java new file mode 100644 index 000000000..2ec955f23 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/bean/QueryRIskRecord.java @@ -0,0 +1,41 @@ +package au.com.royalpay.payment.manage.risk.bean; + +import com.alibaba.fastjson.JSONObject; + +public class QueryRIskRecord { + + private String status; + private String client_moniker; + private String record_id; + + public JSONObject toParams(){ + JSONObject params = new JSONObject(); + params.put("status",this.status); + params.put("client_moniker",this.client_moniker); + params.put("record_id",this.record_id); + return params; + } + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRecord_id() { + return record_id; + } + + public void setRecord_id(String record_id) { + this.record_id = record_id; + } + + public String getClient_moniker() { + return client_moniker; + } + + public void setClient_moniker(String client_moniker) { + this.client_moniker = client_moniker; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java b/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java new file mode 100644 index 000000000..d6af1b689 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/core/RiskMerchantService.java @@ -0,0 +1,31 @@ +package au.com.royalpay.payment.manage.risk.core; + +import au.com.royalpay.payment.manage.risk.bean.AddRiskDetailLog; +import au.com.royalpay.payment.manage.risk.bean.DealRiskRecord; +import au.com.royalpay.payment.manage.risk.bean.QueryRIskRecord; + +import com.alibaba.fastjson.JSONObject; + +import java.util.List; + +public interface RiskMerchantService { + + void addDetailLog(AddRiskDetailLog addRiskDetailLog, JSONObject account); + + void DropOrderRiskRecord(JSONObject account,String recordId); + + void noopRiskRecord(JSONObject account,String recordId); + + void dealRiskRecord(JSONObject account,DealRiskRecord dealRiskRecord); + + List getRiskOrders(String recordId); + + List getRiskRecords(QueryRIskRecord queryRIskRecord); + + void addWhiteList(String client_moinker); + + void disableWhiteList(String client_moinker); + + + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java new file mode 100644 index 000000000..631562e43 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/core/impl/RiskMerchantServiceImpl.java @@ -0,0 +1,146 @@ +package au.com.royalpay.payment.manage.risk.core.impl; + +import au.com.royalpay.payment.manage.mappers.risk.RiskMerchantDetalLogMapper; +import au.com.royalpay.payment.manage.mappers.risk.RiskMerchantRecordMapper; +import au.com.royalpay.payment.manage.mappers.risk.RiskTransactionLogMapper; +import au.com.royalpay.payment.manage.mappers.risk.RiskWhiteListMapper; +import au.com.royalpay.payment.manage.merchants.core.ClientManager; +import au.com.royalpay.payment.manage.risk.bean.AddRiskDetailLog; +import au.com.royalpay.payment.manage.risk.bean.DealRiskRecord; +import au.com.royalpay.payment.manage.risk.bean.QueryRIskRecord; +import au.com.royalpay.payment.manage.risk.core.RiskMerchantService; +import au.com.royalpay.payment.tools.exceptions.BadRequestException; +import au.com.royalpay.payment.tools.exceptions.NotFoundException; + +import com.alibaba.fastjson.JSONObject; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +@Service +public class RiskMerchantServiceImpl implements RiskMerchantService { + + @Resource + private RiskMerchantRecordMapper riskMerchantRecordMapper; + @Resource + private RiskMerchantDetalLogMapper riskMerchantDetalLogMapper; + @Resource + private RiskTransactionLogMapper riskTransactionLogMapper; + @Resource + private RiskWhiteListMapper riskWhiteListMapper; + @Resource + private ClientManager clientManager; + + @Override + public void addDetailLog(AddRiskDetailLog addRiskDetailLog, JSONObject account) { + JSONObject record = addRiskDetailLog.params(); + record.put("auditor",account.getString("display_name")); + record.put("create_time",new Date()); + riskMerchantDetalLogMapper.save(record); + } + + @Override + @Transactional + public void DropOrderRiskRecord(JSONObject account, String recordId) { + JSONObject riskRecord = riskMerchantRecordMapper.findById(recordId); + if (riskRecord == null) { + throw new NotFoundException("Risk Record Not Found"); + } + if (riskRecord.getIntValue("status") != 0) { + throw new BadRequestException("The Record Has Been Handled"); + } + JSONObject record = new JSONObject(); + record.put("id", recordId); + record.put("status", "2"); + riskMerchantRecordMapper.update(record); + JSONObject detail = new JSONObject(); + detail.put("record_id", recordId); + detail.put("client_id", riskRecord.getIntValue("client_id")); + detail.put("auditor", account.getString("display_name")); + detail.put("operation", "进行掉单处理"); + detail.put("create_time", new Date()); + riskMerchantDetalLogMapper.save(detail); + } + + @Override + @Transactional + public void noopRiskRecord(JSONObject account, String recordId) { + JSONObject riskRecord = riskMerchantRecordMapper.findById(recordId); + if (riskRecord == null) { + throw new NotFoundException("Risk Record Not Found"); + } + if (riskRecord.getIntValue("status") != 0) { + throw new BadRequestException("The Record Has Been Handled"); + } + JSONObject record = new JSONObject(); + record.put("id", recordId); + record.put("status", "1"); + riskMerchantRecordMapper.update(record); + JSONObject detail = new JSONObject(); + detail.put("record_id", recordId); + detail.put("client_id", riskRecord.getIntValue("client_id")); + detail.put("auditor", account.getString("display_name")); + detail.put("operation", "不做处理"); + detail.put("create_time", new Date()); + riskMerchantDetalLogMapper.save(detail); + } + + @Override + public void dealRiskRecord(JSONObject account,DealRiskRecord dealRiskRecord) { + JSONObject record = riskMerchantRecordMapper.findById(dealRiskRecord.getRecordId()); + if(record==null){ + throw new NotFoundException("Risk Record Not Found Please Check"); + } + if(dealRiskRecord.getLimitAmount()!=null){ + clientManager.setMaxOrderAmount(record.getString("client_moniker"),dealRiskRecord.getLimitAmount()); + } + if(dealRiskRecord.getDisableMerchat()){ + clientManager.switchChannelPermission(account, record.getString("client_moniker"), "Wechat", false); + clientManager.switchChannelPermission(account, record.getString("client_moniker"), "Alipay", false); + } + } + + @Override + public List getRiskOrders(String recordId) { + return riskTransactionLogMapper.findByRecordId(recordId); + } + + @Override + public List getRiskRecords(QueryRIskRecord queryRIskRecord) { + return riskMerchantRecordMapper.query(queryRIskRecord.toParams()); + } + + @Override + public void addWhiteList(String client_moinker) { + JSONObject white = riskWhiteListMapper.findByClientMoniker(client_moinker); + if (white != null) { + white.put("is_valid", true); + riskWhiteListMapper.update(white); + return; + } + JSONObject client = clientManager.getClientInfoByMoniker(client_moinker); + if (client == null) { + throw new NotFoundException("Merchant Not Found Please Check"); + } + JSONObject record = new JSONObject(); + record.put("client_id", client.getIntValue("client_id")); + record.put("client_moniker", client.getString("client_moinker")); + record.put("create_time", new Date()); + riskWhiteListMapper.save(record); + } + + @Override + public void disableWhiteList(String client_moinker) { + JSONObject white = riskWhiteListMapper.findByClientMoniker(client_moinker); + if (white == null) { + throw new NotFoundException("White List Not Found Please Check"); + } + white.put("is_valid", false); + riskWhiteListMapper.update(white); + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java b/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java new file mode 100644 index 000000000..016dc1fc7 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/risk/web/RiskController.java @@ -0,0 +1,74 @@ +package au.com.royalpay.payment.manage.risk.web; + +import au.com.royalpay.payment.manage.permission.manager.ManagerMapping; +import au.com.royalpay.payment.manage.risk.bean.AddRiskDetailLog; +import au.com.royalpay.payment.manage.risk.bean.DealRiskRecord; +import au.com.royalpay.payment.manage.risk.bean.QueryRIskRecord; +import au.com.royalpay.payment.manage.risk.core.RiskMerchantService; +import au.com.royalpay.payment.tools.CommonConsts; + +import com.alibaba.fastjson.JSONObject; + +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.RestController; + +import java.util.List; + +import javax.annotation.Resource; + +/** + * Created by wangning on 08/12/2016. + */ +@RestController +@ManagerMapping(value = "/sys/risk") +public class RiskController { + + @Resource + private RiskMerchantService riskMerchantService; + + @RequestMapping(value = "/records", method = RequestMethod.GET) + public List list(QueryRIskRecord recordQuery) { + return riskMerchantService.getRiskRecords(recordQuery); + } + + @RequestMapping(value = "/records/{record_id}/dropOrder", method = RequestMethod.PUT) + public void dropOrder(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String record_id) { + riskMerchantService.DropOrderRiskRecord(manager, record_id); + } + + @RequestMapping(value = "/records/{record_id}/noop", method = RequestMethod.PUT) + public void noop(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String record_id) { + riskMerchantService.noopRiskRecord(manager, record_id); + } + + @RequestMapping(value = "/records/{record_id}/deal",method = RequestMethod.PUT) + public void dealRecord(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, @PathVariable String record_id, @RequestBody DealRiskRecord dealRiskRecord){ + dealRiskRecord.setRecordId(record_id); + riskMerchantService.dealRiskRecord(manager,dealRiskRecord); + } + + @RequestMapping(value = "/orders/{record_id}", method = RequestMethod.GET) + public List getRiskOrders(@PathVariable String record_id) { + return riskMerchantService.getRiskOrders(record_id); + } + + @RequestMapping(value = "/white/{client_moniker}", method = RequestMethod.POST) + public void addWhiteList(@PathVariable String client_moniker) { + riskMerchantService.addWhiteList(client_moniker); + } + + @RequestMapping(value = "/white/{client_moniker}/disable", method = RequestMethod.PUT) + public void disableWhiteList(@PathVariable String client_moniker) { + riskMerchantService.disableWhiteList(client_moniker); + } + + @RequestMapping(value = "/records/uploadFiles", method = RequestMethod.POST) + public void addRecordLog(@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager,@RequestBody AddRiskDetailLog addRiskDetailLog) { + riskMerchantService.addDetailLog(addRiskDetailLog,manager); + } + +} diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantRecordMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantRecordMapper.xml new file mode 100644 index 000000000..bd4fd0f27 --- /dev/null +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/risk/RiskMerchantRecordMapper.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file