diff --git a/src/main/java/com/syjiaer/clinic/server/ServerApplication.java b/src/main/java/com/syjiaer/clinic/server/ServerApplication.java index eccb04a..532b1aa 100644 --- a/src/main/java/com/syjiaer/clinic/server/ServerApplication.java +++ b/src/main/java/com/syjiaer/clinic/server/ServerApplication.java @@ -3,8 +3,10 @@ package com.syjiaer.clinic.server; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableScheduling @MapperScan("com.syjiaer.clinic.server.mapper.*") public class ServerApplication { diff --git a/src/main/java/com/syjiaer/clinic/server/common/task/SocialReconciliationManager.java b/src/main/java/com/syjiaer/clinic/server/common/task/SocialReconciliationManager.java new file mode 100644 index 0000000..916aea5 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/common/task/SocialReconciliationManager.java @@ -0,0 +1,33 @@ +package com.syjiaer.clinic.server.common.task; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.util.CacheUtil; +import com.syjiaer.clinic.server.common.util.DateUtil; +import com.syjiaer.clinic.server.entity.social.dto.ReconciliationItemDto; +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.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Component +@Slf4j +public class SocialReconciliationManager { + @Autowired + private SocialReconciliationService socialReconciliationService; + @Autowired + private CacheUtil cacheUtil; + @Scheduled(cron = "0 0 10,16 * * ? ") + public void everyDayReconciliation() { + + //最后一次自动对账时间 + socialReconciliationService.auto(); + + } +} \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java index e841810..2925aa3 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/CacheUtil.java @@ -20,6 +20,12 @@ public class CacheUtil { } + public void set(String key, Object value) { + String s = JSONObject.toJSONString(value); + redisTemplate.opsForValue().set(key, s); + } + + public T get(String key, Class clazz) { String json = (String) redisTemplate.opsForValue().get(key); if (json == null) return null; diff --git a/src/main/java/com/syjiaer/clinic/server/common/util/DateUtil.java b/src/main/java/com/syjiaer/clinic/server/common/util/DateUtil.java index 31b77b2..608e807 100644 --- a/src/main/java/com/syjiaer/clinic/server/common/util/DateUtil.java +++ b/src/main/java/com/syjiaer/clinic/server/common/util/DateUtil.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; public class DateUtil { public static final String DATE_FORMAT = "yyyy-MM-dd"; @@ -70,4 +71,9 @@ public class DateUtil { } return dates; } + + public static List getDatesBetween(LocalDate startDate, LocalDate endDate) { + return Stream.iterate(startDate, date -> date.plusDays(1)) + .limit(java.time.temporal.ChronoUnit.DAYS.between(startDate, endDate) + 1).toList(); + } } \ No newline at end of file diff --git a/src/main/java/com/syjiaer/clinic/server/controller/organization/OrganizationSectionController.java b/src/main/java/com/syjiaer/clinic/server/controller/organization/OrganizationSectionController.java index f75eaec..a371529 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/organization/OrganizationSectionController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/organization/OrganizationSectionController.java @@ -3,6 +3,7 @@ package com.syjiaer.clinic.server.controller.organization; import com.alibaba.fastjson.JSONObject; import com.syjiaer.clinic.server.common.annotations.RecordCommonLog; 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.common.vo.Result; import com.syjiaer.clinic.server.controller.BaseController; @@ -33,6 +34,9 @@ public class OrganizationSectionController extends BaseController { @RequestMapping("/add") public Result add() { OrganizationSection organizationSection = parmsUtil.getObjectWithCheck("data", OrganizationSection.class); + + organizationSection.setCode(StringUtil.getCode("os")); + organizationSectionService.add(organizationSection); return success("添加成功"); } 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 index 9de61a7..1659fce 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/social/SocialReconciliationController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/social/SocialReconciliationController.java @@ -59,7 +59,7 @@ public class SocialReconciliationController extends BaseController { */ @RequestMapping("/pageHistory") public Result> pageHistory(){ - ReconciliationLogQuery query = parmsUtil.getObject("data", ReconciliationLogQuery.class); + ReconciliationLogQuery query = parmsUtil.getObject("query", ReconciliationLogQuery.class); return success(socialReconciliationService.pageLogs(query)); } /** @@ -69,7 +69,7 @@ public class SocialReconciliationController extends BaseController { @RequestMapping("/totalDo") public Result totalDo(){ ReconciliationItemDto dto = parmsUtil.getObject("data", ReconciliationItemDto.class); - return success( socialReconciliationService.totalDo(dto)); + return success( socialReconciliationService.totalDo(dto,false)); } /** * 明细对账 diff --git a/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java b/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java index 287045c..b7dfc9f 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/organization/OrganizationMemberService.java @@ -118,6 +118,9 @@ public class OrganizationMemberService extends BaseService { } organizationMember.setSectionNames(String.join("/", sectionNameList)); organizationMemberMapper.insertOrUpdate(organizationMember); + for (OrganizationMemberSection section : sectionList){ + section.setOrganizationMemberId(organizationMember.getId()); + } organizationMemberSectionMapper.insert(sectionList); ManagerUser user = dto.getUserInfo(); 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 bf1c104..020f7fa 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 @@ -82,31 +82,6 @@ public class OrganizationSectionService extends BaseService { String processing = getString(caty); organizationSection.setCaty(processing); organizationSectionMapper.insert(organizationSection); - try { - socialRequest.call3401(new com.syjiaer.clinic.server.common.api.input.IM3401() - .setHospDeptCodg(organizationSection.getCode()) - .setHospDeptName(organizationSection.getName()) - .setCaty(organizationSection.getCaty()) - .setBegntime(organizationSection.getBeginDate()) - .setEndtime(organizationSection.getEndDate()) - .setItro(organizationSection.getInfo()) - .setDeptResperName(organizationSection.getResperName()) - .setDeptResperTel(organizationSection.getResperTel()) - .setDeptMedServScp(organizationSection.getMedServScp()) - .setDeptEstbdat(organizationSection.getCreationDate()) - .setAprvBedCnt(organizationSection.getBedCnt()) - .setHiCrtfBedCnt(organizationSection.getSocialBedCnt()) - .setPoolareaNo(socialInsuplcAdmdvs) - .setDrPsncnt(organizationSection.getDrPsncnt()) - .setPharPsncnt(organizationSection.getPharPsncnt()) - .setNursPsncnt(organizationSection.getNursPsncnt()) - .setTecnPsncnt(organizationSection.getTecnPsncnt()) - .setMemo(organizationSection.getMemo())); - } catch (MessageException messageException) { - log.error("科室添加失败", messageException); - throw new MessageException("科室添加失败"); - } - } @Transactional(rollbackFor = Exception.class) public void edit(OrganizationSection organizationSection) { @@ -114,34 +89,9 @@ public class OrganizationSectionService extends BaseService { String processing = getString(caty); organizationSection.setCaty(processing); organizationSectionMapper.updateById(organizationSection); -// try { -// socialRequest.call3402(new com.syjiaer.clinic.server.modules.social.api.input.IM3402() -// .setHospDeptCodg(organizationSection.getCode()) -// .setHospDeptName(organizationSection.getName()) -// .setBegntime(organizationSection.getBeginDate()) -// .setEndtime(organizationSection.getEndDate()) -// .setItro(organizationSection.getInfo()) -// .setDeptResperName(organizationSection.getResperName()) -// .setDeptResperTel(organizationSection.getResperTel()) -// .setDeptMedServScp(organizationSection.getMedServScp()) -// .setCaty(organizationSection.getCaty()) -// .setDeptEstbdat(organizationSection.getCreationDate()) -// .setAprvBedCnt(organizationSection.getBedCnt()) -// .setHiCrtfBedCnt(organizationSection.getSocialBedCnt()) -// .setDrPsncnt(organizationSection.getDrPsncnt()) -// .setPharPsncnt(organizationSection.getPharPsncnt()) -// .setNursPsncnt(organizationSection.getNursPsncnt()) -// .setTecnPsncnt(organizationSection.getTecnPsncnt()) -// .setMemo(organizationSection.getMemo()) -// ); -// } catch (MessageException messageException) { -// log.error("科室修改失败", messageException); -// throw new MessageException("科室修改失败"); -// } } - @Transactional(rollbackFor = Exception.class) public void delete(Integer id) { OrganizationSection organizationSection = organizationSectionMapper.selectById(id); @@ -150,16 +100,6 @@ public class OrganizationSectionService extends BaseService { } organizationSection.setDelFlag(1); organizationSectionMapper.updateById(organizationSection); -// try { -// socialRequest.call3403(new com.syjiaer.clinic.server.modules.social.api.input.IM3403() -// .setHospDeptCodg(organizationSection.getCode()) -// .setHospDeptName(organizationSection.getName()) -// .setBegntime(organizationSection.getBeginDate()) -// ); -// } catch (MessageException messageException) { -// log.error("科室删除失败", messageException); -// throw new MessageException("科室删除失败"); -// } } public OrganizationSection get(int id) { QueryWrapper queryWrapper = new QueryWrapper<>(); 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 index ec19d8a..431ed93 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/social/SocialReconciliationService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/social/SocialReconciliationService.java @@ -12,7 +12,7 @@ import com.syjiaer.clinic.server.common.config.Config; import com.syjiaer.clinic.server.common.constants.Constants; import com.syjiaer.clinic.server.common.enums.ChargeTypeEnum; import com.syjiaer.clinic.server.common.exception.MessageException; -import com.syjiaer.clinic.server.common.util.DebugUtil; +import com.syjiaer.clinic.server.common.util.DateUtil; import com.syjiaer.clinic.server.common.util.FileUtil; import com.syjiaer.clinic.server.common.util.HttpUtil; import com.syjiaer.clinic.server.common.vo.Page; @@ -36,6 +36,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -129,7 +130,7 @@ public class SocialReconciliationService extends BaseService { * @param dto * @return */ - public OM3201 totalDo(ReconciliationItemDto dto) { + public OM3201 totalDo(ReconciliationItemDto dto,Boolean isRecordLog) { IM3201 im3201 = new IM3201(); IM3201.Data inData = new IM3201.Data(); inData.setInsutype(dto.getInsuranceType()); @@ -143,7 +144,9 @@ public class SocialReconciliationService extends BaseService { inData.setFixmedins_setl_cnt(new BigDecimal(dto.getSettlementCount())); im3201.setData(inData); OM3201 om3201 = socialRequest.call3201(im3201); - recordTotalReconciliationLog(dto, om3201); + if (isRecordLog){ + recordTotalReconciliationLog(dto, om3201); + } return om3201; } @@ -293,7 +296,7 @@ public class SocialReconciliationService extends BaseService { voList.add(vo); } - DebugUtil.out(voList); + System.out.println(voList); return voList; } @@ -329,4 +332,45 @@ public class SocialReconciliationService extends BaseService { } return pageHelper(query.getPageNum(), query.getPageSize(), queryWrapper, socialReconciliationLogMapper); } + + /** + * 自动对账 + */ + public void auto() { + //最后一次自动对账的时间 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("create_time"); + queryWrapper.last("limit 1"); + LocalDate lastTime = LocalDate.now(); + SocialReconciliationLog socialReconciliationLog = socialReconciliationLogMapper.selectOne(queryWrapper); + if (socialReconciliationLog != null){ + lastTime = socialReconciliationLog.getCreateTime().toLocalDate(); + } + + List dateList = DateUtil.getDatesBetween(lastTime, LocalDate.now()); + for (LocalDate date : dateList) { + LocalDateTime beginTime = date.atStartOfDay(); + LocalDateTime endTime = date.atTime(23, 59, 59); + List list = getList(beginTime,endTime); + for (ReconciliationItemVo vo : list){ + System.out.println(vo.toString()); + ReconciliationItemDto dto = new ReconciliationItemDto(); + dto.setReconciliationType(vo.getReconciliationType()); + dto.setInsuranceType(vo.getInsuranceType()); + dto.setHandlingInstitution(vo.getHandlingInstitution()); + dto.setTotalMedicalCost(vo.getTotalMedicalCost()); + dto.setTotalFundPayment(vo.getTotalFundPayment()); + dto.setTotalPersonalAccountPayment(vo.getTotalPersonalAccountPayment()); + dto.setSettlementCount(vo.getSettlementCount()); + dto.setBeginTime(beginTime); + dto.setEndTime(endTime); + try { + totalDo(dto,true); + }catch (Exception e){ + log.error("对账失败",e); + } +// + } + } + } } diff --git a/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java b/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java index 804f936..1dc6500 100644 --- a/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java +++ b/src/main/java/com/syjiaer/clinic/server/service/statistics/StatisticsService.java @@ -243,9 +243,10 @@ public class StatisticsService extends BaseService { ",sum(purchase_unit_price*inventory_whole_number) as total_cost"); goodsWrapper.eq("status", true); Map costAndPriceMap = goodsMapper.selectMaps(goodsWrapper).get(0); - - goodsStatistics.setTotalCost(new BigDecimal(costAndPriceMap.get("total_cost").toString())); - goodsStatistics.setTotalPrice(new BigDecimal(costAndPriceMap.get("total_price").toString())); + if(costAndPriceMap!=null){ + goodsStatistics.setTotalCost(new BigDecimal(costAndPriceMap.get("total_cost").toString())); + goodsStatistics.setTotalPrice(new BigDecimal(costAndPriceMap.get("total_price").toString())); + } QueryWrapper socialWrapper = new QueryWrapper<>(); socialWrapper.eq("status", true); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e2e50d7..4aeb28d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -10,10 +10,10 @@ spring: host: dev.jizhiweb.cn port: 6379 datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://dev.jizhiweb.cn:3306/syjiaer_clinic - username: root - password: i7L0BS91pADGuy7z + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://dev.jizhiweb.cn:3306/syjiaer_clinic + username: root + password: i7L0BS91pADGuy7z config: import: optional:classpath:developer-config.yml server: diff --git a/src/main/resources/xml/InventoryPurchaseMapper.xml b/src/main/resources/xml/InventoryPurchaseMapper.xml index fb5ea58..b7320c3 100644 --- a/src/main/resources/xml/InventoryPurchaseMapper.xml +++ b/src/main/resources/xml/InventoryPurchaseMapper.xml @@ -31,7 +31,7 @@