diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3505.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3505.java index f4b3da1..9164e4e 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3505.java +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3505.java @@ -8,6 +8,8 @@ import lombok.experimental.Accessors; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.List; +import java.util.Map; @Getter @Setter @@ -89,5 +91,5 @@ public class IM3505 extends BaseInputModel{ @IMField(key="mdtrt_setl_type",name = "就诊结算类型",required = false) private String mdtrtSetlType; @IMField(key="drugtracinfo",name = "溯源码节点信息") - private String drugtracinfo; + private List> drugtracinfo; } \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3506.java b/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3506.java index 16c799f..5264185 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3506.java +++ b/src/main/java/com/syjiaer/clinic/server/common/api/input/IM3506.java @@ -8,54 +8,57 @@ import lombok.experimental.Accessors; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; @Getter @Setter @ToString @Accessors(chain = true) public class IM3506 extends BaseInputModel{ - @IMField(key="med_list_codg",name = "医疗目录编码",required = true) + @IMField(key = "med_list_codg", name = "医疗目录编码", required = true) private String medListCodg; - @IMField(key="fixmedins_hilist_id",name = "定点医药机构目录编号",required = true) + @IMField(key = "fixmedins_hilist_id", name = "定点医药机构目录编号", required = true) private String fixmedinsHilistId; - @IMField(key="fixmedins_hilist_name",name = "定点医药机构目录名称",required = true) + @IMField(key = "fixmedins_hilist_name", name = "定点医药机构目录名称", required = true) private String fixmedinsHilistName; - @IMField(key="fixmedins_bchno",name = "定点医药机构批次流水号",required = true) + @IMField(key = "fixmedins_bchno", name = "定点医药机构批次流水号", required = true) private String fixmedinsBchno; - @IMField(key="setl_id",name = "结算ID") + @IMField(key = "setl_id", name = "结算ID") private String setlId; - @IMField(key="psn_no",name = "人员编号") + @IMField(key = "psn_no", name = "人员编号") private String psnNo; - @IMField(key="psn_cert_type",name = "人员证件类型",required = true) + @IMField(key = "psn_cert_type", name = "人员证件类型", required = true) private String psnCertType; - @IMField(key="certno",name = "证件号码") - private String certNo; - @IMField(key="psn_name",name = "人员姓名") + @IMField(key = "certno", name = "证件号码") + private String certno; + @IMField(key = "psn_name", name = "人员姓名") private String psnName; - @IMField(key="manu_lotnum",name = "生产批号",required = true) + @IMField(key = "manu_lotnum", name = "生产批号", required = true) private String manuLotnum; - @IMField(key="manu_date",name = "生产日期",required = true) + @IMField(key = "manu_date", name = "生产日期", required = true) private LocalDate manuDate; - @IMField(key="expy_end",name = "有效期止") + @IMField(key = "expy_end", name = "有效期止") private LocalDate expyEnd; - @IMField(key="rx_flag",name = "处方药标志",required = true) + @IMField(key = "rx_flag", name = "处方药标志", required = true) private String rxFlag; - @IMField(key="trdn_flag",name = "拆零标志",required = true) + @IMField(key = "trdn_flag", name = "拆零标志", required = true) private String trdnFlag; - @IMField(key="finl_trns_pric",name = "最终成交单价") + @IMField(key = "finl_trns_pric", name = "最终成交单价") private BigDecimal finlTrnsPric; - @IMField(key="sel_retn_cnt",name = "销售/退货数量",required = true) + @IMField(key = "sel_retn_cnt", name = "销售/退货数量", required = true) private BigDecimal selRetnCnt; - @IMField(key="sel_retn_time",name = "销售/退货时间",required = true) - private LocalDate selRetnTime; - @IMField(key="sel_retn_opter_name",name = "销售/退货经办人姓名",required = true) + @IMField(key = "sel_retn_time", name = "销售/退货时间", required = true) + private LocalDateTime selRetnTime; + @IMField(key = "sel_retn_opter_name", name = "销售/退货经办人姓名", required = true) private String selRetnOpterName; - @IMField(key="memo",name = "备注") + @IMField(key = "memo", name = "备注") private String memo; - @IMField(key="medins_prod_sel_no",name = "商品销售流水号") + @IMField(key = "medins_prod_sel_no", name = "商品销售流水号") private String medinsProdSelNo; - @IMField(key="mdtrt_sn",name = "就医流水号",required = true) + @IMField(key = "mdtrt_sn", name = "就医流水号", required = true) private String mdtrtSn; - @IMField(key="drugtracinfo",name = "溯源码节点信息") - private String drugtracinfo; + @IMField(key = "drugtracinfo", name = "溯源码节点信息") + private List> drugtracinfo; } \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/output/OM2207A.java b/src/main/java/com/syjiaer/clinic/server/common/api/output/OM2207A.java index 98f213c..6b1e0ca 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/api/output/OM2207A.java +++ b/src/main/java/com/syjiaer/clinic/server/common/api/output/OM2207A.java @@ -16,7 +16,7 @@ import java.util.List; @ToString @Accessors(chain = true) public class OM2207A extends BaseOutputModel { - + private String msgId; @OMField(key="setlinfo",name = "结算信息") private Setlinfo setlinfo; @OMField(key="setldetail",name = "结算基金分项信息") @@ -27,6 +27,8 @@ public class OM2207A extends BaseOutputModel { public static class Setlinfo { @OMField(key = "mdtrt_id", name = "就诊ID") private String mdtrt_id; + @OMField(key = "setl_id", name = "结算ID") + private String setl_id; @OMField(key = "psn_no", name = "人员编号") private String psn_no; @OMField(key = "psn_name", name = "人员姓名") diff --git a/src/main/java/com/syjiaer/clinic/server/common/api/request/SocialRequest.java b/src/main/java/com/syjiaer/clinic/server/common/api/request/SocialRequest.java index e421ba9..dd89f40 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/api/request/SocialRequest.java +++ b/src/main/java/com/syjiaer/clinic/server/common/api/request/SocialRequest.java @@ -188,8 +188,9 @@ public class SocialRequest { } public OM2207A call2207A(IM2207A im2207A) { - JSONObject data = httpUtil.call("2207A",im2207A.buildToMap()); + JSONObject data = httpUtil.callBackMsgId("2207A",im2207A.buildToMap()); OM2207A om2207A=new OM2207A(); + om2207A.setMsgId(data.get("msgid").toString()); om2207A.setSetlinfo(JSONObject.parseObject(data.get("setlinfo").toString(), OM2207A.Setlinfo.class)); om2207A.setSetldetail(JSONArray.parseArray(data.get("setldetail").toString(), OM2207A.Setldetail.class)); return om2207A; @@ -225,4 +226,7 @@ public class SocialRequest { } + public void call3506(IM3506 im3506) { + httpUtil.callBackMsgId("3506", im3506.buildToMap()); + } } diff --git a/src/main/java/com/syjiaer/clinic/server/common/enums/RetailInventoryTypeEnum.java b/src/main/java/com/syjiaer/clinic/server/common/enums/RetailInventoryTypeEnum.java new file mode 100644 index 0000000..395ae71 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/enums/RetailInventoryTypeEnum.java @@ -0,0 +1,25 @@ +package com.syjiaer.clinic.server.common.enums; + +public enum RetailInventoryTypeEnum { + Incomplete(0,"未完成"), + Sale(1,"销售"), + Refund(2,"退款"); + + private final Integer type; + private final String desc; + + RetailInventoryTypeEnum(final Integer type, final String desc) { + this.type = type; + this.desc = desc; + } + + public Integer getType() { + return type; + } + + public String getDesc() { + return desc; + } + + +} diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/FileUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/FileUtil.java index 908ab8f..5e44dce 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/FileUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/FileUtil.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; @Component public class FileUtil { @@ -105,4 +106,27 @@ public class FileUtil { } return content.toString(); } + + + public void zipFiles(String[] srcFiles, String zipFile) { + try (FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(fos)) { + + for (String srcFile : srcFiles) { + File fileToZip = new File(srcFile); + FileInputStream fis = new FileInputStream(fileToZip); + ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); + zos.putNextEntry(zipEntry); + + byte[] bytes = new byte[1024]; + int length; + while ((length = fis.read(bytes)) >= 0) { + zos.write(bytes, 0, length); + } + fis.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/HttpUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/HttpUtil.java index c67367e..9ba0fcc 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/HttpUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/HttpUtil.java @@ -217,6 +217,14 @@ public class HttpUtil { JSONObject output = post(config.get("social", "url"), JSON.toJSONString(getparms(infno, tag, input)),timeout); return output; } + public JSONObject callBackMsgId(String infno, Map input) { + Map parmsMap = getparms(infno, input); + String msgId =parmsMap.get("msgid").toString(); + + JSONObject output = post(config.get("social", "url"), JSON.toJSONString(parmsMap)); + output.put("msgid",msgId); + return output; + } public JSONObject callBackMsgId(String infno, String tag, Map input) { JSONObject output = post(config.get("social", "url"), JSON.toJSONString(getparms(infno, tag, input))); diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/ManagerUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/ManagerUtil.java index c0163c9..2d2ff86 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/ManagerUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/ManagerUtil.java @@ -24,6 +24,7 @@ public class ManagerUtil { ManagerUser managerUser = new ManagerUser(); managerUser.setId(Integer.parseInt(managerId.toString())); managerUser.setUsername(userName.toString()); + managerUser.setName(name.toString()); return managerUser; } diff --git a/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java b/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java index 9463fa6..960fa9a 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/charge/ChargeController.java @@ -1,5 +1,6 @@ package com.syjiaer.clinic.server.controller.charge; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.syjiaer.clinic.server.common.api.output.OM2206A; import com.syjiaer.clinic.server.common.api.output.OM2207A; import com.syjiaer.clinic.server.common.util.DateUtil; @@ -81,7 +82,11 @@ public class ChargeController extends BaseController { String mdtrtCertType = parmsUtil.getString("mdtrtCertType"); String mdtrtCertNO = parmsUtil.getString("mdtrtCertNo"); String insutype = parmsUtil.getString("insutype"); - return success( chargeService.socialRealPay(changeOrderCode,mdtrtCertType,mdtrtCertNO,insutype)); + Integer payType = parmsUtil.getInteger("payType"); + String curBalc = parmsUtil.getString("curBalc"); + OM2207A om2207A = chargeService.socialRealPay(changeOrderCode,mdtrtCertType,mdtrtCertNO,insutype); + chargeService.recordSocialInfo(om2207A, chargeService.getByCode(changeOrderCode), payType,curBalc); + return success( ); } /** @@ -114,5 +119,19 @@ public class ChargeController extends BaseController { } + /** + * 获取收退费记录 + */ + @RequestMapping("listChargeLog") + public Result> getChargeList(){ + String begin = parmsUtil.getString("beginTime","开始时间为空"); + String end= parmsUtil.getString("endTime","结束时间为空"); + Integer userId = parmsUtil.getInteger("userId"); + LocalDateTime beginTime = DateUtil.getDateTime(begin); + LocalDateTime endTime = DateUtil.getDateTime(end); + List chargeLogs = chargeService.listChargeLog(beginTime,endTime,userId); + + return success(chargeLogs); + } } diff --git a/src/main/java/com/syjiaer/clinic/server/controller/social/SocialDirectoryController.java b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialDirectoryController.java index a6df432..b4d923a 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/social/SocialDirectoryController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialDirectoryController.java @@ -44,13 +44,15 @@ public class SocialDirectoryController extends BaseController { @RequestMapping("search") public Result search() { + Map parms = getParms(); String keyword = parmsUtil.getString("keyword","请输入搜索关键词"); + Integer type= parmsUtil.getInteger("type"); String produce= parmsUtil.getString("produce"); int page = (Integer) parms.getOrDefault("page", 1); int size = (Integer) parms.getOrDefault("size", 10); - return success(socialDirectoryService.search(keyword, Arrays.asList(1305, 1321), page, size)); + return success(socialDirectoryService.search(keyword, type, page, size)); } @RequestMapping("getByCode") public Result getByCode() { diff --git a/src/main/java/com/syjiaer/clinic/server/controller/social/SocialReconciliationController.java b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialReconciliationController.java new file mode 100644 index 0000000..e513f36 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialReconciliationController.java @@ -0,0 +1,92 @@ +package com.syjiaer.clinic.server.controller.social; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.api.input.IM2601; +import com.syjiaer.clinic.server.common.api.input.IM3201; +import com.syjiaer.clinic.server.common.api.output.OM3201; +import com.syjiaer.clinic.server.common.util.DateUtil; +import com.syjiaer.clinic.server.common.vo.Result; +import com.syjiaer.clinic.server.controller.BaseController; +import com.syjiaer.clinic.server.entity.charge.ChargeSocialPayLog; +import com.syjiaer.clinic.server.entity.social.dto.ReconciliationItemDto; +import com.syjiaer.clinic.server.entity.social.vo.ReconciliationDetailVo; +import com.syjiaer.clinic.server.entity.social.vo.ReconciliationItemVo; +import com.syjiaer.clinic.server.service.social.SocialReconciliationService; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@RestController +@RequestMapping("/social/reconciliation") +public class SocialReconciliationController extends BaseController { + @Autowired + private SocialReconciliationService socialReconciliationService; + + + /** + * 医保-对账列表 + * @return + */ + @RequestMapping("/getList") + public Result> getList(){ + String begin = parmsUtil.getString("beginTime","开始时间为空"); + String end= parmsUtil.getString("endTime","结束时间为空"); + LocalDateTime beginTime = DateUtil.getDateTime(begin); + LocalDateTime endTime = DateUtil.getDateTime(end); + + + return success( socialReconciliationService.getList(beginTime,endTime)); + } + + /** + * 对总账 + */ + @RequestMapping("/totalDo") + public Result totalDo(){ + ReconciliationItemDto dto = parmsUtil.getObject("data", ReconciliationItemDto.class); + return success( socialReconciliationService.totalDo(dto)); + } + /** + * 明细对账 + */ + @RequestMapping("/detailDo") + public Result> detailDo(){ + ReconciliationItemDto dto = parmsUtil.getObject("data", ReconciliationItemDto.class); + return success(socialReconciliationService.detailDo(dto)); + + + } + + /** + * 明细对账测试接口 + */ + @RequestMapping("/testDetailDo") + public Result> testDetailDo(){ + + return success(socialReconciliationService.testDetailDo()); + } + + /** + * 冲正 + */ + @RequestMapping("/reversal") + public Result reversal(){ + + IM2601 im2601 = parmsUtil.getObject("data",IM2601.class); + socialReconciliationService.reversal(im2601); + return success(); + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/controller/social/SocialUploadController.java b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialUploadController.java index a3c4d9b..4751c38 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/social/SocialUploadController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialUploadController.java @@ -7,6 +7,7 @@ import com.syjiaer.clinic.server.common.enums.UploadStatusEnum; import com.syjiaer.clinic.server.common.vo.Page; import com.syjiaer.clinic.server.common.vo.Result; import com.syjiaer.clinic.server.controller.BaseController; +import com.syjiaer.clinic.server.entity.charge.ChargeInventoryLog; import com.syjiaer.clinic.server.entity.inventory.InventoryInit; import com.syjiaer.clinic.server.entity.social.dto.InventoryInitQuery; import com.syjiaer.clinic.server.entity.social.dto.InventoryLogQuery; @@ -33,13 +34,14 @@ import java.util.List; public class SocialUploadController extends BaseController { @Autowired private SocialInventoryUploadService socialInventoryUploadService; + /** * 分页查询 商品初始化数据 */ @RequestMapping("get3501List") public Result> get3501List() { InventoryInitQuery initQuery = parmsUtil.getObject("query", InventoryInitQuery.class); - Page page =socialInventoryUploadService.get3501List(initQuery); + Page page = socialInventoryUploadService.get3501List(initQuery); return success(page); } @@ -49,7 +51,7 @@ public class SocialUploadController extends BaseController { @RequestMapping("get3502List") public Result> get3502List() { InventoryLogQuery logQuery = parmsUtil.getObject("query", InventoryLogQuery.class); - Page page =socialInventoryUploadService.get3502List(logQuery); + Page page = socialInventoryUploadService.get3502List(logQuery); return success(page); } @@ -59,7 +61,7 @@ public class SocialUploadController extends BaseController { @RequestMapping("get3503List") public Result get3503List() { InventoryPurchaseLogQuery pLogQuery = parmsUtil.getObject("query", InventoryPurchaseLogQuery.class); - Page page =socialInventoryUploadService.get3503List(pLogQuery); + Page page = socialInventoryUploadService.get3503List(pLogQuery); return success(page); } @@ -70,10 +72,9 @@ public class SocialUploadController extends BaseController { */ @RequestMapping("get3505List") public Result get3505List() { -// RetailInventoryQuery rlQuery = parmsUtil.getObject("query", RetailInventoryQuery.class); -// Page page =socialInventoryUploadService.get3505List(rlQuery); -// return success(page); - return success(); + RetailInventoryQuery rlQuery = parmsUtil.getObject("query", RetailInventoryQuery.class); + Page page = socialInventoryUploadService.get3505List(rlQuery); + return success(page); } @@ -121,9 +122,9 @@ public class SocialUploadController extends BaseController { if (!uploadResult) { uploadResult = socialInventoryUploadService.upload3503(); } -// if (!uploadResult){ -// uploadResult = socialInventoryUploadService.upload3505(); -// } + if (!uploadResult){ + uploadResult = socialInventoryUploadService.upload3505(); + } if (!uploadResult) { uploadResult = socialInventoryUploadService.upload3502(); } @@ -133,6 +134,4 @@ public class SocialUploadController extends BaseController { } - - } diff --git a/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeSocialPayLog.java b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeSocialPayLog.java new file mode 100644 index 0000000..168228c --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/charge/ChargeSocialPayLog.java @@ -0,0 +1,123 @@ +package com.syjiaer.clinic.server.entity.charge; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-05-09 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("charge_social_pay_log") +@ApiModel(value = "ChargeSocialPayLog对象", description = "") +public class ChargeSocialPayLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增主键") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("订单code") + private String chargeOrderCode; + + @ApiModelProperty("医保 结算id(医保返回唯一流水)") + private String setlId; + + @ApiModelProperty("人员编号") + private String psnNo; + + @ApiModelProperty("姓名") + private String name; + + @ApiModelProperty("余额") + private BigDecimal balc; + + @ApiModelProperty("基金支付总额") + private BigDecimal fundPaySumamt; + + @ApiModelProperty("基本医疗保险统筹基金支出") + private BigDecimal hifpPay; + + @ApiModelProperty("基本医疗保险统筹基金支付比例") + private BigDecimal poolPropSelfpay; + + @ApiModelProperty("公务员医疗补助资金支出") + private BigDecimal cvlservPay; + + @ApiModelProperty("企业补充医疗保险基金支出") + private BigDecimal hifesPay; + + @ApiModelProperty("居民大病保险资金支出") + private BigDecimal hifmiPay; + + @ApiModelProperty("职工大额医疗费用补助基金支出") + private BigDecimal hifobPay; + + @ApiModelProperty("医疗救助基金支出") + private BigDecimal mafPay; + + @ApiModelProperty("其他支出") + private BigDecimal othPay; + + @ApiModelProperty("个人负担总金额") + private BigDecimal psnPartAmt; + + @ApiModelProperty("个人账户支出") + private BigDecimal acctPay; + + @ApiModelProperty("个人现金支出") + private BigDecimal psnCashPay; + + @ApiModelProperty("个人现金部分支付类型") + private Integer psPayType; + + @ApiModelProperty("就诊ID 医保返回") + private String mdtrtId; + + @ApiModelProperty("险种类型") + private String insutype; + + @ApiModelProperty("清算类型") + private String clrType; + + @ApiModelProperty("清算经办机构") + private String clrOptins; + + @ApiModelProperty("结算时间") + private LocalDateTime setlTime; + + @ApiModelProperty("医疗类别") + private String medType; + + @ApiModelProperty("接口号") + private String infno; + + @ApiModelProperty("消息id") + private String msgid; + + @ApiModelProperty("支付类型 1收费 0退费") + private Integer chargeType; + + @ApiModelProperty("原有余额") + private String originalBalc; + + @ApiModelProperty("证件号码") + private String certno; +} diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeSocialPayLogMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeSocialPayLogMapper.java new file mode 100644 index 0000000..e6c41fc --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/charge/ChargeSocialPayLogMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.charge; + +import com.syjiaer.clinic.server.entity.charge.ChargeSocialPayLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-05-09 + */ +public interface ChargeSocialPayLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java b/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java index 23edbd9..49582a1 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/charge/ChargeService.java @@ -114,6 +114,9 @@ public class ChargeService extends BaseService { @Autowired @Lazy private ChargeService chargeService; + + @Autowired + private ChargeSocialPayLogMapper chargeSocialPayLogMapper; @Autowired private Config config; @@ -687,5 +690,97 @@ public class ChargeService extends BaseService { return page; } + /* + 查询收费记录 + */ + public List listChargeLog(LocalDateTime beginTime, LocalDateTime endTime, Integer userId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.ge("charge_time",beginTime); + queryWrapper.le("charge_time",endTime); + if (userId!=null){ + queryWrapper.eq("sale_person_id",userId); + queryWrapper.or().eq("docker_id",userId); + } + return chargeLogMapper.selectList(queryWrapper); + } + + /** + * 记录医保收费信息 + * @param om2102A + * @param dbOrder + * @param payType + * @param curBalc + */ + public void recordSocialInfo(OM2207A om2102A, ChargeOrder dbOrder, Integer payType,String curBalc) { + ChargeSocialPayLog socialPayLog = new ChargeSocialPayLog(); + OM2207A.Setlinfo setlinfo = om2102A.getSetlinfo(); + socialPayLog.setChargeOrderCode(dbOrder.getCode()); + socialPayLog.setSetlId(setlinfo.getSetl_id()); + socialPayLog.setPsnNo(setlinfo.getPsn_no()); + socialPayLog.setName(setlinfo.getPsn_name()); + socialPayLog.setBalc(setlinfo.getBalc()); + socialPayLog.setFundPaySumamt(setlinfo.getFund_pay_sumamt()); + socialPayLog.setHifpPay(setlinfo.getHifp_pay()); + socialPayLog.setPoolPropSelfpay(setlinfo.getPool_prop_selfpay()); + socialPayLog.setCvlservPay(setlinfo.getCvlserv_pay()); + socialPayLog.setHifesPay(setlinfo.getHifes_pay()); + socialPayLog.setHifmiPay(setlinfo.getHifmi_pay()); + socialPayLog.setHifobPay(setlinfo.getHifob_pay()); + socialPayLog.setMafPay(setlinfo.getMaf_pay()); + socialPayLog.setOthPay(setlinfo.getOth_pay()); + socialPayLog.setPsnPartAmt(setlinfo.getPsn_part_amt()); + socialPayLog.setAcctPay(setlinfo.getAcct_pay()); + socialPayLog.setPsnCashPay(setlinfo.getPsn_cash_pay()); + socialPayLog.setPsPayType(payType); + socialPayLog.setMdtrtId(setlinfo.getMdtrt_id()); + socialPayLog.setInsutype(setlinfo.getInsutype()); + socialPayLog.setClrType(setlinfo.getClr_type()); + socialPayLog.setClrOptins(setlinfo.getClr_optins()); + socialPayLog.setSetlTime(setlinfo.getSetl_time()); + socialPayLog.setMedType(setlinfo.getMed_type()); + socialPayLog.setInfno("2102A"); + socialPayLog.setMsgid(om2102A.getMsgId()); + socialPayLog.setChargeType(ChargeTypeEnum.CHARGE.getChargeType()); + socialPayLog.setOriginalBalc(curBalc); + chargeSocialPayLogMapper.insert(socialPayLog); + } + +// public void recordSocialInfo(OM2103 om2103, RetailOrder dbOrder) { +// QueryWrapper logQuery = new QueryWrapper<>(); +// logQuery.eq("retail_order_code", dbOrder.getCode()); +// logQuery.eq("charge_type", ChargeTypeEnum.CHARGE.getChargeType()); +// RetailSocialPayLog charge = retailSocialPayLogService.getOne(logQuery); +// RetailSocialPayLog refund = new RetailSocialPayLog(); +// OM2103.Setlinfo refundSetlinfo = om2103.getSetlinfo(); +// refund.setRetailOrderCode(dbOrder.getCode()); +// refund.setSetlId(refundSetlinfo.getSetl_id()); +// refund.setPsnNo(charge.getPsnNo()); +// refund.setName(charge.getName()); +// refund.setBalc(refundSetlinfo.getBalc()); +// refund.setFundPaySumamt(refundSetlinfo.getFund_pay_sumamt()); +// refund.setHifpPay(refundSetlinfo.getHifp_pay()); +// refund.setPoolPropSelfpay(refundSetlinfo.getPool_prop_selfpay()); +// refund.setCvlservPay(refundSetlinfo.getCvlserv_pay()); +// refund.setHifesPay(refundSetlinfo.getHifes_pay()); +// refund.setHifmiPay(refundSetlinfo.getHifmi_pay()); +// refund.setHifobPay(refundSetlinfo.getHifob_pay()); +// refund.setMafPay(refundSetlinfo.getMaf_pay()); +// refund.setOthPay(refundSetlinfo.getOth_pay()); +// refund.setPsnPartAmt(charge.getPsnPartAmt()); +// refund.setAcctPay(refundSetlinfo.getAcct_pay()); +// refund.setPsnCashPay(charge.getPsnCashPay()); +// refund.setPsPayType(charge.getPsPayType()); +// refund.setMdtrtId(refundSetlinfo.getMdtrt_id()); +// refund.setInsutype(charge.getInsutype()); +// refund.setClrType(charge.getClrType()); +// refund.setClrOptins(refundSetlinfo.getClr_optins()); +// refund.setSetlTime(refundSetlinfo.getSetl_time()); +// refund.setMedType(charge.getMedType()); +// refund.setInfno("2103"); +// refund.setMsgid(om2103.getMsgid()); +// refund.setChargeType(ChargeTypeEnum.REFUND.getChargeType()); +// refund.setCertno(charge.getCertno()); +// retailSocialPayLogService.save(refund); +// } } diff --git a/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java b/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java index f2fcf15..5c7b1dd 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/inventory/InventoryService.java @@ -298,6 +298,7 @@ public class InventoryService extends BaseService { throw new MessageException("订单不存在"); } InventoryLog log = null; + //更新库存数量 if (!updateGoods.getWholeNumber().equals(dbInventory.getWholeNumber())) { log = adjustNumber(updateGoods.getId(), updateGoods.getWholeNumber(), updateGoods.getFragmentNumber(), "库存调整"); @@ -323,6 +324,14 @@ public class InventoryService extends BaseService { inventoryPurchaseLog.setUploadStatus(UploadStatusEnum.NoUpload.getStatus()); inventoryPurchaseLogMapper.insert(inventoryPurchaseLog); } + //更新库存基本信息 效期 生产日期 生产批次 + Inventory updateInventory = new Inventory(); + updateInventory.setId(updateGoods.getId()); + updateInventory.setProductionDate(updateGoods.getProductionDate()); + updateInventory.setExpiryDate(updateGoods.getExpiryDate()); + updateInventory.setProductionBatchCode(updateGoods.getProductionBatchCode()); + updateInventory.setPurchaseUnitPrice(updateGoods.getPurchaseUnitPrice()); + inventoryMapper.updateById(updateInventory); //更新订单总价 QueryWrapper queryGoods = new QueryWrapper<>(); diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java index 9f9ab2a..1b37df1 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialDirectoryService.java @@ -184,9 +184,9 @@ public class SocialDirectoryService extends BaseService { //模糊搜索 if (keyword != null && !keyword.trim().isEmpty()) { - codeqw.like("name", keyword); - codeqw.or().like("code", keyword); - codeqw.or().like("keyword", keyword); + codeqw.and(wrapper-> + wrapper.like("name", keyword).or().like("code", keyword).or().like("keyword", keyword) + ); } // 执行查询 diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java index 78b0331..7addc64 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialInventoryUploadService.java @@ -6,12 +6,18 @@ import com.syjiaer.clinic.server.common.api.input.*; import com.syjiaer.clinic.server.common.api.request.SocialRequest; import com.syjiaer.clinic.server.common.constants.Constants; import com.syjiaer.clinic.server.common.enums.InventorySocialTypeEnum; +import com.syjiaer.clinic.server.common.enums.RetailInventoryTypeEnum; +import com.syjiaer.clinic.server.common.enums.RetailOrderPayTypeEnum; import com.syjiaer.clinic.server.common.enums.UploadStatusEnum; import com.syjiaer.clinic.server.common.exception.MessageException; import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.entity.charge.ChargeInventoryLog; +import com.syjiaer.clinic.server.entity.charge.ChargeOrder; +import com.syjiaer.clinic.server.entity.charge.ChargeSocialPayLog; import com.syjiaer.clinic.server.entity.goods.Goods; import com.syjiaer.clinic.server.entity.inventory.*; import com.syjiaer.clinic.server.entity.manager.ManagerUser; +import com.syjiaer.clinic.server.entity.organization.OrganizationMember; import com.syjiaer.clinic.server.entity.social.SocialDirectory; import com.syjiaer.clinic.server.entity.social.dto.InventoryInitQuery; import com.syjiaer.clinic.server.entity.social.dto.InventoryLogQuery; @@ -21,18 +27,26 @@ import com.syjiaer.clinic.server.entity.social.vo.NotDoNumberVo; import com.syjiaer.clinic.server.entity.social.vo.SocialInventoryInitVo; import com.syjiaer.clinic.server.entity.social.vo.SocialInventoryLogVo; import com.syjiaer.clinic.server.entity.social.vo.SocialInventoryPurchaseLogVo; +import com.syjiaer.clinic.server.mapper.charge.ChargeInventoryLogMapper; +import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; +import com.syjiaer.clinic.server.mapper.charge.ChargeSocialPayLogMapper; import com.syjiaer.clinic.server.mapper.goods.GoodsMapper; import com.syjiaer.clinic.server.mapper.inventory.*; +import com.syjiaer.clinic.server.mapper.manager.ManagerUserMapper; +import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; import com.syjiaer.clinic.server.mapper.social.SocialDirectoryMapper; import com.syjiaer.clinic.server.service.BaseService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestMapping; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.Map; /* * 医保进销存上报 @@ -46,10 +60,14 @@ public class SocialInventoryUploadService extends BaseService { @Autowired private InventoryLogMapper inventoryLogMapper; @Autowired + private OrganizationMemberMapper organizationMemberMapper; + @Autowired private InventoryMapper inventoryMapper; @Autowired private GoodsMapper goodsMapper; @Autowired + private ManagerUserMapper managerUserMapper; + @Autowired private SocialDirectoryMapper socialDirectoryMapper; @Autowired private InventoryPurchaseMapper inventoryPurchaseMapper; @@ -57,6 +75,12 @@ public class SocialInventoryUploadService extends BaseService { private SocialRequest socialRequest; @Autowired private InventorySupplierMapper inventorySupplierMapper; + @Autowired + private ChargeInventoryLogMapper chargeInventoryLogMapper; + @Autowired + private ChargeOrderMapper chargeOrderMapper; + @Autowired + private ChargeSocialPayLogMapper chargeSocialPayLogMapper; public Page get3501List(InventoryInitQuery initQuery) { if (initQuery == null) { @@ -86,7 +110,7 @@ public class SocialInventoryUploadService extends BaseService { } Page page = pageHelper(initQuery.getPageNum(), initQuery.getPageSize(), queryWrapper, inventoryInitMapper, "id", false); List voList = new ArrayList<>(); - for (InventoryInit inventoryInit : page.getList()){ + for (InventoryInit inventoryInit : page.getList()) { SocialInventoryInitVo vo = new SocialInventoryInitVo(); BeanUtils.copyProperties(inventoryInit, vo); Goods goods = goodsMapper.selectById(inventoryInit.getGoodsId()); @@ -128,17 +152,17 @@ public class SocialInventoryUploadService extends BaseService { } Page page = pageHelper(logQuery.getPageNum(), logQuery.getPageSize(), queryWrapper, inventoryLogMapper, "id", false); List voList = new ArrayList<>(); - for (InventoryLog inventoryLog : page.getList()){ - SocialInventoryLogVo vo = new SocialInventoryLogVo(); - BeanUtils.copyProperties(inventoryLog, vo); - Goods goods = goodsMapper.selectById(inventoryLog.getGoodsId()); - vo.setName(goods.getName()); - vo.setPackagingUnit(goods.getPackagingUnit()); - vo.setMinPackagingUnit(goods.getMinPackagingUnit()); - vo.setHilistCode(goods.getHilistCode()); - voList.add(vo); + for (InventoryLog inventoryLog : page.getList()) { + SocialInventoryLogVo vo = new SocialInventoryLogVo(); + BeanUtils.copyProperties(inventoryLog, vo); + Goods goods = goodsMapper.selectById(inventoryLog.getGoodsId()); + vo.setName(goods.getName()); + vo.setPackagingUnit(goods.getPackagingUnit()); + vo.setMinPackagingUnit(goods.getMinPackagingUnit()); + vo.setHilistCode(goods.getHilistCode()); + voList.add(vo); - } + } Page resultPage = new Page<>(); resultPage.setList(voList); resultPage.setTotal_page(page.getTotal_page()); @@ -166,7 +190,7 @@ public class SocialInventoryUploadService extends BaseService { } Page page = pageHelper(pLogQuery.getPageNum(), pLogQuery.getPageSize(), queryWrapper, inventoryPurchaseLogMapper, "id", false); List voList = new ArrayList<>(); - for (InventoryPurchaseLog inventoryPurchaseLog : page.getList()){ + for (InventoryPurchaseLog inventoryPurchaseLog : page.getList()) { SocialInventoryPurchaseLogVo vo = new SocialInventoryPurchaseLogVo(); BeanUtils.copyProperties(inventoryPurchaseLog, vo); Inventory inventory = inventoryMapper.selectById(inventoryPurchaseLog.getInventoryId()); @@ -200,11 +224,10 @@ public class SocialInventoryUploadService extends BaseService { long count3503 = inventoryPurchaseLogMapper.selectCount(pLogQuery); -// QueryWrapper rolQuery = new QueryWrapper<>(); -// rolQuery.in("upload_status", UploadStatusEnum.NoUpload.getStatus(), UploadStatusEnum.UploadFailed.getStatus()); -// rolQuery.in("type", RetailInventoryTypeEnum.Sale.getType(), RetailInventoryTypeEnum.Refund.getType()); -// long count3505 = iRetailOrderInventoryService.count(rolQuery); - long count3505 = 0; + QueryWrapper rolQuery = new QueryWrapper<>(); + rolQuery.in("upload_status", UploadStatusEnum.NoUpload.getStatus(), UploadStatusEnum.UploadFailed.getStatus()); + rolQuery.in("type", RetailInventoryTypeEnum.Sale.getType(), RetailInventoryTypeEnum.Refund.getType()); + long count3505 = chargeInventoryLogMapper.selectCount(rolQuery); NotDoNumberVo notDoNumberVo = new NotDoNumberVo(); notDoNumberVo.setNumber3501(count3501); notDoNumberVo.setNumber3502(count3502); @@ -235,7 +258,7 @@ public class SocialInventoryUploadService extends BaseService { } JSONObject jsonObject = JSONObject.parseObject(socialDirectory.getData()); String jsonRxFlag = (String) jsonObject.get("rx_flag"); - String rxFlag = jsonRxFlag == null||jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; + String rxFlag = jsonRxFlag == null || jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; IM3501 im3501 = new IM3501(); im3501.setMedListCodg(socialDirectory.getCode()) .setMedListCodg(socialDirectory.getCode()) @@ -273,7 +296,7 @@ public class SocialInventoryUploadService extends BaseService { IM3502 im3502 = new IM3502(); JSONObject jsonObject = JSONObject.parseObject(socialDirectory.getData()); String jsonRxFlag = (String) jsonObject.get("rx_flag"); - String rxFlag = jsonRxFlag == null||jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; + String rxFlag = jsonRxFlag == null || jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; im3502.setMedListCodg(socialDirectory.getCode()) @@ -329,7 +352,7 @@ public class SocialInventoryUploadService extends BaseService { } JSONObject jsonObject = JSONObject.parseObject(socialDirectory.getData()); String jsonRxFlag = (String) jsonObject.get("rx_flag"); - String rxFlag = jsonRxFlag == null||jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; + String rxFlag = jsonRxFlag == null || jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; if (curInventoryPurchaseLog.getSocialType().equals(InventorySocialTypeEnum.OTHER_INBOUND.getType())) { @@ -341,8 +364,8 @@ public class SocialInventoryUploadService extends BaseService { .setFixmedinsBchno(String.valueOf(inventory.getId())) .setSplerName(inventorySupplier.getName()) .setManuLotnum(inventory.getProductionBatchCode()) - .setProdentpName(goods.getProducer() == null||goods.getProducer().isEmpty() ? "-":goods.getProducer()) - .setAprvno(goods.getApprovalCode() ==null||goods.getApprovalCode().isEmpty()?"-":goods.getApprovalCode()) + .setProdentpName(goods.getProducer() == null || goods.getProducer().isEmpty() ? "-" : goods.getProducer()) + .setAprvno(goods.getApprovalCode() == null || goods.getApprovalCode().isEmpty() ? "-" : goods.getApprovalCode()) .setManuDate(inventory.getProductionDate()) .setExpyEnd(inventory.getExpiryDate()) .setPurcInvoCodg(inventoryPurchase.getInvoiceCode()) @@ -378,117 +401,140 @@ public class SocialInventoryUploadService extends BaseService { return true; } -// public boolean upload3505() { -// QueryWrapper roQuery = new QueryWrapper<>(); -// roQuery.in("upload_status", UploadStatusEnum.NoUpload.getStatus(), UploadStatusEnum.UploadFailed.getStatus()); -// roQuery.in("type", RetailInventoryTypeEnum.Sale.getType(), RetailInventoryTypeEnum.Refund.getType()); -// roQuery.orderByAsc("id"); -// roQuery.last("limit 1"); -// RetailOrderInventory orderInventory = iRetailOrderInventoryService.getOne(roQuery); -// if (orderInventory == null) { -// return false; -// } -// Inventory inventory = iInventoryService.getById(orderInventory.getInventoryId()); -// -// RetailOrder retailOrder = iRetailOrderService.getOne(new QueryWrapper() -// .eq("code", orderInventory.getRetailOrderCode())); -// ManagerUser docker =iManagerUserService.getById(retailOrder.getDockerId()); -// ManagerUser salePerson = iManagerUserService.getById(retailOrder.getSalePersonId()); -// Goods goods = iGoodsService.getById(inventory.getGoodId()); -// SocialDirectory socialDirectory = iSocialDirectoryService.getByCode(goods.getHilistCode()); -// JSONObject jsonObject = JSONObject.parseObject(socialDirectory.getData()); -// String jsonRxFlag = (String) jsonObject.get("rx_flag"); -// String rxFlag = jsonRxFlag == null||jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; -// -// if (orderInventory.getType().equals(RetailInventoryTypeEnum.Sale.getType())){ -// //销售 走3505 -// IM3505 im3505 = new IM3505(); -// IM3505.SelInfo selInfo = new IM3505.SelInfo(); -// selInfo.setMed_list_codg(goods.getHilistCode()); -// selInfo.setFixmedins_hilist_id(String.valueOf(socialDirectory.getId())); -// selInfo.setFixmedins_hilist_name(goods.getName()); -// selInfo.setFixmedins_bchno(String.valueOf(orderInventory.getInventoryId())); -// selInfo.setPrsc_dr_name(docker.getName()); -// selInfo.setPhar_name(docker.getName()); -// selInfo.setPhar_prac_cert_no(docker.getDockerCertno()); -// -// if (retailOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())){ -// //医保支付 -// RetailSocialPayLog payLog = iRetailSocialPayLogService.getOne(new QueryWrapper(). -// eq("retail_order_code", orderInventory.getRetailOrderCode())); -// selInfo.setSetl_id(payLog.getSetlId()); -// selInfo.setMdtrt_sn(payLog.getMdtrtId()); -// selInfo.setPsn_no(payLog.getPsnNo()); -// selInfo.setPsn_name(payLog.getName()); -// selInfo.setCertno(payLog.getCertno()); -// selInfo.setMdtrt_setl_type("1"); -// -// }else { -// selInfo.setMdtrt_sn(orderInventory.getFeedetlSn()); -// selInfo.setMdtrt_setl_type("2"); -// } -// selInfo.setManu_lotnum(inventory.getProductionBatchCode()); -// selInfo.setManu_date(inventory.getProductionDate()); -// selInfo.setExpy_end(inventory.getExpiryDate()); -// selInfo.setRx_flag(rxFlag); -// selInfo.setTrdn_flag(orderInventory.getTrdnFlag()?"0":"1"); -// selInfo.setRtal_docno(orderInventory.getRetailOrderCode()); -// selInfo.setSel_retn_time(orderInventory.getCreateTime()); -// selInfo.setSel_retn_cnt(BigDecimal.valueOf(orderInventory.getNumber())); -// selInfo.setSel_retn_opter_name(salePerson.getName()); -// List drugtracinfo = new ArrayList<>(); -// selInfo.setDrugtracinfo(drugtracinfo); -// im3505.setSelinfo(selInfo); -// socialRequest.call3505(im3505); -// } -// -// if (orderInventory.getType().equals(RetailInventoryTypeEnum.Refund.getType())){ -// //退款 走3506 -// IM3506 im3506 = new IM3506(); -// IM3506.SelInfo selInfo = new IM3506.SelInfo(); -// selInfo.setMed_list_codg(goods.getHilistCode()); -// selInfo.setFixmedins_hilist_id(String.valueOf(socialDirectory.getId())); -// selInfo.setFixmedins_hilist_name(goods.getName()); -// selInfo.setFixmedins_bchno(String.valueOf(orderInventory.getInventoryId())); -// selInfo.setPrsc_dr_name(docker.getName()); -// selInfo.setPhar_name(docker.getName()); -// selInfo.setPhar_prac_cert_no(docker.getDockerCertno()); -// -// if (retailOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())){ -// //医保支付 -// RetailSocialPayLog payLog = iRetailSocialPayLogService.getOne(new QueryWrapper(). -// eq("retail_order_code", orderInventory.getRetailOrderCode())); -// selInfo.setSetl_id(payLog.getSetlId()); -// selInfo.setMdtrt_sn(payLog.getMdtrtId()); -// selInfo.setPsn_no(payLog.getPsnNo()); -// selInfo.setPsn_name(payLog.getName()); -// selInfo.setCertno(payLog.getCertno()); -// selInfo.setMdtrt_setl_type("1"); -// -// }else { -// selInfo.setMdtrt_sn(orderInventory.getFeedetlSn()); -// selInfo.setMdtrt_setl_type("2"); -// } -// selInfo.setManu_lotnum(inventory.getProductionBatchCode()); -// selInfo.setManu_date(inventory.getProductionDate()); -// selInfo.setExpy_end(inventory.getExpiryDate()); -// selInfo.setRx_flag(rxFlag); -// selInfo.setTrdn_flag(orderInventory.getTrdnFlag()?"0":"1"); -// selInfo.setRtal_docno(orderInventory.getRetailOrderCode()); -// selInfo.setSel_retn_time(orderInventory.getCreateTime()); -// selInfo.setSel_retn_cnt(BigDecimal.valueOf(orderInventory.getNumber())); -// selInfo.setSel_retn_opter_name(salePerson.getName()); -// List drugtracinfo = new ArrayList<>(); -// selInfo.setDrugtracinfo(drugtracinfo); -// im3506.setSelinfo(selInfo); -// socialRequest.call3506(im3506); -// } -// RetailOrderInventory updateOrderInventory = new RetailOrderInventory(); -// updateOrderInventory.setId(orderInventory.getId()); -// updateOrderInventory.setUploadStatus(UploadStatusEnum.Uploaded.getStatus()); -// updateOrderInventory.setCreateTime(LocalDateTime.now()); -// iRetailOrderInventoryService.updateById(updateOrderInventory); -// return true; -// } + public Page get3505List(RetailInventoryQuery rlQuery) { + /** + * 获取3505列表 + * + * @return + */ + if (rlQuery == null) { + throw new MessageException("没有带查询条件"); + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.ne("type", RetailInventoryTypeEnum.Incomplete.getType()); + if (rlQuery.getPageNum() == null || rlQuery.getPageNum() == 0) { + rlQuery.setPageNum(1); + } + if (rlQuery.getPageSize() == null || rlQuery.getPageSize() == 0) { + rlQuery.setPageSize(Constants.DetailPageSize); + } + if (rlQuery.getUploadStatus() != null && UploadStatusEnum.getByStatus(rlQuery.getUploadStatus()) != null) { + queryWrapper.eq("upload_status", rlQuery.getUploadStatus()); + } + if (rlQuery.getType() != null && InventorySocialTypeEnum.getByType(rlQuery.getType()) != null) { + queryWrapper.eq("type", rlQuery.getType()); + } + Page chargeInventoryLogPage = pageHelper(rlQuery.getPageNum(), rlQuery.getPageSize(), queryWrapper, chargeInventoryLogMapper); + + return chargeInventoryLogPage; + } + + public boolean upload3505() { + QueryWrapper roQuery = new QueryWrapper<>(); + roQuery.in("upload_status", UploadStatusEnum.NoUpload.getStatus(), UploadStatusEnum.UploadFailed.getStatus()); + roQuery.in("type", RetailInventoryTypeEnum.Sale.getType(), RetailInventoryTypeEnum.Refund.getType()); + roQuery.orderByAsc("id"); + roQuery.last("limit 1"); + ChargeInventoryLog orderInventory = chargeInventoryLogMapper.selectOne(roQuery); + if (orderInventory == null) { + return false; + } + Inventory inventory = inventoryMapper.selectById(orderInventory.getInventoryId()); + + ChargeOrder chargeOrder = chargeOrderMapper.selectOne(new QueryWrapper() + .eq("code", orderInventory.getChargeOrderCode()).last("limit 1")); + ManagerUser salePerson = managerUserMapper.selectById(chargeOrder.getSalePersonId()); + OrganizationMember docker = organizationMemberMapper.selectById(salePerson.getOrganizationMemberId()); + + + Goods goods = goodsMapper.selectById(inventory.getGoodId()); + SocialDirectory socialDirectory = socialDirectoryMapper.getByCode(goods.getHilistCode()); + JSONObject jsonObject = JSONObject.parseObject(socialDirectory.getData()); + String jsonRxFlag = (String) jsonObject.get("rx_flag"); + String rxFlag = jsonRxFlag == null||jsonRxFlag.isEmpty() ? "0" : jsonRxFlag; + + if (orderInventory.getType().equals(RetailInventoryTypeEnum.Sale.getType())){ + //销售 走3505 + IM3505 im3505 = new IM3505(); + im3505.setMedListCodg(goods.getHilistCode()); + im3505.setFixmedinsHilistId(String.valueOf(socialDirectory.getId())); + im3505.setFixmedinsHilistName(goods.getName()); + im3505.setFixmedinsBchno(String.valueOf(orderInventory.getInventoryId())); + im3505.setPrscDrName(docker.getName()); + im3505.setPharName(docker.getName()); + im3505.setPharPracCertNo(docker.getIdCardNumber()); + + if (chargeOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())){ + //医保支付 + ChargeSocialPayLog payLog = chargeSocialPayLogMapper.selectOne(new QueryWrapper(). + eq("retail_order_code", orderInventory.getChargeOrderCode()).last("limit 1")); + im3505.setSetlId(payLog.getSetlId()); + im3505.setMdtrtSn(payLog.getMdtrtId()); + im3505.setPsnNo(payLog.getPsnNo()); + im3505.setPsnName(payLog.getName()); + im3505.setCertno(payLog.getCertno()); + im3505.setMdtrtSetlType("1"); + + }else { + im3505.setMdtrtSn(orderInventory.getFeedetlSn()); + im3505.setMdtrtSetlType("2"); + } + im3505.setManuLotnum(inventory.getProductionBatchCode()); + im3505.setManuDate(inventory.getProductionDate()); + im3505.setExpyEnd(inventory.getExpiryDate()); + im3505.setRxFlag(rxFlag); + im3505.setTrdnFlag(orderInventory.getTrdnFlag()?"0":"1"); + im3505.setRtalDocno(orderInventory.getChargeOrderCode()); + im3505.setSelRetnTime(LocalDate.from(orderInventory.getCreateTime())); + im3505.setSelRetnCnt(BigDecimal.valueOf(orderInventory.getNumber())); + im3505.setSelRetnOpterName(salePerson.getName()); + List> drugtracinfo = new ArrayList<>(); + im3505.setDrugtracinfo(drugtracinfo); + socialRequest.call3505(im3505); + } + + if (orderInventory.getType().equals(RetailInventoryTypeEnum.Refund.getType())){ + //退款 走3506 + IM3506 im3506 = new IM3506(); + im3506.setMedListCodg(goods.getHilistCode()); + im3506.setFixmedinsHilistId(String.valueOf(socialDirectory.getId())); + im3506.setFixmedinsHilistName(goods.getName()); + im3506.setFixmedinsBchno(String.valueOf(orderInventory.getInventoryId())); + im3506.setSelRetnOpterName(docker.getName()); + + if (chargeOrder.getPayType().equals(RetailOrderPayTypeEnum.MEDICARE.getCode())){ + //医保支付 + ChargeSocialPayLog payLog = chargeSocialPayLogMapper.selectOne(new QueryWrapper(). + eq("retail_order_code", orderInventory.getChargeOrderCode()).last("limit 1")); + im3506.setSetlId(payLog.getSetlId()); + im3506.setMdtrtSn(payLog.getMdtrtId()); + im3506.setPsnNo(payLog.getPsnNo()); + im3506.setPsnName(payLog.getName()); + im3506.setCertno(payLog.getCertno()); + + }else { + im3506.setMdtrtSn(orderInventory.getFeedetlSn()); + } + im3506.setManuLotnum(inventory.getProductionBatchCode()); + im3506.setManuDate(inventory.getProductionDate()); + im3506.setExpyEnd(inventory.getExpiryDate()); + im3506.setRxFlag(rxFlag); + im3506.setTrdnFlag(orderInventory.getTrdnFlag()?"0":"1"); + + im3506.setSelRetnCnt(BigDecimal.valueOf(orderInventory.getNumber())); + im3506.setSelRetnOpterName(salePerson.getName()); + im3506.setSelRetnTime(LocalDateTime.now()); + im3506.setSelRetnOpterName(salePerson.getName()); + List> drugtracinfo = new ArrayList<>(); + im3506.setDrugtracinfo(drugtracinfo); + socialRequest.call3506(im3506); + } + ChargeInventoryLog updateOrderInventory = new ChargeInventoryLog(); + updateOrderInventory.setId(orderInventory.getId()); + updateOrderInventory.setUploadStatus(UploadStatusEnum.Uploaded.getStatus()); + updateOrderInventory.setCreateTime(LocalDateTime.now()); + chargeInventoryLogMapper.updateById(updateOrderInventory); + return true; + } } diff --git a/src/main/java/com/syjiaer/clinic/server/service/social/SocialReconciliationService.java b/src/main/java/com/syjiaer/clinic/server/service/social/SocialReconciliationService.java new file mode 100644 index 0000000..f4893c8 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialReconciliationService.java @@ -0,0 +1,243 @@ +package com.syjiaer.clinic.server.service.social; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.api.input.IM2601; +import com.syjiaer.clinic.server.common.api.input.IM3201; +import com.syjiaer.clinic.server.common.api.input.IM3202; +import com.syjiaer.clinic.server.common.api.output.OM3201; +import com.syjiaer.clinic.server.common.api.output.OM3202; +import com.syjiaer.clinic.server.common.api.output.OM9101; +import com.syjiaer.clinic.server.common.api.request.SocialRequest; +import com.syjiaer.clinic.server.common.config.Config; +import com.syjiaer.clinic.server.common.exception.MessageException; +import com.syjiaer.clinic.server.common.util.FileUtil; +import com.syjiaer.clinic.server.common.util.HttpUtil; +import com.syjiaer.clinic.server.entity.charge.ChargeOrder; +import com.syjiaer.clinic.server.entity.charge.ChargeSocialPayLog; +import com.syjiaer.clinic.server.entity.social.dto.ReconciliationItemDto; +import com.syjiaer.clinic.server.entity.social.vo.ReconciliationDetailVo; +import com.syjiaer.clinic.server.entity.social.vo.ReconciliationItemVo; +import com.syjiaer.clinic.server.mapper.charge.ChargeOrderMapper; +import com.syjiaer.clinic.server.mapper.charge.ChargeSocialPayLogMapper; +import com.syjiaer.clinic.server.service.BaseService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +@Slf4j +@Service +public class SocialReconciliationService extends BaseService { + @Autowired + private ChargeSocialPayLogMapper chargeSocialPayLogMapper; + @Autowired + private ChargeOrderMapper chargeOrderMapper; + @Autowired + private SocialRequest socialRequest; + @Autowired + private FileUtil fileUtil; + @Autowired + private Config config; + @Autowired + private HttpUtil httpUtil; + public List getList(LocalDateTime beginTime, LocalDateTime endTime) { + QueryWrapper clrQuery = new QueryWrapper<>(); + clrQuery.select("clr_type,insutype,clr_optins,count(0) as count"); + clrQuery.groupBy("clr_type","insutype","clr_optins"); + clrQuery.ge("setl_time",beginTime); + clrQuery.le("setl_time",endTime); + List> mapList = chargeSocialPayLogMapper.selectMaps(clrQuery); + List voList = new ArrayList<>(); + for (Map item : mapList){ + if (item.get("clr_type") == null || item.get("insutype") == null){ + continue; + } + String clr = item.get("clr_type").toString(); + String insutype = item.get("insutype").toString(); + String clr_optins = item.get("clr_optins") == null ? "" : item.get("clr_optins").toString(); + QueryWrapper listQuery = new QueryWrapper<>(); + listQuery.eq("clr_type",clr); + listQuery.eq("insutype",insutype); + listQuery.eq("clr_optins",clr_optins); + listQuery.ge("setl_time",beginTime); + listQuery.le("setl_time",endTime); + List logs = chargeSocialPayLogMapper.selectList(listQuery); + ReconciliationItemVo vo = new ReconciliationItemVo(); + vo.setReconciliationType(clr); + vo.setInsuranceType(insutype); + vo.setHandlingInstitution(clr_optins); + vo.setSettlementCount(logs.size()); + for (ChargeSocialPayLog log : logs){ + vo.setTotalMedicalCost(log.getPsnPartAmt().add(vo.getTotalMedicalCost())); + vo.setTotalFundPayment(log.getFundPaySumamt().add(vo.getTotalFundPayment())); + vo.setTotalPersonalAccountPayment(log.getAcctPay().add(vo.getTotalPersonalAccountPayment())); + } + voList.add(vo); + } + return voList; + } + + /** + * 对总账 + * @param dto + * @return + */ + public OM3201 totalDo(ReconciliationItemDto dto) { + IM3201 im3201 = new IM3201(); + IM3201.Data inData = new IM3201.Data(); + inData.setInsutype(dto.getInsuranceType()); + inData.setClr_type(dto.getReconciliationType()); + inData.setSetl_optins(dto.getHandlingInstitution()); + inData.setStmt_begndate(dto.getBeginTime().toString()); + inData.setStmt_enddate(dto.getEndTime().toString()); + inData.setMedfee_sumamt(dto.getTotalMedicalCost()); + inData.setFund_pay_sumamt(dto.getTotalFundPayment()); + inData.setAcct_pay(dto.getTotalPersonalAccountPayment()); + inData.setFixmedins_setl_cnt(new BigDecimal(dto.getSettlementCount())); + im3201.setData(inData); + return socialRequest.call3201(im3201); + } + + /** + * 明显对账 + * @param dto + */ + public List detailDo(ReconciliationItemDto dto) { + QueryWrapper listQuery = new QueryWrapper<>(); + listQuery.eq("clr_type",dto.getReconciliationType()); + listQuery.eq("insutype",dto.getInsuranceType()); + listQuery.eq("clr_optins",dto.getHandlingInstitution()); + listQuery.ge("setl_time",dto.getBeginTime()); + listQuery.le("setl_time",dto.getEndTime()); + List logs = chargeSocialPayLogMapper.selectList(listQuery); + + try { + String filePath = File.createTempFile("temp", ".txt").toString(); + File file = new File(filePath); + File parentDir = file.getParentFile(); + + // 如果父目录不存在,创建多层文件夹 + if (!parentDir.exists()) { + parentDir.mkdirs(); + } + // 如果文件不存在,创建文件 + if (!file.exists()) { + file.createNewFile(); + } + //生成文件 + FileWriter writer = new FileWriter(file); + for (ChargeSocialPayLog log : logs){ + //TODO 退费标志 + QueryWrapper orderQuery = new QueryWrapper<>(); + orderQuery.eq("code",log.getChargeOrderCode()); + orderQuery.last("limit 1"); + ChargeOrder dbOrder = chargeOrderMapper.selectOne(orderQuery); + String line = log.getSetlId()+"\t"+log.getMdtrtId()+"\t"+ + log.getPsnNo()+"\t"+dbOrder.getTotalPrice()+"\t"+log.getFundPaySumamt()+"\t" +log.getAcctPay()+"\t" + +"0"+"\n"; + writer.write(line); + } + writer.flush(); + writer.close(); + log.info("对账明细文件创建成功,文件路径:"+filePath); + //压缩文件为zip包 + String zipPath = filePath.substring(0,filePath.lastIndexOf("."))+".zip"; + fileUtil.zipFiles(new String[]{filePath},zipPath); + //上传文件 + OM9101 om9101 = socialRequest.call9101(zipPath); + //请求明细对账接口 + IM3202 im3202 = new IM3202(); + IM3202.Data inData = new IM3202.Data(); + inData.setSetl_optins(dto.getHandlingInstitution()); + inData.setFile_qury_no(om9101.getFile_qury_no()); + inData.setStmt_begndate(dto.getBeginTime().toString()); + inData.setStmt_enddate(dto.getEndTime().toString()); + inData.setMedfee_sumamt(dto.getTotalMedicalCost()); + inData.setFund_pay_sumamt(dto.getTotalFundPayment()); + inData.setCash_payamt(new BigDecimal(0)); + inData.setFixmedins_setl_cnt(BigDecimal.valueOf(dto.getSettlementCount())); + inData.setRefd_setl_flag("0"); + im3202.setData(inData); + OM3202 om3202 = socialRequest.call3202(im3202); + Map input_dw = new HashMap<>(); + String downloadFileName = om3202.getFilename(); + input_dw.put("file_qury_no", om3202.getFile_qury_no()); + input_dw.put("fixmedins_code",config.get("social","fixmedinsCode") ); + input_dw.put("filename", om3202.getFilename()); + String savePath = file.getParent(); + //下载文件 + httpUtil.callToFile("9102", "fsDownloadIn", input_dw, savePath+"\\"+downloadFileName); + //解析文件 + List unzip = fileUtil.unzip(savePath,downloadFileName); + List readToList = fileUtil.readToList(unzip); + List voList = new ArrayList<>(); + for (String s : readToList){ + ReconciliationDetailVo vo = new ReconciliationDetailVo(); + List sList = List.of(s.split("\t")); + vo.setPsnNo(sList.get(0)); + vo.setMdtrtId(sList.get(1)); + vo.setSetlId(sList.get(2)); + vo.setMsgid(sList.get(3)); + vo.setStmtRslt(sList.get(4)); + vo.setRefdSetlFlag(sList.get(5)); + vo.setMemo(sList.get(6)); + vo.setMedfeeSumamt(new BigDecimal(sList.get(7))); + vo.setFundPaySumamt(new BigDecimal(sList.get(8))); + vo.setAcctPay(new BigDecimal(sList.get(9))); + voList.add(vo); + } + return voList; + + }catch (IOException io){ + log.error("创建文件失败"); + throw new MessageException("创建文件失败"); + + }catch (Exception e){ + log.error("未知错误",e); + throw new MessageException("未知错误"); + } + + } + + /** + * 测试明细对账 + * @return + */ + public List testDetailDo() { + String path = "C:/Users/jiaer/Desktop"; + String fileName = "FSI0000296920.zip"; + List unzip = fileUtil.unzip(path, fileName); + List readToList = fileUtil.readToList(unzip); + List voList = new ArrayList<>(); + for (String s : readToList){ + ReconciliationDetailVo vo = new ReconciliationDetailVo(); + List sList = List.of(s.split("\t")); + vo.setPsnNo(sList.get(0)); + vo.setMdtrtId(sList.get(1)); + vo.setSetlId(sList.get(2)); + vo.setMsgid(sList.get(3)); + vo.setStmtRslt(sList.get(4)); + vo.setRefdSetlFlag(sList.get(5)); + vo.setMemo(sList.get(6)); + vo.setMedfeeSumamt(new BigDecimal(sList.get(7))); + vo.setFundPaySumamt(new BigDecimal(sList.get(8))); + vo.setAcctPay(new BigDecimal(sList.get(9))); + voList.add(vo); + } + + System.out.println(voList); + return voList; + } + + public void reversal(IM2601 im2601) { + socialRequest.call2601(im2601); + } +} diff --git a/src/main/resources/xml/ChargeSocialPayLogMapper.xml b/src/main/resources/xml/ChargeSocialPayLogMapper.xml new file mode 100644 index 0000000..fe0c85b --- /dev/null +++ b/src/main/resources/xml/ChargeSocialPayLogMapper.xml @@ -0,0 +1,5 @@ + + + + +