Commit 8568297d authored by zhangwanglin's avatar zhangwanglin

批量退回和基金申报导出

parent ce9e3c26
...@@ -119,6 +119,17 @@ public class AccountController { ...@@ -119,6 +119,17 @@ public class AccountController {
return result; return result;
} }
/**
* 批量退回
*
* @return
*/
@PostMapping("/batchAccountReturn")
public Result batchAccountReturn(AccountTaskReqVO accountTaskReqVO){
List<AccountTaskExecuteReqVO> accountTaskExecuteReqVOS = accountTaskReqVO.getAccountTaskList();
Result result = accountService.batchAccountReturn(accountTaskExecuteReqVOS);
return result;
}
@GetMapping("/getOtherPlace") @GetMapping("/getOtherPlace")
public Result otherPlaceHandler(String programId){ public Result otherPlaceHandler(String programId){
...@@ -223,8 +234,11 @@ public class AccountController { ...@@ -223,8 +234,11 @@ public class AccountController {
*/ */
@GetMapping("/queryAccountsDeclareList") @GetMapping("/queryAccountsDeclareList")
public Result<Page<ChDisabDetailAccountsResp>> queryAccountsDeclareList(@RequestHeader("Authorization") String token,Integer pageNum, Integer pageSize,SrvOrganListReq srvOrganListReq) { public Result<Page<ChDisabDetailAccountsResp>> queryAccountsDeclareList(@RequestHeader("Authorization") String token,Integer pageNum, Integer pageSize,SrvOrganListReq srvOrganListReq) {
List<String> accountsStatusList = Arrays.asList("0", "1","2"); String accountsStatus = srvOrganListReq.getAccountsStatus();
srvOrganListReq.setAccountsStatusList(accountsStatusList); if(StringUtils.isEmpty(accountsStatus)) {
List<String> accountsStatusList = Arrays.asList("0", "1", "2");
srvOrganListReq.setAccountsStatusList(accountsStatusList);
}
long srvOrganId = TokenParsingUtil.TokenParsing(token, "srvOrganId"); long srvOrganId = TokenParsingUtil.TokenParsing(token, "srvOrganId");
if(srvOrganId !=0) { if(srvOrganId !=0) {
srvOrganListReq.setSrvOrganId(srvOrganId); srvOrganListReq.setSrvOrganId(srvOrganId);
...@@ -236,6 +250,23 @@ public class AccountController { ...@@ -236,6 +250,23 @@ public class AccountController {
} }
/** /**
* 基金申报导出
* @param
* @return
*/
@GetMapping("/accountsDeclareExport")
public void accountsDeclareExport(@RequestHeader("Authorization") String token,SrvOrganListReq req,HttpServletResponse response){
long srvOrganId = TokenParsingUtil.TokenParsing(token, "srvOrganId");
if(srvOrganId !=0) {
req.setSrvOrganId(srvOrganId);
}
Workbook workbook = accountService.accountsDeclareExport(req);
// 命名表格
String fileName = "accountsDeclare.xlsx";
FileUtils.exportResponse(workbook,fileName,response);
}
/**
* 暂缓列表查询 * 暂缓列表查询
* @param * @param
* @return * @return
...@@ -387,7 +418,7 @@ public class AccountController { ...@@ -387,7 +418,7 @@ public class AccountController {
} }
@RequestMapping("/accountReturn") @RequestMapping("/accountReturn")
public Result accountReturn(SrvTaskRespVO srvTaskRespVO) { public Result accountReturn(AccountTaskExecuteReqVO srvTaskRespVO) {
Result result = accountService.accountReturn(srvTaskRespVO); Result result = accountService.accountReturn(srvTaskRespVO);
return result; return result;
......
...@@ -46,4 +46,7 @@ public interface ChDisabAccountsDetailMapper extends BaseMapper<ChDisabDetailAcc ...@@ -46,4 +46,7 @@ public interface ChDisabAccountsDetailMapper extends BaseMapper<ChDisabDetailAcc
int queryTaskDetailDisable(TaskDetailDisableVO taskDetailDisableVO); int queryTaskDetailDisable(TaskDetailDisableVO taskDetailDisableVO);
List<AccountDeclareExportResp> queryAccountsDeclareExport(SrvOrganListReq req);
} }
\ No newline at end of file
...@@ -37,6 +37,8 @@ public interface AccountService extends IService<ChDisabAccounts> { ...@@ -37,6 +37,8 @@ public interface AccountService extends IService<ChDisabAccounts> {
Workbook accountsDeclareExport(SrvOrganListReq req);
Page<NursingRecordsRespVO> queryNursingRecords(NursingReqVO nursingReqVO); Page<NursingRecordsRespVO> queryNursingRecords(NursingReqVO nursingReqVO);
...@@ -72,5 +74,7 @@ public interface AccountService extends IService<ChDisabAccounts> { ...@@ -72,5 +74,7 @@ public interface AccountService extends IService<ChDisabAccounts> {
void placeOtherTaskQuery(); void placeOtherTaskQuery();
//退回 //退回
Result accountReturn(SrvTaskRespVO srvTaskRespVO); Result accountReturn(AccountTaskExecuteReqVO srvTaskRespVO);
Result batchAccountReturn(List<AccountTaskExecuteReqVO> srvTaskListRespVO);
} }
...@@ -488,6 +488,16 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -488,6 +488,16 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
return workbook; return workbook;
} }
@Override
public Workbook accountsDeclareExport(SrvOrganListReq req) {
List<AccountDeclareExportResp> accountDeclareExportResps = chDisabAccountsDetailMapper.queryAccountsDeclareExport(req);
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF); //对应xlsx
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, AccountDeclareExportResp.class, accountDeclareExportResps);
return workbook;
}
@Override @Override
public Page<ChDisabDetailAccountsResp> queryOrganAccountsDetail(Integer pageNum, Integer pageSize,SrvOrganListReq srvOrganListReq) { public Page<ChDisabDetailAccountsResp> queryOrganAccountsDetail(Integer pageNum, Integer pageSize,SrvOrganListReq srvOrganListReq) {
...@@ -1104,21 +1114,33 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -1104,21 +1114,33 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
} }
} }
//退回 /**
*@desc 退回
* 1、根据服务机构,时间,失能人员,服务方式查询结算明细表
* 2、删除完成项目表的数据
* 3、查询计划表是否还有已完成的任务,有就只更新状态,
* 只有一条记录结算明细表需要退回费用,并更新服务计划详情表状态
**/
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result accountReturn(SrvTaskRespVO srvTaskRespVO){ public Result accountReturn(AccountTaskExecuteReqVO srvTaskRespVO){
Long taskDetailId = srvTaskRespVO.getTaskDetailId(); Result result = accountReturnHandler(srvTaskRespVO);
return result;
}
public Result accountReturnHandler(AccountTaskExecuteReqVO srvTaskRespVO) {
Long taskDetailId = Long.valueOf(srvTaskRespVO.getTaskDetailId());
String disabInfoId = srvTaskRespVO.getDisabInfoId(); String disabInfoId = srvTaskRespVO.getDisabInfoId();
String srvModeName = srvTaskRespVO.getSrvModeName(); String srvModeName = srvTaskRespVO.getSrvModeName();
String srvPlanTime = srvTaskRespVO.getSrvDate(); String srvPlanTime = srvTaskRespVO.getSrvDate();
Date date = DateUtils.strToDate(srvPlanTime); Date date = DateUtils.strToDate(srvPlanTime);
String srvOrganId = srvTaskRespVO.getSrvOrganId(); String srvOrganId = srvTaskRespVO.getSrvOrganId();
Long itemId = srvTaskRespVO.getItemId(); String itemId = srvTaskRespVO.getItemId();
log.info("AccountServiceImpl====accountReturn===taskDetailId:{},disabInfoId:{},srvPlanTime:{},itemId:{}",taskDetailId,disabInfoId,srvPlanTime,itemId); log.info("AccountServiceImpl====accountReturn===taskDetailId:{},disabInfoId:{},srvPlanTime:{},itemId:{}", taskDetailId, disabInfoId, srvPlanTime, itemId);
ChDisabDetailAccounts chDisabDetailAccounts = chDisabAccountsDetailMapper.queryDisabDetailAccounts(String.valueOf(srvOrganId), DateUtils.dateToStrYm(date), disabInfoId, srvModeName); ChDisabDetailAccounts chDisabDetailAccounts = chDisabAccountsDetailMapper.queryDisabDetailAccounts(String.valueOf(srvOrganId), DateUtils.dateToStrYm(date), disabInfoId, srvModeName);
Short status = chDisabDetailAccounts.getStatus(); Short status = chDisabDetailAccounts.getStatus();
if(status != 0){ if (status != 0) {
return Result.failed("此任务已提交申报,不可再操作,请联系管理员"); return Result.failed("此任务已提交申报,不可再操作,请联系管理员");
} }
// 删除 chSrvTaskFinishItemStream // 删除 chSrvTaskFinishItemStream
...@@ -1126,63 +1148,80 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -1126,63 +1148,80 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
.eq(ChSrvTaskFinishItem::getTaskDetailId, taskDetailId) .eq(ChSrvTaskFinishItem::getTaskDetailId, taskDetailId)
.eq(ChSrvTaskFinishItem::getItemId, itemId); .eq(ChSrvTaskFinishItem::getItemId, itemId);
int delete = chSrvTaskFinishItemMapper.delete(chSrvTaskFinishItem); int delete = chSrvTaskFinishItemMapper.delete(chSrvTaskFinishItem);
LambdaQueryWrapper<ChSrvPlan> queryWrapper= new LambdaQueryWrapper<>(); LambdaQueryWrapper<ChSrvPlan> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ChSrvPlan::getTaskDetailId,taskDetailId); // 一个失能人员对应多个护理人员的情况,需要用时间统计
//queryWrapper.eq(ChSrvPlan::getTaskDetailId,taskDetailId);
queryWrapper.eq(ChSrvPlan::getSrvPlanTime, date);
queryWrapper.eq(ChSrvPlan::getDisabInfoId, disabInfoId);
queryWrapper.eq(ChSrvPlan::getIsStatus, (short) 4); queryWrapper.eq(ChSrvPlan::getIsStatus, (short) 4);
List<ChSrvPlan> srvPlanList = chSrvPlanMapper.selectList(queryWrapper); List<ChSrvPlan> srvPlanList = chSrvPlanMapper.selectList(queryWrapper);
int size = srvPlanList.size(); int size = srvPlanList.size();
log.info("accountReturn===paln===size:{}",size); log.info("accountReturn===paln===size:{}", size);
// 大于1说明还有已完成的任务,不退回,只更新状态 等于1结算退回费用 // 大于1说明还有已完成的任务,不退回,只更新状态 等于1结算退回费用
try {
ChSrvPlan chSrvPlan = new ChSrvPlan();
chSrvPlan.setIsStatus(0L);
chSrvPlan.setIsBill(0L);
chSrvPlan.setLcd(new Date());
chSrvPlan.setPlanID(srvTaskRespVO.getPlanId());
chSrvPlanMapper.updateById(chSrvPlan);
if(size == 1){
BigDecimal accountsAllCost = chDisabDetailAccounts.getAccountsAllCost();
if (accountsAllCost.compareTo(BigDecimal.ZERO) == 0) {
return Result.success("当前费用为0,不再进行费用退回");
}
BigDecimal accountsOverallCost = chDisabDetailAccounts.getAccountsOverallCost();
BigDecimal accountsPersonalCost = chDisabDetailAccounts.getAccountsPersonalCost();
BigDecimal allCost = new BigDecimal(0);
BigDecimal overCost= new BigDecimal(0);
BigDecimal personCost = new BigDecimal(0);
if ("养老".equals(srvModeName)) {
allCost = BigDecimal.valueOf(50);
overCost = BigDecimal.valueOf(35);
personCost = BigDecimal.valueOf(15);
// 医疗机构护理,原则上收治医疗护理需求为主的重度失能人员一级及以下医疗机构其限额为 80 元/人/天,由长期护理保险基金支付 70%,个人支付 30%;
} else if ("医疗".equals(srvModeName) && "1".equals(srvTaskRespVO.getLevelCode())) {
allCost = BigDecimal.valueOf(80);
overCost = BigDecimal.valueOf(56);
personCost = BigDecimal.valueOf(24);
// 二级及以上医疗机构其限额为 100 元/人/天,由长期护理保险基金支付 70%,个人支付 30%;
} else if ("医疗".equals(srvModeName) && (!"1".equals(srvTaskRespVO.getLevelCode()))) {
allCost = BigDecimal.valueOf(100);
overCost = BigDecimal.valueOf(70);
personCost = BigDecimal.valueOf(30);
} else if ("上门".equals(srvModeName)) {
allCost = BigDecimal.valueOf(75);
overCost = BigDecimal.valueOf(60);
personCost = BigDecimal.valueOf(15);
}
BigDecimal allCostSubtract = accountsAllCost.subtract(allCost);
BigDecimal overCostSubtract = accountsOverallCost.subtract(overCost);
BigDecimal personCostSubtract = accountsPersonalCost.subtract(personCost);
chDisabDetailAccounts.setAccountsAllCost(allCostSubtract);
chDisabDetailAccounts.setAccountsOverallCost(overCostSubtract);
chDisabDetailAccounts.setAccountsPersonalCost(personCostSubtract);
chDisabDetailAccounts.setLcd(new Date());
chDisabAccountsDetailMapper.updateById(chDisabDetailAccounts);
ChSrvTaskDetail ca = new ChSrvTaskDetail();
ca.setStatus((short) 0);
ca.setTaskDetailId(Long.valueOf(taskDetailId));
chSrvTaskDetailMapper.updateById(ca);
ChSrvPlan chSrvPlan = new ChSrvPlan();
chSrvPlan.setIsStatus(0L);
chSrvPlan.setIsBill(0L);
chSrvPlan.setLcd(new Date());
chSrvPlan.setPlanID(Long.valueOf(srvTaskRespVO.getPlanId()));
chSrvPlanMapper.updateById(chSrvPlan);
if (size == 1) {
BigDecimal accountsAllCost = chDisabDetailAccounts.getAccountsAllCost();
if (accountsAllCost.compareTo(BigDecimal.ZERO) == 0) {
return Result.success("当前费用为0,不再进行费用退回");
}
BigDecimal accountsOverallCost = chDisabDetailAccounts.getAccountsOverallCost();
BigDecimal accountsPersonalCost = chDisabDetailAccounts.getAccountsPersonalCost();
BigDecimal allCost = new BigDecimal(0);
BigDecimal overCost = new BigDecimal(0);
BigDecimal personCost = new BigDecimal(0);
if ("养老".equals(srvModeName)) {
allCost = BigDecimal.valueOf(50);
overCost = BigDecimal.valueOf(35);
personCost = BigDecimal.valueOf(15);
// 医疗机构护理,原则上收治医疗护理需求为主的重度失能人员一级及以下医疗机构其限额为 80 元/人/天,由长期护理保险基金支付 70%,个人支付 30%;
} else if ("医疗".equals(srvModeName) && "1".equals(srvTaskRespVO.getLevelCode())) {
allCost = BigDecimal.valueOf(80);
overCost = BigDecimal.valueOf(56);
personCost = BigDecimal.valueOf(24);
// 二级及以上医疗机构其限额为 100 元/人/天,由长期护理保险基金支付 70%,个人支付 30%;
} else if ("医疗".equals(srvModeName) && (!"1".equals(srvTaskRespVO.getLevelCode()))) {
allCost = BigDecimal.valueOf(100);
overCost = BigDecimal.valueOf(70);
personCost = BigDecimal.valueOf(30);
} else if ("上门".equals(srvModeName)) {
allCost = BigDecimal.valueOf(75);
overCost = BigDecimal.valueOf(60);
personCost = BigDecimal.valueOf(15);
}
BigDecimal allCostSubtract = accountsAllCost.subtract(allCost);
BigDecimal overCostSubtract = accountsOverallCost.subtract(overCost);
BigDecimal personCostSubtract = accountsPersonalCost.subtract(personCost);
chDisabDetailAccounts.setAccountsAllCost(allCostSubtract);
chDisabDetailAccounts.setAccountsOverallCost(overCostSubtract);
chDisabDetailAccounts.setAccountsPersonalCost(personCostSubtract);
chDisabDetailAccounts.setLcd(new Date());
chDisabAccountsDetailMapper.updateById(chDisabDetailAccounts);
ChSrvTaskDetail ca = new ChSrvTaskDetail();
ca.setStatus((short) 0);
ca.setTaskDetailId(Long.valueOf(taskDetailId));
chSrvTaskDetailMapper.updateById(ca);
}
return Result.success();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result batchAccountReturn(List<AccountTaskExecuteReqVO> srvTaskListRespVO){
try {
for (AccountTaskExecuteReqVO srvTaskRespVO : srvTaskListRespVO) {
Result result = accountReturnHandler(srvTaskRespVO);
if(!ResultCode.SUCCESS.getCode().equals(result.getCode())){
return result;
} }
}
} catch (Exception e) { } catch (Exception e) {
log.error("==============accountReturn error:{}",e); log.error("==============accountReturn error:{}",e);
return Result.failed("服务器异常"); return Result.failed("服务器异常");
...@@ -1191,3 +1230,5 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -1191,3 +1230,5 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
} }
} }
...@@ -64,6 +64,62 @@ ...@@ -64,6 +64,62 @@
order by info.DISAB_INFO_ID order by info.DISAB_INFO_ID
</select> </select>
<select id="queryAccountsDeclareExport" resultType="com.hungraim.ltc.pojo.vo.account.AccountDeclareExportResp">
select
d.MODE_NAME modeName,
to_char(d.ACCOUNTS_START_TIME,'yyyy-MM-dd') accountsStartTime,
to_char(d.ACCOUNTS_END_TIME,'yyyy-MM-dd') accountsEndTime,
to_char(d.ACCOUNTS_TIME,'yyyy-MM') accountsTime,
d.ACCOUNTS_ALL_COST accountsAllCost,
d.ACCOUNTS_OVERALL_COST accountsOverallCost,
d.ACCOUNTS_PERSONAL_COST accountsPersonalCost,
d.TASK_DETAIL_ID taskDetailId,
(select district_name from ch_fnd_district dis where apply.MEDICAL_AREA = dis.district_code) medicalArea,
o.SRV_ORGAN_NAME srvOrganName,
o.SRV_ORGAN_ID srvOrganId,
info.REAL_NAME realName,
info.DISAB_INFO_ID disabInfoId,
d.DEDUCTION_AMOUNT deductionAmount,
d.REISSUE_AMOUNT reissueAmount,
d.ACCOUNTS_DETAIL_ID accountsDetailId,
DECODE(d.STATUS, '0','未申报','1', '已申报','2','已暂缓') status,
d.ACCOUNTS_ID accountsId
from CH_DISAB_ACCOUNTS_DETAIL d
left join CH_DISABLE_INFO info on d.DISAB_INFO_ID = info.DISAB_INFO_ID
left join CH_DISABLE_APPLY apply on info.APPLY_ID=apply.APPLY_ID
left join CH_SRV_ORGAN o on d.SRV_ORGAN_ID = o.SRV_ORGAN_ID
<where>
d.mode_name <![CDATA[ <>]]> '异地'
<if test="modeId != null and modeId != ''">
and DECODE(d.mode_name, '医疗','1','养老', '2','上门','3', '异地', '4') = #{modeId}
</if>
<if test="accountsStatus != null and accountsStatus != ''">
and d.status = #{accountsStatus}
</if>
<if test="realName != null and realName != ''">
AND info.real_name LIKE CONCAT('%',CONCAT(#{realName},'%'))
</if>
<if test="srvOrganId != null and srvOrganId != '' and srvOrganId!=0">
and d.SRV_ORGAN_ID = #{srvOrganId}
</if>
<if test="accountsTime != null and accountsTime != ''">
AND to_char(d.ACCOUNTS_TIME,'yyyy-MM') = #{accountsTime}
</if>
<if test='accountsStatusList != null and accountsStatusList.size()>0'>
AND d.status IN
<foreach collection="accountsStatusList" open="(" close=")" item="accountsStatusList" separator=",">
#{accountsStatusList}
</foreach>
</if>
</where>
order by info.DISAB_INFO_ID
</select>
<select id="queryNursingRecords" resultType="com.hungraim.ltc.pojo.entity.account.NursingRecordsRespVO"> <select id="queryNursingRecords" resultType="com.hungraim.ltc.pojo.entity.account.NursingRecordsRespVO">
select organ.SRV_ORGAN_NAME srvOrganName, select organ.SRV_ORGAN_NAME srvOrganName,
to_char(plan.SRV_PLAN_TIME,'yyyy-MM-dd') srvPlanTime, to_char(plan.SRV_PLAN_TIME,'yyyy-MM-dd') srvPlanTime,
......
package com.hungraim.ltc.pojo.vo.account;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
/**
* @author zwl
* @ClassName AccountDeclareExportResp
* @description 基金申报导出
* @date 2023/7/19 17:04
**/
@Data
public class AccountDeclareExportResp {
@Excel(name = "统筹区",width = 20)
private String medicalArea;
@Excel(name = "账单月份",width = 20)
private String accountsTime;
@Excel(name = "失能人员",width = 20)
private String realName;
/**
* 护理机构名称
*/
@Excel(name = "护理机构名称",width = 20)
private String srvOrganName;
/**
* 护理机构名称
*/
@Excel(name = "服务方式",width = 20)
private String modeName;
/**
* 总费用
*/
@Excel(name = "总费用合计",width = 20)
private String accountsAllCost;
/**
* 统筹费用
*/
@Excel(name = "统筹支出合计",width = 20)
private String accountsOverallCost;
/**
* 个人支付
*/
@Excel(name = "自付合计",width = 20)
private String accountsPersonalCost;
@Excel(name = "申报状态")
private String status;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment