Files
dzpt/src/main/java/com/saye/hospitalgd/controller/TransactionDetailController.java
2025-07-23 09:55:50 +08:00

407 lines
17 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.saye.hospitalgd.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.saye.hospitalgd.commons.date.DateDUtil;
import com.saye.hospitalgd.commons.excel.ExportXLSX;
import com.saye.hospitalgd.commons.excel.HashMapConversionImpl;
import com.saye.hospitalgd.commons.excel.IConversionByExport;
import com.saye.hospitalgd.commons.log.ExceptionDUtil;
import com.saye.hospitalgd.commons.log.LogUtil;
import com.saye.hospitalgd.commons.string.StringDUtil;
import com.saye.hospitalgd.model.Dicinfo;
import com.saye.hospitalgd.model.StatusDefine;
import com.saye.hospitalgd.service.OperatorService;
import com.saye.hospitalgd.service.TransactionDetailService;
import com.saye.hospitalgd.service.system.DicinfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.File;
import java.math.BigDecimal;
import java.util.*;
/**
* @author thuang
* @version 1.0
* @description: 交易明细
* @date 2021/9/13 15:52
*/
@Controller
@RequestMapping("/transactionDetail")
@Api(tags = "交易明细")
public class TransactionDetailController {
@Autowired
private TransactionDetailService transactionDetailService;
@Autowired
private DicinfoService dicinfoService;
@Autowired
private OperatorService operatorService;
@RequestMapping("/toTransactionDetail")
public String toTransactionDetail(ModelMap modelMap) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, -1);
Date startDate = calendar.getTime();
String startTime = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, startDate);
String endTime = DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd);
modelMap.addAttribute("startTime", startTime);
modelMap.addAttribute("endTime", endTime);
//支付方式
List<Dicinfo> pay_type = dicinfoService.findDicinfoTreeNodeList("PAY_TYPE");
modelMap.addAttribute("payTypeList", pay_type);
//三方支付方式
List<Dicinfo> third_pay = dicinfoService.findDicinfoTreeNodeList("THIRD_PAY");
// System.out.println("!!!!!!!!!"+third_pay);
modelMap.addAttribute("thirdPayList", third_pay);
List<Dicinfo> biz_type = dicinfoService.findDicinfoTreeNodeList("BIZ_TYPE");
modelMap.addAttribute("bizTypeList", biz_type);
//操作员选择
HashMap<Object, Object> map = new HashMap<>();
map.put("is_active", "1");
List<HashMap<Object, Object>> allOperator = null;
try {
allOperator = operatorService.findAllOperator(map);
} catch (Exception e) {
e.printStackTrace();
}
modelMap.addAttribute("operList", allOperator);
// System.out.println("_________"+allOperator);
return "financialReconciliation/transactionDetail";
}
/**
* @description: 交易明细
* @author thuang
* @date 2021/9/28 10:55
* @version 1.0
*/
@RequestMapping("/findHisAndThirdJoinData")
@ResponseBody
@ApiOperation("交易明细")
public HashMap<Object, Object> findHisAndThirdJoinData(String BizType, String operCode, String payType, String thirdPay, String startTime, String endTime, int page, int limit) {
HashMap<Object, Object> responseMap = new HashMap<>();
try {
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put("payType", payType);
map.put("BizType", BizType);
map.put("thirdPay", thirdPay);
map.put("startTime", startTime);
map.put("endTime", endTime);
map.put("operCode", operCode);
PageHelper.startPage(page, limit);
PageInfo<HashMap<Object, Object>> pageInfo = new PageInfo<HashMap<Object, Object>>(transactionDetailService.findHisAndThirdJoinData(map));
List<HashMap<Object, Object>> list = pageInfo.getList();
responseMap.put("code", 0);
responseMap.put("msg", "OK");
responseMap.put("count", pageInfo.getTotal());
responseMap.put("data", list);
} catch (Exception e) {
e.printStackTrace();
String msg = e.getMessage();
responseMap.put("code", 1);
responseMap.put("msg", "查询失败,原因:" + msg);
}
return responseMap;
}
/**
* @description: 交易明细统计
* @author thuang
* @date 2021/10/15 9:52
* @version 1.0
*/
@PostMapping("/findHisAndThirdJoinCountData")
@ResponseBody
@ApiOperation("交易明细统计")
public HashMap<Object, Object> findHisAndThirdJoinData(@RequestBody HashMap<Object, Object> map) {
HashMap<Object, Object> responseMap = new HashMap<>();
String errCode = "0";
String errMsg = "";
try {
//查询所有
List<HashMap<Object, Object>> list = transactionDetailService.findHisAndThirdJoinData(map);
int thirdNum = 0;
int HISNum = 0;
BigDecimal thirdMoney = new BigDecimal(0);
BigDecimal thirdReceiveMoney = new BigDecimal(0);
BigDecimal thirdRefundMoney = new BigDecimal(0);
BigDecimal HISMoney = new BigDecimal(0);
BigDecimal HISReceiveMoney = new BigDecimal(0);
BigDecimal HISRefundMoney = new BigDecimal(0);
for (HashMap<Object, Object> hashMap : list) {
String amount = StringDUtil.changeNullToEmpty(hashMap.get("AMOUNT"));
String i_jyje = StringDUtil.changeNullToEmpty(hashMap.get("I_JYJE"));
if (!StringUtils.isEmpty(i_jyje)) {
thirdMoney = thirdMoney.add(new BigDecimal(i_jyje));
if (new BigDecimal(i_jyje).compareTo(BigDecimal.ZERO) > 0) {
thirdReceiveMoney = thirdReceiveMoney.add(new BigDecimal(i_jyje));
} else {
thirdRefundMoney = thirdRefundMoney.add(new BigDecimal(i_jyje));
}
thirdNum++;
}
if (!StringUtils.isEmpty(amount)) {
HISMoney = HISMoney.add(new BigDecimal(amount));
if (new BigDecimal(amount).compareTo(BigDecimal.ZERO) > 0) {
HISReceiveMoney = HISReceiveMoney.add(new BigDecimal(amount));
} else {
HISRefundMoney = HISRefundMoney.add(new BigDecimal(amount));
}
HISNum++;
}
}
responseMap.put("thirdNum", thirdNum);
responseMap.put("thirdMoney", thirdMoney);
responseMap.put("thirdReceiveMoney", thirdReceiveMoney);
responseMap.put("thirdRefundMoney", thirdRefundMoney);
responseMap.put("HISNum", HISNum);
responseMap.put("HISMoney", HISMoney);
responseMap.put("HISReceiveMoney", HISReceiveMoney);
responseMap.put("HISRefundMoney", HISRefundMoney);
} catch (Exception e) {
e.printStackTrace();
errCode = "999";
errMsg = "查询交易明细统计失败,原因:" + e.getMessage();
}
responseMap.put("errCode", errCode);
responseMap.put("errMsg", errMsg);
return responseMap;
}
/**
* @description: 导出交易明细
* @author thuang
* @date 2021/10/22 8:52
* @version 1.0
*/
@RequestMapping("/exportHisAndThirdJoinCount")
@ResponseBody
@ApiOperation("导出交易明细")
public HashMap<Object, Object> exportHisAndThirdJoinCount(@RequestBody HashMap<Object, Object> map) {
HashMap<Object, Object> responseMap = new HashMap<Object, Object>();
String errCode = "0";
String errMsg = "";
String dlName = "";
String fileName = "";
String dowloadName = StringDUtil.changeNullToEmpty(map.get("dowloadName"));
try {
List<HashMap<Object, Object>> list = transactionDetailService.findHisAndThirdJoinData(map);
HashMap<Object, Object> hm = new HashMap<>();
int thirdNum = 0;
int HISNum = 0;
BigDecimal thirdMoney = new BigDecimal(0);
BigDecimal thirdReceiveMoney = new BigDecimal(0);
BigDecimal thirdRefundMoney = new BigDecimal(0);
BigDecimal HISMoney = new BigDecimal(0);
BigDecimal HISReceiveMoney = new BigDecimal(0);
BigDecimal HISRefundMoney = new BigDecimal(0);
for (HashMap<Object, Object> hashMap : list) {
String amount = StringDUtil.changeNullToEmpty(hashMap.get("AMOUNT"));
String i_jyje = StringDUtil.changeNullToEmpty(hashMap.get("I_JYJE"));
if (!StringUtils.isEmpty(i_jyje)) {
thirdMoney = thirdMoney.add(new BigDecimal(i_jyje));
if (new BigDecimal(i_jyje).compareTo(BigDecimal.ZERO) > 0) {
thirdReceiveMoney = thirdReceiveMoney.add(new BigDecimal(i_jyje));
} else {
thirdRefundMoney = thirdRefundMoney.add(new BigDecimal(i_jyje));
}
thirdNum++;
}
if (!StringUtils.isEmpty(amount)) {
HISMoney = HISMoney.add(new BigDecimal(amount));
if (new BigDecimal(amount).compareTo(BigDecimal.ZERO) > 0) {
HISReceiveMoney = HISReceiveMoney.add(new BigDecimal(amount));
} else {
HISRefundMoney = HISRefundMoney.add(new BigDecimal(amount));
}
HISNum++;
}
}
// responseMap.put("thirdNum", thirdNum);
// responseMap.put("thirdMoney", thirdMoney);
// responseMap.put("thirdReceiveMoney", thirdReceiveMoney);
// responseMap.put("thirdRefundMoney", thirdRefundMoney);
// responseMap.put("HISNum", HISNum);
// responseMap.put("HISMoney", HISMoney);
// responseMap.put("HISReceiveMoney", HISReceiveMoney);
// responseMap.put("HISRefundMoney", HISRefundMoney);
//支付方式
List<Dicinfo> pay_type = dicinfoService.findDicinfoTreeNodeList("PAY_TYPE");
HashMap<String, String> peyTypeMap = new HashMap<>();
for (Dicinfo dicinfo : pay_type) {
peyTypeMap.put(dicinfo.getDicvalue(), dicinfo.getDicname());
}
//支付方式
List<Dicinfo> third_pay = dicinfoService.findDicinfoTreeNodeList("THIRD_PAY");
HashMap<String, String> thirdPayMap = new HashMap<>();
for (Dicinfo dicinfo : third_pay) {
thirdPayMap.put(dicinfo.getDicvalue(), dicinfo.getDicname());
}
//业务类型
List<Dicinfo> biz_type = dicinfoService.findDicinfoTreeNodeList("BIZ_TYPE");
HashMap<String, String> bizTypeMap = new HashMap<>();
for (Dicinfo dicinfo : biz_type) {
bizTypeMap.put(dicinfo.getDicvalue(), dicinfo.getDicname());
}
//操作员选择
HashMap<Object, Object> activeMap = new HashMap<>();
activeMap.put("is_active", "1");
List<HashMap<Object, Object>> allOperator = null;
try {
allOperator = operatorService.findAllOperator(activeMap);
} catch (Exception e) {
e.printStackTrace();
}
for (HashMap<Object, Object> hashMap : list) {
String paytype = StringDUtil.changeNullToEmpty(hashMap.get("PAYTYPE"));
hashMap.put("PAYTYPE", peyTypeMap.get(paytype));
String i_jyqd = StringDUtil.changeNullToEmpty(hashMap.get("I_JYQD"));
hashMap.put("I_JYQD", thirdPayMap.get(i_jyqd));
String bizType = StringDUtil.changeNullToEmpty(hashMap.get("BIZTYPE"));
hashMap.put("BIZTYPE", bizTypeMap.get(bizType));
String hisopernum = StringDUtil.changeNullToEmpty(hashMap.get("HISOPERNUM"));
HashMap<Object, Object> hisOper = allOperator.stream().filter(h -> h.get("HISOPERCODE").equals(hisopernum)).findAny().orElse(null);
if (hisOper != null) {
hashMap.put("HISOPERNUM", hisOper.get("USER_NAME"));
}
// String paymethod = StringDUtil.changeNullToEmpty(hashMap.get("PAYMETHOD"));
// String paymethodStr="";
// if ("1".equals(paymethod)){
// paymethodStr="门诊";
// }else if ("2".equals(paymethod)){
// paymethodStr="住院";
// }
// hashMap.put("PAYMETHOD",paymethodStr);
String tradingStatus = StringDUtil.changeNullToEmpty(hashMap.get("H_JYLX"));
String tradingStatusStr = "";
if ("1".equals(tradingStatus)) {
tradingStatusStr = "收款记录";
} else if ("2".equals(tradingStatus)) {
tradingStatusStr = "退款记录";
}
hashMap.put("H_JYLX", tradingStatusStr);
}
hm.put("PAYTYPE", "合计结果:");
hm.put("TRANID", "第三方交易笔数共" + thirdNum + "笔,收款总计" + thirdReceiveMoney + "元,退款总计" + thirdRefundMoney + "元,汇总金额" + thirdMoney + "HIS交易共" + HISNum + "笔,收款总计" + HISReceiveMoney + "元,退款总计" + HISRefundMoney + "元,汇总金额" + HISMoney + "元;");
list.add(hm);
if (list.size() > 0) {
//定义标题头和文件名
String[] DISTANCE_HEADERNAME = {"业务类型", "交易状态", "支付方式", "HIS订单号", "金额", "交易时间", "操作员号", "患者姓名", "支付方式", "订单号", "金额", "交易时间"};
String[] sqlKey = {"BIZTYPE", "H_JYLX", "PAYTYPE", "TRANID", "AMOUNT", "TRADETIME", "HISOPERNUM", "PATIENTNAME", "I_JYQD", "I_DDH", "I_JYJE", "JYSJ"};
List<Object> rulList = new ArrayList<Object>(list);
//创建工作表
ExportXLSX exportXLS = new ExportXLSX(DISTANCE_HEADERNAME, sqlKey, ExportXLSX.A3, false);
exportXLS.setTitleName(dowloadName);
IConversionByExport conversion = new HashMapConversionImpl();
exportXLS.setConversion(conversion);
exportXLS.setData(rulList);
exportXLS.modifyWidthOfHeader("5000", 0);
exportXLS.modifyWidthOfHeader("5000", 1);
exportXLS.modifyWidthOfHeader("5000", 2);
exportXLS.modifyWidthOfHeader("10000", 3);
exportXLS.modifyWidthOfHeader("5000", 4);
exportXLS.modifyWidthOfHeader("5000", 5);
exportXLS.modifyWidthOfHeader("5000", 6);
exportXLS.modifyWidthOfHeader("5000", 7);
exportXLS.modifyWidthOfHeader("5000", 8);
exportXLS.modifyWidthOfHeader("10000", 9);
exportXLS.modifyWidthOfHeader("5000", 10);
exportXLS.modifyWidthOfHeader("5000", 11);
// exportXLS.modifyWidthOfHeader("5000", 11);
// 文件名称
//产生4位长度的随机码由字母和数字组成
String randomStr = StringDUtil.generateRandomCodeForLength(4);
dlName = DateDUtil.DateToStr(DateDUtil.yyyyMMddHHmmss, new Date()) + randomStr;
fileName = dlName + ".xlsx";
String uploadPath = StatusDefine.filePath + "/TranscationDetail/";
File uploadPathFile = new File(uploadPath);
if (!uploadPathFile.exists()) uploadPathFile.mkdirs();
String savePath = uploadPath + fileName;
exportXLS.execGenerateExcel(savePath);
}
} catch (Exception e) {
errCode = "999";
errMsg = "未知异常:" + ExceptionDUtil.getDetailExceptionMsg(e);
LogUtil.error(this.getClass(), "@@@系统出错!【" + errMsg + "");
}
responseMap.put("errCode", errCode);
responseMap.put("errMsg", errMsg);
responseMap.put("dlName", "TranscationDetail/" + fileName);
return responseMap;
}
}