From 7bdeca12a173de1d1be3cc6debf554377d8502d7 Mon Sep 17 00:00:00 2001 From: LiJianZhao Date: Thu, 5 Jun 2025 12:37:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E8=AE=A2=E5=8D=95=EF=BC=8C?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=B4=B9=E7=94=A8=E6=98=8E=E7=BB=86=EF=BC=8C?= =?UTF-8?q?=E9=A2=84=E6=94=AF=E4=BB=98=EF=BC=8C=E6=94=AF=E4=BB=98=E5=89=8D?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=93=E5=AD=98=E6=A0=A1=E9=AA=8C=20?= =?UTF-8?q?=E5=8C=BB=E4=BF=9D=E4=BB=98=E8=B4=B9=E6=B7=BB=E5=8A=A0=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86=EF=BC=8C=E5=87=BA=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=97=B6=E5=86=B2=E6=AD=A3=E8=AF=A5=E4=BA=A4=E6=98=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/api/request/SocialRequest.java | 10 +- .../clinic/server/common/util/HttpUtil.java | 17 +- .../controller/charge/SocialController.java | 3 +- .../social/SocialUploadController.java | 12 +- .../social/SocialCompareCodeMapper.java | 1 + .../server/service/charge/ChargeService.java | 165 +++++++++++++----- .../server/service/goods/GoodsService.java | 15 +- .../service/inventory/InventoryService.java | 11 +- .../server/service/item/ItemService.java | 19 +- .../OrganizationSectionService.java | 32 +++- .../social/SocialInventoryUploadService.java | 23 +++ 11 files changed, 233 insertions(+), 75 deletions(-) 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 d15f0c7..8291c17 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 @@ -192,8 +192,14 @@ public class SocialRequest { return om2206A; } - public OM2207A call2207A(IM2207A im2207A) { - JSONObject data = httpUtil.callBackMsgId("2207A",im2207A.buildToMap(),10000); + /** + * 需要在外层生成msgId + * @param im2207A + * @param msgId + * @return + */ + public OM2207A call2207A(IM2207A im2207A,String msgId) { + JSONObject data = httpUtil.callByMsgId(msgId,"2207A","data",im2207A.buildToMap(),10000); OM2207A om2207A=new OM2207A(); om2207A.setMsgId(data.get("msgid").toString()); om2207A.setSetlinfo(JSONObject.parseObject(data.get("setlinfo").toString(), OM2207A.Setlinfo.class)); 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 e82c95d..6023844 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 @@ -38,6 +38,17 @@ public class HttpUtil { private ManagerUserSignMapper managerUserSignMapper; private Logger logger = Logger.getLogger(HttpUtil.class.getName()); + + public String generateMsgId() { + Random random = new Random(); + int randomNumber = random.nextInt(9000) + 1000; + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter now_str = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + Map map = new HashMap<>(); + return config.get("social", "msgid") + now_str.format(now) + String.valueOf(randomNumber); + } + + private JSONObject post(String posturl, String params){ return post(posturl, params, 120000); } @@ -232,7 +243,11 @@ public class HttpUtil { JSONObject output = post(config.get("social", "url"), JSON.toJSONString(getparms(infno, tag, input)),timeout); return output; } - + public JSONObject callByMsgId(String msgId, String infno, String tag, Map input, int timeout) { + Map parmsMap = getparms(infno, tag, input); + parmsMap.put("msgid", msgId); + return callBackMsgIdDo(parmsMap); + } public JSONObject callBackMsgId(String infno, Map input,int timeout) { Map parmsMap = getparms(infno, input); return callBackMsgIdDo(parmsMap); diff --git a/src/main/java/com/syjiaer/clinic/server/controller/charge/SocialController.java b/src/main/java/com/syjiaer/clinic/server/controller/charge/SocialController.java index 653f5e1..87c0c34 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/charge/SocialController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/charge/SocialController.java @@ -63,8 +63,7 @@ public class SocialController extends BaseController { String insutype = parmsUtil.getString("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); + OM2207A om2207A = chargeService.socialRealPay(changeOrderCode,mdtrtCertType,mdtrtCertNO,insutype,payType); 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 10a833c..7edd42b 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 @@ -90,17 +90,7 @@ public class SocialUploadController extends BaseController { @ApiOperation("进销存一键上报接口") @RequestMapping("quickUpload") public Result quickUpload() { - Boolean uploadResult = socialInventoryUploadService.upload3501(); - if (!uploadResult) { - uploadResult = socialInventoryUploadService.upload3503(); - } - if (!uploadResult){ - uploadResult = socialInventoryUploadService.upload3505(); - } - if (!uploadResult) { - uploadResult = socialInventoryUploadService.upload3502(); - } - + socialInventoryUploadService.quickUpload(); NotDoNumberVo notDoNumberVo = socialInventoryUploadService.getNotDoNumberDo(); return success(notDoNumberVo); } diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/social/SocialCompareCodeMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/social/SocialCompareCodeMapper.java index 8fb9b39..16f3894 100644 --- a/src/main/java/com/syjiaer/clinic/server/mapper/social/SocialCompareCodeMapper.java +++ b/src/main/java/com/syjiaer/clinic/server/mapper/social/SocialCompareCodeMapper.java @@ -14,5 +14,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface SocialCompareCodeMapper 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 0997158..2575c57 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 @@ -11,6 +11,7 @@ import com.syjiaer.clinic.server.common.config.Config; import com.syjiaer.clinic.server.common.constants.Constants; import com.syjiaer.clinic.server.common.enums.*; import com.syjiaer.clinic.server.common.exception.MessageException; +import com.syjiaer.clinic.server.common.util.HttpUtil; import com.syjiaer.clinic.server.common.util.InfoUtil; import com.syjiaer.clinic.server.common.util.StringUtil; import com.syjiaer.clinic.server.common.vo.Page; @@ -61,6 +62,8 @@ import com.syjiaer.clinic.server.service.charge.vo.RetailOrderDailyChargingRepor import com.syjiaer.clinic.server.service.diagnosis.DiagnosisService; import com.syjiaer.clinic.server.service.inventory.InventoryService; import com.syjiaer.clinic.server.service.social.SocialCompareService; +import com.syjiaer.clinic.server.service.social.SocialReconciliationService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -73,6 +76,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; +@Slf4j @Service public class ChargeService extends BaseService { @Autowired @@ -134,6 +138,10 @@ public class ChargeService extends BaseService { private InventoryMapper inventoryMapper; @Autowired private SocialCompareService socialCompareService; + @Autowired + private HttpUtil httpUtil; + @Autowired + private SocialReconciliationService socialReconciliationService; @Transactional(rollbackFor = Exception.class) public ChargeOrder save(ChargeSaveDto dto) { @@ -160,7 +168,7 @@ public class ChargeService extends BaseService { String diaCode = diagnosis.getCode(); diagnosisMedicalGoodsListMapper.delete(new QueryWrapper().eq("diagnosis_code", diaCode)); diagnosisMedicalItemListMapper.delete(new QueryWrapper().eq("diagnosis_code", diaCode)); - if (registration.getType().equals(RegistrationTypeEnum.Social.getType())){ + if (registration.getType().equals(RegistrationTypeEnum.Social.getType())) { //使之前上传的诊断失效 diagnosisService.uploadDiagnosis(diaCode, "0"); } @@ -168,7 +176,7 @@ public class ChargeService extends BaseService { DiagnosisMedicalRecord medicalRecord = new DiagnosisMedicalRecord(); BeanUtils.copyProperties(dto.getDiagnosisMedicalRecord(), medicalRecord); diagnosisMedicalRecordMapper.updateById(medicalRecord); - if (registration.getType().equals(RegistrationTypeEnum.Social.getType())){ + if (registration.getType().equals(RegistrationTypeEnum.Social.getType())) { //重新上传诊断 diagnosisService.uploadDiagnosis(diaCode, "1"); } @@ -237,7 +245,7 @@ public class ChargeService extends BaseService { } //组套逻辑 if (dbService.getIsGroup()) { - List itemGroupList = itemGroupListMapper.selectList(new QueryWrapper().eq("item_id", dbService.getId()).eq("del_flag",false)); + List itemGroupList = itemGroupListMapper.selectList(new QueryWrapper().eq("item_id", dbService.getId()).eq("del_flag", false)); if (itemGroupList.isEmpty()) { throw new MessageException("组套:" + service.getName() + "没有绑定商品数据"); } @@ -250,7 +258,7 @@ public class ChargeService extends BaseService { itemList.setPreUnitPrice(itemGroup.getUnitPrice()); itemList.setUnitPrice(itemGroup.getUnitPrice()); - itemList.setNumber(itemGroup.getNumber()*service.getSelectedNum()); + itemList.setNumber(itemGroup.getNumber() * service.getSelectedNum()); itemList.setSocialCode(itemGroup.getSocialCode()); itemList.setUnit(itemGroup.getUnit()); @@ -302,39 +310,47 @@ public class ChargeService extends BaseService { List chargeGoodsLists = new ArrayList<>(); for (ChargeGoodsListVo goods : dto.getGoodsDetail()) { - ChargeGoodsList itemList = new ChargeGoodsList(); + ChargeGoodsList goodsList = new ChargeGoodsList(); Goods dbGoods = goodsMapper.selectById(goods.getId()); if (dbGoods == null) { throw new RuntimeException("商品不存在"); } String fsn = StringUtil.getCode("FSN"); - itemList.setChargeOrderCode(code); - itemList.setGoodsId(goods.getId()); - itemList.setPreUnitPrice(goods.getSelectedPrice()); - itemList.setUnitPrice(goods.getSelectedPrice()); - itemList.setNumber(goods.getSelectedNum()); + goodsList.setChargeOrderCode(code); + goodsList.setGoodsId(goods.getId()); + goodsList.setPreUnitPrice(goods.getSelectedPrice()); + goodsList.setUnitPrice(goods.getSelectedPrice()); + goodsList.setNumber(goods.getSelectedNum()); BigDecimal subTotalPrice = goods.getSelectedPrice().multiply(BigDecimal.valueOf(goods.getSelectedNum())); - itemList.setSubTotalPrice(subTotalPrice); - itemList.setTrdnFlag(true); + goodsList.setSubTotalPrice(subTotalPrice); + goodsList.setTrdnFlag(true); + //小单位数量 + Integer number = goods.getSelectedNum()*goods.getMinPackagingNumber(); + if (dbGoods.getPackagingUnit().equals(goods.getSelectedUnit()) || dbGoods.getPackagingUnit().equals(dbGoods.getMinPackagingUnit())) { - itemList.setTrdnFlag(false); + goodsList.setTrdnFlag(false); + //未拆分数量 + number = goods.getSelectedNum(); } - itemList.setUnit(goods.getSelectedUnit()); - itemList.setName(dbGoods.getName()); - itemList.setFeedetlSn(fsn); - itemList.setSocialCode(dbGoods.getHilistCode()); - itemList.setCreateDate(nowLocalDate); - itemList.setCreateTime(nowLocalDateTime); - itemList.setType(dbGoods.getType()); + if (!inventoryService.checkInventoryNumber(dbGoods.getId(), number)){ + throw new MessageException(goods.getName()+"库存不足"); + } + goodsList.setUnit(goods.getSelectedUnit()); + goodsList.setName(dbGoods.getName()); + goodsList.setFeedetlSn(fsn); + goodsList.setSocialCode(dbGoods.getHilistCode()); + goodsList.setCreateDate(nowLocalDate); + goodsList.setCreateTime(nowLocalDateTime); + goodsList.setType(dbGoods.getType()); //添加追溯码 String traceabilityCode = null; if (goods.getTraceAbilityCodeList() != null) { traceabilityCode = String.join(",", goods.getTraceAbilityCodeList()); } - itemList.setTraceabilityCode(traceabilityCode); + goodsList.setTraceabilityCode(traceabilityCode); BigDecimal subCost = goods.getPurchaseUnitPrice().multiply(BigDecimal.valueOf(goods.getSelectedNum())); - itemList.setCost(subCost); - chargeGoodsLists.add(itemList); + goodsList.setCost(subCost); + chargeGoodsLists.add(goodsList); preTotalPrice = preTotalPrice.add(subTotalPrice); totalPrice = totalPrice.add(subTotalPrice); totalCost = totalCost.add(subCost); @@ -355,11 +371,11 @@ public class ChargeService extends BaseService { chargeOrder.setPsnNo(registration.getPsnNo()); chargeOrder.setTotalCost(totalCost); OrganizationSection section = organizationSectionMapper.selectById(registration.getOrganizationSectionId()); - if (section == null){ + if (section == null) { throw new MessageException("科室不存在"); } OrganizationMember member = organizationMemberMapper.selectById(registration.getOrganizationDoctorId()); - if (member == null){ + if (member == null) { throw new MessageException("医生不存在"); } chargeOrder.setSectionCode(section.getCode()); @@ -510,9 +526,15 @@ public class ChargeService extends BaseService { List goodsLists = chargeGoodsListMapper.selectByCode(changeOrderCode); List itemLists = chargeItemListMapper.selectByCode(changeOrderCode); - if (order.getMdtrtId() == null){ + if (order.getMdtrtId() == null) { throw new MessageException("非医保挂号,不能上传费用明细信息"); } + + //检查商品是否库存不足 + Goods lackGoods = this.checkInventoryNumber(order.getCode()); + if (lackGoods != null) { + throw new MessageException(lackGoods.getName() + "库存不足"); + } //撤销之前上传的费用明细信息 try { IM2205 im2205 = new IM2205(); @@ -537,12 +559,12 @@ public class ChargeService extends BaseService { feedetail.setRx_circ_flag("0"); feedetail.setFee_ocur_time(LocalDateTime.now()); SocialDirectory sdGoods = socialDirectoryMapper.getByCode(goodsList.getSocialCode()); - if (sdGoods == null){ - throw new MessageException("本地医保目录中未查询到医保码为"+goodsList.getSocialCode()+"的商品信息"); + if (sdGoods == null) { + throw new MessageException("本地医保目录中未查询到医保码为" + goodsList.getSocialCode() + "的商品信息"); } SocialCompareCode sdCompare = socialCompareService.socialCompareInfo(goodsList.getSocialCode()); - if (sdGoods.getCompareCode() == null){ - throw new MessageException("医保服务项目"+sdCompare.getCode()+"未关联医保目录"); + if (sdCompare == null) { + throw new MessageException("药品" + sdCompare.getCode() + "未关联医保目录"); } feedetail.setMed_list_codg(goodsList.getSocialCode()); feedetail.setMedins_list_codg(sdCompare.getCompareCode()); @@ -566,12 +588,12 @@ public class ChargeService extends BaseService { feedetail.setRx_circ_flag("0"); feedetail.setFee_ocur_time(LocalDateTime.now()); SocialItem sdItem = socialItemMapper.getByCode(itemList.getSocialCode()); - if (sdItem == null){ - throw new MessageException("本地医保目录中未查询到医保码为"+itemList.getSocialCode()+"的医保服务项目"); + if (sdItem == null) { + throw new MessageException("本地医保目录中未查询到医保码为" + itemList.getSocialCode() + "的医保服务项目"); } SocialCompareCode sdCompare = socialCompareService.socialCompareInfo(itemList.getSocialCode()); - if (sdItem.getCompareCode() == null){ - throw new MessageException("医保服务项目"+itemList.getSocialCode()+"未关联医保目录"); + if (sdCompare == null) { + throw new MessageException("医保服务项目" + itemList.getSocialCode() + "未关联医保目录"); } feedetail.setMed_list_codg(itemList.getSocialCode()); feedetail.setMedins_list_codg(sdCompare.getCompareCode()); @@ -598,15 +620,21 @@ public class ChargeService extends BaseService { public OM2206A socialPrePay(String changeOrderCode, String mdtrtCertType, String mdtrtCertNo, String insutype) { ChargeOrder order = chargeOrderMapper.selectByCode(changeOrderCode); Diagnosis diagnosis = diagnosisMapper.selectByCode(order.getDiagnosisCode()); - //预支付只需要卡号 - String cardNumber = mdtrtCertNo; + + + //检查商品是否库存不足 + Goods lackGoods = this.checkInventoryNumber(order.getCode()); + if (lackGoods != null) { + throw new MessageException(lackGoods.getName() + "库存不足"); + } + PatientRegistration registration = patientRegistrationMapper.selectById(diagnosis.getRegistrationId()); IM2206A im2206A = new IM2206A(); IM2206A.Data data = new IM2206A.Data(); data.setPsn_no(registration.getPsnNo()); data.setMdtrt_cert_type(mdtrtCertType); - data.setMdtrt_cert_no(cardNumber); + data.setMdtrt_cert_no(mdtrtCertNo); data.setMed_type(config.get("social", "medType")); data.setMedfee_sumamt(order.getTotalPrice()); data.setPsn_setlway("01"); @@ -630,15 +658,22 @@ public class ChargeService extends BaseService { * @param insutype * @return */ - public OM2207A socialRealPay(String chargeOrderCode, String mdtrtCertType, String mdtrtCertNo, String insutype) { + public OM2207A socialRealPay(String chargeOrderCode, String mdtrtCertType, String mdtrtCertNo, String insutype, Integer payType) { ChargeOrder order = chargeOrderMapper.selectByCode(chargeOrderCode); Diagnosis diagnosis = diagnosisMapper.selectByCode(order.getDiagnosisCode()); + //检查商品是否库存不足 + Goods lackGoods = this.checkInventoryNumber(order.getCode()); + if (lackGoods != null) { + throw new MessageException(lackGoods.getName() + "库存不足"); + } + PatientRegistration registration = patientRegistrationMapper.selectById(diagnosis.getRegistrationId()); + String psnNo = registration.getPsnNo(); IM2207A im2207A = new IM2207A(); IM2207A.Data data = new IM2207A.Data(); - data.setPsn_no(registration.getPsnNo()); + data.setPsn_no(psnNo); data.setMdtrt_cert_type(mdtrtCertType); data.setMdtrt_cert_no(mdtrtCertNo); data.setMed_type(config.get("social", "medType")); @@ -661,13 +696,24 @@ public class ChargeService extends BaseService { } data.setMinpacunt_drug_trac_cnt(BigDecimal.valueOf(minpacunt_drug_trac_cnt)); -// IM2207A.ExpContent expContent = new IM2207A.ExpContent(); -// data.setExp_content(expContent); - im2207A.setData(data); - OM2207A om2207A = socialRequest.call2207A(im2207A); - //完成订单 - chargeService.completeOrder(order.getId(), RetailOrderPayTypeEnum.MEDICARE.getCode()); - return om2207A; + String msgId = httpUtil.generateMsgId(); + try { + + OM2207A om2207A = socialRequest.call2207A(im2207A, msgId); + recordSocialInfo(om2207A, chargeService.getByCode(chargeOrderCode), payType); + //完成订单 + chargeService.completeOrder(order.getId(), RetailOrderPayTypeEnum.MEDICARE.getCode()); + //记录医保付费信息 + return om2207A; + } catch (Exception e) { + log.error("医保支付异常,自动冲正该交易", e); + IM2601 im2601 = new IM2601(); + im2601.setPsnNo(psnNo); + im2601.setOmsgid(msgId); + im2601.setOinfno("2207A"); + socialReconciliationService.reversal(im2601); + throw new MessageException("医保支付异常"); + } } @@ -892,9 +938,8 @@ public class ChargeService extends BaseService { * @param om2102A * @param dbOrder * @param payType - * @param curBalc */ - public void recordSocialInfo(OM2207A om2102A, ChargeOrder dbOrder, Integer payType, String curBalc) { + public void recordSocialInfo(OM2207A om2102A, ChargeOrder dbOrder, Integer payType) { ChargeSocialPayLog socialPayLog = new ChargeSocialPayLog(); OM2207A.Setlinfo setlinfo = om2102A.getSetlinfo(); socialPayLog.setChargeOrderCode(dbOrder.getCode()); @@ -1104,6 +1149,30 @@ public class ChargeService extends BaseService { return chargeOrderMapper.selectOne(queryWrapper); } + /** + * 根据订单号检查商品数量是否充足 + */ + public Goods checkInventoryNumber(String chargeCode) { + List goodsList = chargeGoodsListMapper.selectByCode(chargeCode); + for (ChargeGoodsList goodsListItem : goodsList) { + Integer number = 0; + Goods goods = goodsMapper.selectById(goodsListItem.getGoodsId()); + if (goods == null) { + throw new MessageException("商品" + goodsListItem.getName() + "不存在"); + } + if (goods.getPackagingUnit().equals(goodsListItem.getUnit())) { + number = goodsListItem.getNumber(); + } else { + number = goodsListItem.getNumber() * goods.getMinPackagingNumber(); + } + if (!inventoryService.checkInventoryNumber(goodsListItem.getGoodsId(), number)) { + return goods; + } + + } + return null; + } + // public void recordSocialInfo(OM2103 om2103, RetailOrder dbOrder) { // QueryWrapper logQuery = new QueryWrapper<>(); // logQuery.eq("retail_order_code", dbOrder.getCode()); diff --git a/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java b/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java index 6b830fb..60ad803 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/goods/GoodsService.java @@ -66,13 +66,22 @@ public class GoodsService extends BaseService { */ public Goods save(Goods goods) { String code = goods.getHilistCode(); - - if (!code.isEmpty()) { + SocialDirectory socialDirectory = null; + Goods codeGoods = null; + if (code!=null && !code.isEmpty()) { QueryWrapper socialDirectoryWrapper = new QueryWrapper<>(); socialDirectoryWrapper.eq("code", code); - CheckUtil.checkValue(socialDirectoryMapper.selectOne(socialDirectoryWrapper)==null, "医保目录编码不能为空"); + socialDirectory = socialDirectoryMapper.selectOne(socialDirectoryWrapper); + + codeGoods = goodsMapper.selectOne(new QueryWrapper().eq("hilist_code", code)); + } + if (socialDirectory == null){ + throw new MessageException("该医保码"+code+"未能在医保目录中找到"); } + if (codeGoods!=null&&(goods.getId() == null || !goods.getId().equals(codeGoods.getId()))){ + throw new MessageException("医保码"+code+"已存在绑定的商品"); + } GoodsPricingModelEnum modelEnum = GoodsPricingModelEnum.getByPricingModel(goods.getPricingModel()); if (modelEnum == null){ throw new MessageException("定价模式错误错误"); 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 af22cdc..f3ebdd7 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 @@ -590,5 +590,14 @@ public class InventoryService extends BaseService { return result; } - + /** + * 根据商品id和数量 校验库存是否充足 + * @param goodsId number-拆分成最小单位数量 + * @return + */ + public boolean checkInventoryNumber(Integer goodsId, Integer number){ + Map numberMap = totalNumber(goodsId); + Integer totalFragment = numberMap.get("totalFragment"); + return totalFragment >= number; + } } diff --git a/src/main/java/com/syjiaer/clinic/server/service/item/ItemService.java b/src/main/java/com/syjiaer/clinic/server/service/item/ItemService.java index f3b584d..434d806 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/item/ItemService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/item/ItemService.java @@ -119,15 +119,28 @@ public class ItemService extends BaseService { if (item.getName() == null || item.getName().isEmpty()) { throw new MessageException("项目名称不能为空"); } - if (item.getSocialCode() == null || item.getSocialCode().isEmpty()) { - throw new MessageException("项目医保目录编码不能为空"); - } + if (item.getUnit() == null || item.getUnit().isEmpty()) { throw new MessageException("单位不能为空"); } if (item.getUnitPrice() == null || item.getUnitPrice().compareTo(BigDecimal.ZERO) <= 0) { throw new MessageException("售价不能小于0"); } + if (item.getSocialCode() == null || item.getSocialCode().isEmpty()) { + throw new MessageException("项目医保目录编码不能为空"); + } + SocialItem socialItem = socialItemMapper.selectOne(new QueryWrapper().eq("code", item.getSocialCode())); + if (socialItem == null){ + throw new MessageException("医保目录中未找到医保码为"+item.getSocialCode()+"的医疗服务项目"); + } + + Item codeItem = itemMapper.selectOne(new QueryWrapper().eq("social_code", item.getSocialCode())); + if (codeItem != null &&(item.getId() == null || !item.getId().equals(codeItem.getId()))){ + throw new MessageException("医保码"+item.getSocialCode()+"已存在绑定的医疗项目"); + } + + + ManagerUser managerUser = getManagerUser(); item.setCreateDatetime(LocalDateTime.now()); item.setCreateBy(managerUser.getName()); diff --git a/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationSectionService.java b/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationSectionService.java index 020f7fa..6beb39d 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationSectionService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationSectionService.java @@ -7,8 +7,10 @@ import com.syjiaer.clinic.server.common.config.Config; import com.syjiaer.clinic.server.common.exception.MessageException; import com.syjiaer.clinic.server.common.util.StringUtil; import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.entity.organization.OrganizationMember; import com.syjiaer.clinic.server.entity.organization.OrganizationMemberSection; import com.syjiaer.clinic.server.entity.organization.OrganizationSection; +import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationMemberSectionMapper; import com.syjiaer.clinic.server.mapper.organization.OrganizationSectionMapper; import com.syjiaer.clinic.server.service.BaseService; @@ -26,16 +28,14 @@ import java.util.List; @Service @Slf4j public class OrganizationSectionService extends BaseService { - @Autowired - private StringUtil stringUtil; @Autowired private OrganizationSectionMapper organizationSectionMapper; @Autowired private OrganizationMemberSectionMapper organizationMemberSectionMapper; @Autowired - private Config config; + private OrganizationMemberMapper organizationMemberMapper; @Autowired - private SocialRequest socialRequest; + private Config config; /** * 分页查询科室 @@ -89,6 +89,30 @@ public class OrganizationSectionService extends BaseService { String processing = getString(caty); organizationSection.setCaty(processing); organizationSectionMapper.updateById(organizationSection); + //更新成员冗余字段 + List organizationMemberSections = organizationMemberSectionMapper.selectList(new QueryWrapper().eq("organization_section_id", organizationSection.getId())); + for (OrganizationMemberSection organizationMemberSection : organizationMemberSections) { + OrganizationMember member = organizationMemberMapper.selectById(organizationMemberSection.getOrganizationMemberId()); + if (member == null){ + continue; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("organization_section_id"); + queryWrapper.eq("organization_member_id", member.getId()); + List sections = organizationMemberSectionMapper.selectObjs(queryWrapper); + QueryWrapper sectionQueryWrapper = new QueryWrapper<>(); + sectionQueryWrapper.select("name"); + sectionQueryWrapper.in("id", sections); + List names = organizationSectionMapper.selectObjs(sectionQueryWrapper); + if (names==null||names.isEmpty()){ + continue; + } + OrganizationMember updateMember = new OrganizationMember(); + updateMember.setId(member.getId()); + updateMember.setSectionNames(String.join("/", names)); + organizationMemberMapper.updateById(updateMember); + + } } 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 a9087f5..09e4e84 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 @@ -18,6 +18,7 @@ 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.SocialCompareCode; 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; @@ -34,6 +35,7 @@ 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.SocialCompareCodeMapper; import com.syjiaer.clinic.server.mapper.social.SocialDirectoryMapper; import com.syjiaer.clinic.server.service.BaseService; import org.springframework.beans.BeanUtils; @@ -78,6 +80,8 @@ public class SocialInventoryUploadService extends BaseService { private ChargeOrderMapper chargeOrderMapper; @Autowired private ChargeSocialPayLogMapper chargeSocialPayLogMapper; + @Autowired + private SocialCompareCodeMapper socialCompareCodeMapper; public Page get3501List(InventoryInitQuery initQuery) { if (initQuery == null) { @@ -106,6 +110,7 @@ public class SocialInventoryUploadService extends BaseService { queryWrapper.le("create_time", initQuery.getCreateTimeAfter()); } Page page = pageHelper(initQuery.getPageNum(), initQuery.getPageSize(), queryWrapper, inventoryInitMapper, "id", false); + System.out.println(page.toString()); List voList = new ArrayList<>(); for (InventoryInit inventoryInit : page.getList()) { SocialInventoryInitVo vo = new SocialInventoryInitVo(); @@ -550,5 +555,23 @@ public class SocialInventoryUploadService extends BaseService { chargeInventoryLogMapper.updateById(updateOrderInventory); return true; } + /** + * 快速上报 + */ + public boolean quickUpload() { + + boolean uploadResult = this.upload3501(); + if (!uploadResult) { + uploadResult = this.upload3503(); + } + if (!uploadResult){ + uploadResult = this.upload3505(); + } + if (!uploadResult) { + uploadResult = this.upload3502(); + } + return uploadResult; + + } }