|
@@ -17,6 +17,7 @@ import org.dromara.consume.api.domain.bo.RemoteResultDto;
|
|
|
import org.dromara.server.hik.domain.bo.XfFailedRecordBo;
|
|
import org.dromara.server.hik.domain.bo.XfFailedRecordBo;
|
|
|
import org.dromara.server.hik.domain.vo.XfConsumeDetailVo;
|
|
import org.dromara.server.hik.domain.vo.XfConsumeDetailVo;
|
|
|
import org.dromara.server.hik.domain.vo.XfTermVo;
|
|
import org.dromara.server.hik.domain.vo.XfTermVo;
|
|
|
|
|
+import org.dromara.server.hik.enums.ConsumeModeEnum;
|
|
|
import org.dromara.server.hik.enums.ModeTypeEnum;
|
|
import org.dromara.server.hik.enums.ModeTypeEnum;
|
|
|
import org.dromara.server.hik.event.HikEventHandler;
|
|
import org.dromara.server.hik.event.HikEventHandler;
|
|
|
import org.dromara.server.hik.event.domain.FileContent;
|
|
import org.dromara.server.hik.event.domain.FileContent;
|
|
@@ -73,16 +74,16 @@ public class TransactionRecordEventHandler implements HikEventHandler {
|
|
|
FileUtils.writeBytes(content, image_dir_path+fileName);
|
|
FileUtils.writeBytes(content, image_dir_path+fileName);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- BigDecimal balance = null;
|
|
|
|
|
|
|
+ BigDecimal balance = BigDecimal.ZERO;
|
|
|
String actualPayment = transactionRecordEvent.getActualPayment();
|
|
String actualPayment = transactionRecordEvent.getActualPayment();
|
|
|
BigDecimal consumeMoney = BigDecimal.ZERO;
|
|
BigDecimal consumeMoney = BigDecimal.ZERO;
|
|
|
if(StringUtils.isNotBlank(actualPayment)){
|
|
if(StringUtils.isNotBlank(actualPayment)){
|
|
|
- balance = new BigDecimal(actualPayment).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
|
|
|
|
+ consumeMoney = new BigDecimal(actualPayment).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
}
|
|
}
|
|
|
// 这里只能应答成功,如果是业务异常(余额不足、脏数据等)失败,要存入表中,使用定时任务处理失败,所以即使失败的 也要回复成功
|
|
// 这里只能应答成功,如果是业务异常(余额不足、脏数据等)失败,要存入表中,使用定时任务处理失败,所以即使失败的 也要回复成功
|
|
|
// 如果是在线交易的,平台根据流水号判断当前交易记录事件是否为未处理事件,若为未处理事件,则平台进行处理并进行扣费;
|
|
// 如果是在线交易的,平台根据流水号判断当前交易记录事件是否为未处理事件,若为未处理事件,则平台进行处理并进行扣费;
|
|
|
// 如果是离线交易记录事件,则平台进行处理并进行扣费;
|
|
// 如果是离线交易记录事件,则平台进行处理并进行扣费;
|
|
|
- RemoteConsumeBo remoteBo = getRemoteBo(transactionRecordEventReceive);
|
|
|
|
|
|
|
+ RemoteConsumeBo remoteBo = getRemoteBo(transactionRecordEventReceive,modeType);
|
|
|
remoteBo.setTermNo(termNo);
|
|
remoteBo.setTermNo(termNo);
|
|
|
R<ErrorInfo> errorInfo = R.ok("处理成功");
|
|
R<ErrorInfo> errorInfo = R.ok("处理成功");
|
|
|
try {
|
|
try {
|
|
@@ -153,7 +154,7 @@ public class TransactionRecordEventHandler implements HikEventHandler {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- private RemoteConsumeBo getRemoteBo(TransactionRecordEventReceive info){
|
|
|
|
|
|
|
+ private RemoteConsumeBo getRemoteBo(TransactionRecordEventReceive info,String modeType){
|
|
|
RemoteConsumeBo remoteBo = new RemoteConsumeBo();
|
|
RemoteConsumeBo remoteBo = new RemoteConsumeBo();
|
|
|
remoteBo.setStatusFlag(4);
|
|
remoteBo.setStatusFlag(4);
|
|
|
remoteBo.setCardNo(0L);
|
|
remoteBo.setCardNo(0L);
|
|
@@ -161,15 +162,27 @@ public class TransactionRecordEventHandler implements HikEventHandler {
|
|
|
remoteBo.setRecordStatus(364L);
|
|
remoteBo.setRecordStatus(364L);
|
|
|
remoteBo.setRecordId(0L);
|
|
remoteBo.setRecordId(0L);
|
|
|
|
|
|
|
|
|
|
+ String consumeMoney;
|
|
|
TransactionRecordEventDetail recordEvent = info.getTransactionRecordEvent();
|
|
TransactionRecordEventDetail recordEvent = info.getTransactionRecordEvent();
|
|
|
|
|
+ String mode = recordEvent.getMode();
|
|
|
|
|
+ if(ConsumeModeEnum.count.getCode().equals( mode)){
|
|
|
|
|
+ consumeMoney = "0";
|
|
|
|
|
+ }else{
|
|
|
|
|
+ // 离线消费则取 totalPayment,在线消费则取 actualPayment
|
|
|
|
|
+ if (ModeTypeEnum.offLine.getCode().equals(modeType)) {
|
|
|
|
|
+ consumeMoney = recordEvent.getTotalPayment();
|
|
|
|
|
+ }else{
|
|
|
|
|
+ consumeMoney = recordEvent.getActualPayment();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
setCommonFields(remoteBo, recordEvent.getEmployeeNoString(), recordEvent.getCardNo(), info.getDateTime(),
|
|
setCommonFields(remoteBo, recordEvent.getEmployeeNoString(), recordEvent.getCardNo(), info.getDateTime(),
|
|
|
- recordEvent.getSerialNo(), recordEvent.getTotalPayment(), info.getMacAddress());
|
|
|
|
|
|
|
+ recordEvent.getSerialNo(), consumeMoney, info.getMacAddress());
|
|
|
|
|
|
|
|
return remoteBo;
|
|
return remoteBo;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void setCommonFields(RemoteConsumeBo remoteBo, String employeeNoString, String cardNo2, Date dateTime2, Integer serialNo,
|
|
static void setCommonFields(RemoteConsumeBo remoteBo, String employeeNoString, String cardNo2, Date dateTime2, Integer serialNo,
|
|
|
- String totalPayment, String macAddress) {
|
|
|
|
|
|
|
+ String actualPayment, String macAddress) {
|
|
|
remoteBo.setUserNo(Long.valueOf(employeeNoString));
|
|
remoteBo.setUserNo(Long.valueOf(employeeNoString));
|
|
|
if(StringUtils.isNotBlank(cardNo2)){
|
|
if(StringUtils.isNotBlank(cardNo2)){
|
|
|
remoteBo.setFactoryId(Long.valueOf(cardNo2));
|
|
remoteBo.setFactoryId(Long.valueOf(cardNo2));
|
|
@@ -178,8 +191,8 @@ public class TransactionRecordEventHandler implements HikEventHandler {
|
|
|
}
|
|
}
|
|
|
remoteBo.setConsumeDate(dateTime2);
|
|
remoteBo.setConsumeDate(dateTime2);
|
|
|
remoteBo.setTermRecordId(Long.valueOf(serialNo));
|
|
remoteBo.setTermRecordId(Long.valueOf(serialNo));
|
|
|
- if(StringUtils.isNotBlank(totalPayment)){
|
|
|
|
|
- BigDecimal money = new BigDecimal(totalPayment).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
|
|
|
|
|
|
|
+ if(StringUtils.isNotBlank(actualPayment)){
|
|
|
|
|
+ BigDecimal money = new BigDecimal(actualPayment).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
|
|
|
remoteBo.setConsumeMoney(money);
|
|
remoteBo.setConsumeMoney(money);
|
|
|
}else{
|
|
}else{
|
|
|
remoteBo.setConsumeMoney(BigDecimal.ZERO);
|
|
remoteBo.setConsumeMoney(BigDecimal.ZERO);
|
|
@@ -194,10 +207,22 @@ public class TransactionRecordEventHandler implements HikEventHandler {
|
|
|
}
|
|
}
|
|
|
XfFailedRecordBo bo = new XfFailedRecordBo();
|
|
XfFailedRecordBo bo = new XfFailedRecordBo();
|
|
|
TransactionRecordEventDetail recordEvent = info.getTransactionRecordEvent();
|
|
TransactionRecordEventDetail recordEvent = info.getTransactionRecordEvent();
|
|
|
|
|
+ String consumeMoney;
|
|
|
|
|
+ String mode = recordEvent.getMode();
|
|
|
|
|
+ if(ConsumeModeEnum.count.getCode().equals(mode)){
|
|
|
|
|
+ consumeMoney = "0";
|
|
|
|
|
+ }else{
|
|
|
|
|
+ // 离线消费则取 totalPayment,在线消费则取 actualPayment
|
|
|
|
|
+ if (ModeTypeEnum.offLine.getCode().equals(modeType)) {
|
|
|
|
|
+ consumeMoney = recordEvent.getTotalPayment();
|
|
|
|
|
+ }else{
|
|
|
|
|
+ consumeMoney = recordEvent.getActualPayment();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
bo.setUserNo(recordEvent.getEmployeeNoString());
|
|
bo.setUserNo(recordEvent.getEmployeeNoString());
|
|
|
bo.setConsumeDate(info.getDateTime());
|
|
bo.setConsumeDate(info.getDateTime());
|
|
|
bo.setTermRecordId(recordEvent.getSerialNo().toString());
|
|
bo.setTermRecordId(recordEvent.getSerialNo().toString());
|
|
|
- bo.setConsumeMoney(recordEvent.getTotalPayment());
|
|
|
|
|
|
|
+ bo.setConsumeMoney(consumeMoney);
|
|
|
bo.setTermMac(info.getMacAddress());
|
|
bo.setTermMac(info.getMacAddress());
|
|
|
if(termNo != null){
|
|
if(termNo != null){
|
|
|
bo.setTermNo(termNo.toString());
|
|
bo.setTermNo(termNo.toString());
|