Commit 7b623153 authored by maqing's avatar maqing

Merge branch 'master' into dev_20230210_dtd

# Conflicts: # gateway-service/src/main/java/com/hungraim/ltc/gateway/config/ResourceServerConfig.java # gateway-service/src/main/java/com/hungraim/ltc/gateway/security/AuthorizationManager.java
parents 899b5a46 9153e277
...@@ -16,7 +16,7 @@ import java.util.List; ...@@ -16,7 +16,7 @@ import java.util.List;
@Repository @Repository
public interface ChDisabAccountsDetailMapper extends BaseMapper<ChDisabDetailAccounts> { public interface ChDisabAccountsDetailMapper extends BaseMapper<ChDisabDetailAccounts> {
List<OrganAccountsVO> getOrganAccountsList(@Param("taskDetailIds") List<String> taskDetailIds, String status); List<OrganAccountsVO> getOrganAccountsList(String taskDetailId);
Page<SrvOrganAccountListResp> searchSrvOrganAccountList(Page page, List<Long> organIds, SrvOrganListReq req); Page<SrvOrganAccountListResp> searchSrvOrganAccountList(Page page, List<Long> organIds, SrvOrganListReq req);
......
...@@ -35,7 +35,6 @@ import java.text.ParseException; ...@@ -35,7 +35,6 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service @Service
@AllArgsConstructor @AllArgsConstructor
...@@ -475,50 +474,68 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -475,50 +474,68 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
@Override @Override
public void organAccountTaskExecute(List<AccountTaskExecuteReqVO> accountTaskExecuteReqVOS) { public void organAccountTaskExecute(List<AccountTaskExecuteReqVO> accountTaskExecuteReqVOS) {
List<String> taskDetailIdList = accountTaskExecuteReqVOS.stream().map(AccountTaskExecuteReqVO::getTaskDetailId).collect(Collectors.toList()); if (CollectionUtil.isEmpty(accountTaskExecuteReqVOS)) {
// 已完成 return;
List<ChSrvTaskFinishItem> chSrvTaskFinishItems = chSrvTaskFinishItemMapper.selectList(new LambdaQueryWrapper<ChSrvTaskFinishItem>()
.in(ChSrvTaskFinishItem::getTaskDetailId, taskDetailIdList));
for (AccountTaskExecuteReqVO accountTaskExecuteReqVO : accountTaskExecuteReqVOS) {
// 一个任务下只要有一条服务完成就产生结算,多个服务完成算一条服务的结算(实际上结算详情有一条记录就产生结算费用)
List<ChSrvTaskFinishItem> chSrvTaskFinishItemStream = chSrvTaskFinishItems.stream().filter(s -> s.getItemId().equals(Long.valueOf(accountTaskExecuteReqVO.getItemId()))).collect(Collectors.toList());
String planId = accountTaskExecuteReqVO.getPlanId();
Integer integer = chSrvTaskDetailMapper.updateSrvPlanById(planId);
if (CollectionUtil.isNotEmpty(chSrvTaskFinishItemStream)) {
return;
}
ChSrvTaskFinishItem chSrvTaskFinishItem = new ChSrvTaskFinishItem();
chSrvTaskFinishItem.setTaskDetailId(Long.valueOf(accountTaskExecuteReqVO.getTaskDetailId()));
chSrvTaskFinishItem.setItemId(Long.valueOf(accountTaskExecuteReqVO.getItemId()));
chSrvTaskFinishItemMapper.insert(chSrvTaskFinishItem);
ChSrvTaskDetail ca = new ChSrvTaskDetail();
ca.setStatus((short)4);
ca.setTaskDetailId(Long.valueOf(accountTaskExecuteReqVO.getTaskDetailId()));
chSrvTaskDetailMapper.updateById(ca);
} }
List<String> taskDetailIds = accountTaskExecuteReqVOS.stream().map(AccountTaskExecuteReqVO::getTaskDetailId).collect(Collectors.toList());
List<OrganAccountsVO> accountsList = chDisabAccountsDetailMapper.getOrganAccountsList(taskDetailIds,"4"); List<String> taskDetailIds = accountTaskExecuteReqVOS.stream().map(AccountTaskExecuteReqVO::getTaskDetailId).distinct().collect(Collectors.toList());
// 根据机构,服务方式和时间查找结算表是否有数据,有数据进行累加 // 根据任务id查找结算详情,还没有对应的任务数据说明还未发生过结算,进行插入详情表和结算表
List<ChDisabDetailAccounts> chDisabDetailList = chDisabAccountsDetailMapper.queryAccountByCondition(taskDetailIds); List<ChDisabDetailAccounts> chDisabDetailList = chDisabAccountsDetailMapper.queryAccountByCondition(taskDetailIds);
// 详情表还没有对应的任务数据说明还未发生过结算,进行插入详情表和结算表 // 根据任务id分组,一个任务下会有多个项目,任务id相同
if(CollectionUtil.isEmpty(chDisabDetailList)){ Map<String, List<AccountTaskExecuteReqVO>> accountTaskMap = accountTaskExecuteReqVOS.stream().collect(Collectors.groupingBy(AccountTaskExecuteReqVO::getTaskDetailId));
for(Map.Entry<String, List<AccountTaskExecuteReqVO>> entry:accountTaskMap.entrySet()) {
String taskDetailId = entry.getKey();
// 已完成的任务,一个任务下有服务完成就产生结算,多个服务完成算一条服务的结算(实际上结算详情有一条记录就产生结算费用)
List<ChSrvTaskFinishItem> chSrvTaskFinishItems = chSrvTaskFinishItemMapper.selectList(new LambdaQueryWrapper<ChSrvTaskFinishItem>()
.eq(ChSrvTaskFinishItem::getTaskDetailId, taskDetailId));
List<AccountTaskExecuteReqVO> accountTaskList = entry.getValue();
// 处理具体的服务项目
for (AccountTaskExecuteReqVO accountTaskExecuteReqVO : accountTaskList) {
// 已完成的任务更新ch_srv_plan状态
String planId = accountTaskExecuteReqVO.getPlanId();
Integer integer = chSrvTaskDetailMapper.updateSrvPlanById(planId);
if (CollectionUtil.isNotEmpty(chSrvTaskFinishItems)) {
List<ChSrvTaskFinishItem> chSrvTaskFinishItemStream = chSrvTaskFinishItems.stream()
.filter(s -> s.getItemId().equals(Long.valueOf(accountTaskExecuteReqVO.getItemId()))).collect(Collectors.toList());
// 如果存在就不插入了
if (CollectionUtil.isNotEmpty(chSrvTaskFinishItemStream)) {
return;
}
}
ChSrvTaskFinishItem chSrvTaskFinishItem = new ChSrvTaskFinishItem();
chSrvTaskFinishItem.setTaskDetailId(Long.valueOf(accountTaskExecuteReqVO.getTaskDetailId()));
chSrvTaskFinishItem.setItemId(Long.valueOf(accountTaskExecuteReqVO.getItemId()));
chSrvTaskFinishItemMapper.insert(chSrvTaskFinishItem);
ChSrvTaskDetail ca = new ChSrvTaskDetail();
ca.setStatus((short) 4);
ca.setTaskDetailId(Long.valueOf(accountTaskExecuteReqVO.getTaskDetailId()));
chSrvTaskDetailMapper.updateById(ca);
}
accountSave( taskDetailId, chDisabDetailList);
}
}
private void accountSave(String taskDetailId, List<ChDisabDetailAccounts> chDisabDetailList) {
if (CollectionUtil.isEmpty(chDisabDetailList)) {
List<OrganAccountsVO> accountsList = chDisabAccountsDetailMapper.getOrganAccountsList(taskDetailId);
for (OrganAccountsVO accountsVO : accountsList) { for (OrganAccountsVO accountsVO : accountsList) {
ChDisabDetailAccounts chDisabDetailAccounts = new ChDisabDetailAccounts(); ChDisabDetailAccounts chDisabDetailAccounts = new ChDisabDetailAccounts();
chDisabDetailAccounts.setSrvOrganId(accountsVO.getSrvOrganId()); chDisabDetailAccounts.setSrvOrganId(accountsVO.getSrvOrganId());
//要判断是养老还是医疗,因为费用不一样 //要判断是养老还是医疗,因为费用不一样
BigDecimal limit = BigDecimal.valueOf(0); BigDecimal limit = BigDecimal.valueOf(0);
BigDecimal overallPercent = BigDecimal.valueOf(0.7); BigDecimal overallPercent = BigDecimal.valueOf(0.7);
BigDecimal personalPercent = BigDecimal.valueOf(0.3); BigDecimal personalPercent = BigDecimal.valueOf(0.3);
// 养老机构护理,其限额为 50 元/人/天 由长期护理保险基金支付 70% 个人支付 30% // 养老机构护理,其限额为 50 元/人/天 由长期护理保险基金支付 70% 个人支付 30%
if ("养老".equals(accountsVO.getSrvModeName())) { if ("养老".equals(accountsVO.getSrvModeName())) {
limit = BigDecimal.valueOf(50); limit = BigDecimal.valueOf(50);
// 医疗机构护理,原则上收治医疗护理需求为主的重度失能人员一级及以下医疗机构其限额为 80 元/人/天,由长期护理保险基金支付 70%,个人支付 30%; // 医疗机构护理,原则上收治医疗护理需求为主的重度失能人员一级及以下医疗机构其限额为 80 元/人/天,由长期护理保险基金支付 70%,个人支付 30%;
}else if("医疗".equals(accountsVO.getSrvModeName())&& "1".equals(accountsVO.getLevelCode()) && accountsVO.getDisableLevelName().contains("重度")){ // && accountsVO.getDisableLevelName().contains("重度")
} else if ("医疗".equals(accountsVO.getSrvModeName()) && "1".equals(accountsVO.getLevelCode())) {
limit = BigDecimal.valueOf(80); limit = BigDecimal.valueOf(80);
// 二级及以上医疗机构其限额为 100 元/人/天,由长期护理保险基金支付 70%,个人支付 30%; // 二级及以上医疗机构其限额为 100 元/人/天,由长期护理保险基金支付 70%,个人支付 30%;
}else if("医疗".equals(accountsVO.getSrvModeName())&& (!"1".equals(accountsVO.getLevelCode())) && accountsVO.getDisableLevelName().contains("重度")){ } else if ("医疗".equals(accountsVO.getSrvModeName()) && (!"1".equals(accountsVO.getLevelCode()))) {
limit = BigDecimal.valueOf(100); limit = BigDecimal.valueOf(100);
}else { } else {
return; return;
} }
chDisabDetailAccounts.setAccountsAllCost(limit); chDisabDetailAccounts.setAccountsAllCost(limit);
...@@ -528,10 +545,10 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -528,10 +545,10 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
chDisabDetailAccounts.setAccountsPersonalCost(personalCost); chDisabDetailAccounts.setAccountsPersonalCost(personalCost);
chDisabDetailAccounts.setModeName(accountsVO.getSrvModeName()); chDisabDetailAccounts.setModeName(accountsVO.getSrvModeName());
chDisabDetailAccounts.setCreationTime(new Date()); chDisabDetailAccounts.setCreationTime(new Date());
//结算时间为任务时间 // 结算时间为任务时间
chDisabDetailAccounts.setAccountsTime(DateUtils.strToTime(accountsVO.getSrvDate())); chDisabDetailAccounts.setAccountsTime(DateUtils.strToTime(accountsVO.getSrvDate()));
chDisabDetailAccounts.setAccountsStartTime(DateUtils.strToTime(accountsVO.getSrvStartTime())); //chDisabDetailAccounts.setAccountsStartTime(DateUtils.strToTime(accountsVO.getSrvStartTime()));
chDisabDetailAccounts.setAccountsEndTime(DateUtils.strToTime(accountsVO.getSrvEndTime())); //chDisabDetailAccounts.setAccountsEndTime(DateUtils.strToTime(accountsVO.getSrvEndTime()));
chDisabDetailAccounts.setTaskDetailId(accountsVO.getTaskDetailId()); chDisabDetailAccounts.setTaskDetailId(accountsVO.getTaskDetailId());
chDisabDetailAccounts.setMedicalArea(accountsVO.getMedicalArea()); chDisabDetailAccounts.setMedicalArea(accountsVO.getMedicalArea());
chDisabDetailAccounts.setItemIds(accountsVO.getItemId()); chDisabDetailAccounts.setItemIds(accountsVO.getItemId());
...@@ -540,13 +557,6 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -540,13 +557,6 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
chDisabDetailAccounts.setAccountsId(chDisabAccounts.getAccountsId()); chDisabDetailAccounts.setAccountsId(chDisabAccounts.getAccountsId());
chDisabAccountsDetailMapper.insert(chDisabDetailAccounts); chDisabAccountsDetailMapper.insert(chDisabDetailAccounts);
} }
}else {
ChDisabDetailAccounts chDisabDetailAccounts = new ChDisabDetailAccounts();
Long accountsDetailId = chDisabDetailList.get(0).getAccountsDetailId();
chDisabDetailAccounts.setAccountsDetailId(accountsDetailId);
String itemIds = chDisabDetailAccounts.getItemIds();
chDisabDetailAccounts.setItemIds(itemIds+","+accountTaskExecuteReqVOS.get(0).getItemId());
chDisabAccountsDetailMapper.updateById(chDisabDetailAccounts);
} }
} }
...@@ -593,7 +603,7 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis ...@@ -593,7 +603,7 @@ public class AccountServiceImpl extends ServiceImpl<ChDisabAccountsMapper, ChDis
chDisabDetailAccounts.setAccountsOverallCost(zero); chDisabDetailAccounts.setAccountsOverallCost(zero);
chDisabDetailAccounts.setModeName(accountsVO.getSrvModeName()); chDisabDetailAccounts.setModeName(accountsVO.getSrvModeName());
chDisabDetailAccounts.setCreationTime(new Date()); chDisabDetailAccounts.setCreationTime(new Date());
chDisabDetailAccounts.setAccountsTime(new Date()); chDisabDetailAccounts.setAccountsTime(DateUtils.strToDate(accountsVO.getSrvDate()));
chDisabDetailAccounts.setAccountsStartTime(DateUtils.strToTime(accountsVO.getSrvStartTime())); chDisabDetailAccounts.setAccountsStartTime(DateUtils.strToTime(accountsVO.getSrvStartTime()));
chDisabDetailAccounts.setAccountsEndTime(DateUtils.strToTime(accountsVO.getSrvEndTime())); chDisabDetailAccounts.setAccountsEndTime(DateUtils.strToTime(accountsVO.getSrvEndTime()));
chDisabDetailAccounts.setTaskDetailId(accountsVO.getTaskDetailId()); chDisabDetailAccounts.setTaskDetailId(accountsVO.getTaskDetailId());
......
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
--身份证号 --身份证号
disable.CERTI_CODE certiCode, disable.CERTI_CODE certiCode,
--所在省市 --所在省市
apply.MEDICAL_AREA medicalArea, (select district_name from ch_fnd_district dis where apply.MEDICAL_AREA = dis.district_code) medicalArea,
mode1.MODE_ID modeId, program.SRV_MODE_ID modeId,
--服务方式 --服务方式
mode1.mode_name srvModeName, DECODE(program.SRV_MODE_ID, '1','医疗','2', '养老','3','上门', '4', '异地') srvModeName,
--护理机构名称 --护理机构名称
organ.srv_organ_id srvOrganId, organ.srv_organ_id srvOrganId,
--护理机构名称 --护理机构名称
...@@ -23,41 +23,21 @@ ...@@ -23,41 +23,21 @@
emp.emp_name empName, emp.emp_name empName,
--任务时间 --任务时间
detail.SRV_DATE srvDate, detail.SRV_DATE srvDate,
detail.SRV_START_TIME srvStartTime,
detail.SRV_END_TIME srvEndTime,
-- 机构等级 -- 机构等级
organ.LEVEL_CODE levelCode, organ.LEVEL_CODE levelCode,
-- 失能等级
level1.DISABLE_LEVEL_NAME disableLevelName,
d.service_type_detailed_name itemName
,d.PARA_ID,
CSOP.ITEM_TIMES,
CSOP.ITEM_TIMES_TYPE,
CSTFI.ITEM_ID itemId CSTFI.ITEM_ID itemId
from ch_srv_task_detail detail--服务计划 from ch_srv_task_detail detail--服务计划
left join ch_srv_task task on task.srv_task_id = detail.srv_task_id--服务计划详情 left join ch_srv_task task on task.srv_task_id = detail.srv_task_id--服务计划详情
left join ch_disable_info disable on task.disab_info_id = disable.disab_info_id--失能人员 left join ch_disable_info disable on task.disab_info_id = disable.disab_info_id--失能人员
left join CH_DEV.CH_DISABLE_APPLY apply on apply.apply_id = disable.apply_id left join CH_DISABLE_APPLY apply on apply.apply_id = disable.apply_id
left join ch_apr_task aprtask on disable.last_task_id = aprtask.task_id--评定任务 left join ch_srv_organ_emp emp on task.srv_emp_id = emp.emp_id--护理人员
left join ch_apr_report report on aprtask.task_id = report.task_id--评定报告
left join ch_srv_program program on task.program_id = program.program_id--服务方案 left join ch_srv_program program on task.program_id = program.program_id--服务方案
left join ch_srv_organ organ on program.srv_organ_id = organ.srv_organ_id--服务机构 left join ch_srv_organ organ on program.srv_organ_id = organ.srv_organ_id--服务机构
left join ch_cfg_srv_mode mode1 on program.srv_mode_id = mode1.mode_id--服务方式
left join ch_srv_organ_emp emp on task.srv_emp_id = emp.emp_id--护理人员
-- 失能等级
left join ch_cfg_srv_disable_level level1 on report.disable_level_id = level1.disable_level_id
LEFT JOIN CH_SRV_TASK_FINISH_ITEM CSTFI ON detail.TASK_DETAIL_ID = CSTFI.TASK_DETAIL_ID LEFT JOIN CH_SRV_TASK_FINISH_ITEM CSTFI ON detail.TASK_DETAIL_ID = CSTFI.TASK_DETAIL_ID
LEFT JOIN CH_SRV_ORGAN_PROJECT CSOP ON CSOP.PROJECT_ID = CSTFI.ITEM_ID
LEFT JOIN CH_SERVICE_TYPE_detailed d on d.service_type_detailed_id = CSOP.item_name
<where> <where>
<if test="status != null and status != ''"> detail.STATUS = '4'
AND detail.STATUS = #{status} <if test="taskDetailId != null and taskDetailId != ''">
</if> AND detail.TASK_DETAIL_ID = #{taskDetailId}
<if test="taskDetailIds != null and taskDetailIds.size() > 0">
AND detail.TASK_DETAIL_ID IN
<foreach collection="taskDetailIds" separator="," open="(" close=")" item="taskDetailId">
#{taskDetailId}
</foreach>
</if> </if>
</where> </where>
</select> </select>
...@@ -169,7 +149,7 @@ select ...@@ -169,7 +149,7 @@ select
--身份证号 --身份证号
disable.CERTI_CODE certiCode, disable.CERTI_CODE certiCode,
--所在省市 --所在省市
apply.MEDICAL_AREA medicalArea, (select district_name from ch_fnd_district dis where apply.MEDICAL_AREA = dis.district_code) medicalArea,
mode1.MODE_ID modeId, mode1.MODE_ID modeId,
--服务方式 --服务方式
mode1.mode_name srvModeName, mode1.mode_name srvModeName,
...@@ -190,7 +170,7 @@ select ...@@ -190,7 +170,7 @@ select
from ch_srv_task_detail detail--服务计划 from ch_srv_task_detail detail--服务计划
left join ch_srv_task task on task.srv_task_id = detail.srv_task_id--服务计划详情 left join ch_srv_task task on task.srv_task_id = detail.srv_task_id--服务计划详情
left join ch_disable_info disable on task.disab_info_id = disable.disab_info_id--失能人员 left join ch_disable_info disable on task.disab_info_id = disable.disab_info_id--失能人员
left join CH_DEV.CH_DISABLE_APPLY apply on apply.apply_id = disable.apply_id left join CH_DISABLE_APPLY apply on apply.apply_id = disable.apply_id
left join ch_apr_task aprtask on disable.last_task_id = aprtask.task_id--评定任务 left join ch_apr_task aprtask on disable.last_task_id = aprtask.task_id--评定任务
left join ch_apr_report report on aprtask.task_id = report.task_id--评定报告 left join ch_apr_report report on aprtask.task_id = report.task_id--评定报告
left join ch_srv_program program on task.program_id = program.program_id--服务方案 left join ch_srv_program program on task.program_id = program.program_id--服务方案
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
d.ACCOUNTS_ALL_COST accountsAllCost, d.ACCOUNTS_ALL_COST accountsAllCost,
d.ACCOUNTS_OVERALL_COST accountsOverallCost, d.ACCOUNTS_OVERALL_COST accountsOverallCost,
d.ACCOUNTS_PERSONAL_COST accountsPersonalCost, d.ACCOUNTS_PERSONAL_COST accountsPersonalCost,
apply.MEDICAL_AREA medicalArea, (select district_name from ch_fnd_district dis where apply.MEDICAL_AREA = dis.district_code) medicalArea,
o.SRV_ORGAN_NAME srvOrganName, o.SRV_ORGAN_NAME srvOrganName,
info.REAL_NAME realName info.REAL_NAME realName
from CH_DISAB_ACCOUNTS_DETAIL d from CH_DISAB_ACCOUNTS_DETAIL d
......
...@@ -9,11 +9,14 @@ ...@@ -9,11 +9,14 @@
plan.TASK_DETAIL_ID taskDetailId, plan.TASK_DETAIL_ID taskDetailId,
plan.ITEM_NAME itemName, plan.ITEM_NAME itemName,
emp.emp_name empName, emp.emp_name empName,
organ.SRV_ORGAN_NAME srvOrganName,
DECODE(plan.MODE_ID, '1','医疗','2', '养老','3','上门', '4', '异地') srvModeName,
to_char(plan.SRV_PLAN_TIME,'yyyy-MM-dd') srvDate, to_char(plan.SRV_PLAN_TIME,'yyyy-MM-dd') srvDate,
plan.IS_STATUS status plan.IS_STATUS status
from ch_srv_plan plan from ch_srv_plan plan
left join ch_disable_info info on plan.DISAB_INFO_ID = info.DISAB_INFO_ID left join ch_disable_info info on plan.DISAB_INFO_ID = info.DISAB_INFO_ID
left join ch_srv_organ_emp emp on plan.emp_id = emp.emp_id left join ch_srv_organ_emp emp on plan.emp_id = emp.emp_id
left join CH_SRV_ORGAN organ on organ.SRV_ORGAN_ID = plan.SRV_ORGAN_ID
<where> <where>
<if test="req.status != null"> <if test="req.status != null">
and plan.IS_STATUS = #{req.status} and plan.IS_STATUS = #{req.status}
...@@ -21,6 +24,9 @@ ...@@ -21,6 +24,9 @@
<if test="req.realName != null"> <if test="req.realName != null">
AND info.real_name LIKE CONCAT('%',CONCAT(#{req.realName},'%')) AND info.real_name LIKE CONCAT('%',CONCAT(#{req.realName},'%'))
</if> </if>
<if test="req.srvOrganName != null">
AND organ.SRV_ORGAN_NAME LIKE CONCAT('%',CONCAT(#{req.srvOrganName},'%'))
</if>
</where> </where>
</select> </select>
......
...@@ -312,9 +312,12 @@ public class DisableController { ...@@ -312,9 +312,12 @@ public class DisableController {
if (chDisableApply.getSrvModeId() == null) { if (chDisableApply.getSrvModeId() == null) {
return Result.failed("申请服务方式不能为空!"); return Result.failed("申请服务方式不能为空!");
} }
if (StringUtils.isBlank(chDisableApply.getDiseaseDesc())) { if (chDisableApply.getDiseTypeF() == null) {
return Result.failed("疾病描述及诊断不能为空!"); return Result.failed("诊断疾病不能为空!");
} }
/* if (StringUtils.isBlank(chDisableApply.getDiseaseDesc())) {
return Result.failed("疾病描述及诊断不能为空!");
}*/
if (chDisableApply.getMedicalType() == null) { if (chDisableApply.getMedicalType() == null) {
return Result.failed("医保类型不能为空!"); return Result.failed("医保类型不能为空!");
} }
...@@ -367,9 +370,13 @@ public class DisableController { ...@@ -367,9 +370,13 @@ public class DisableController {
if (chDisableApply.getSrvModeId() == null) { if (chDisableApply.getSrvModeId() == null) {
return Result.failed("申请服务方式不能为空!"); return Result.failed("申请服务方式不能为空!");
} }
if (StringUtils.isBlank(chDisableApply.getDiseaseDesc())) { if (chDisableApply.getDiseTypeF() == null) {
return Result.failed("疾病描述及诊断不能为空!"); return Result.failed("诊断疾病不能为空!");
} }
/* if (StringUtils.isBlank(chDisableApply.getDiseaseDesc())) {
return Result.failed("疾病描述及诊断不能为空!");
}*/
if (chDisableApply.getMedicalType() == null) { if (chDisableApply.getMedicalType() == null) {
return Result.failed("医保类型不能为空!"); return Result.failed("医保类型不能为空!");
} }
......
...@@ -120,9 +120,8 @@ ...@@ -120,9 +120,8 @@
a.CHECK_REMARK checkRemark, a.CHECK_REMARK checkRemark,
a.REASONS_REVIEW reasonsReview, a.REASONS_REVIEW reasonsReview,
a.REASONS_REMARK reasonsRemark, a.REASONS_REMARK reasonsRemark,
a.MEDICAL_PROVINCIAL medicalProvincial, a.MEDICAL_AREA medicalArea,
a.MEDICAL_CITY medicalCity, a.BANK_CARD_NO bankCardNo
a.MEDICAL_AREA medicalArea
from CH_DISABLE_APPLY a from CH_DISABLE_APPLY a
LEFT JOIN CH_SRV_ORGAN o ON a.SRV_ORGAN_ID = o.SRV_ORGAN_ID LEFT JOIN CH_SRV_ORGAN o ON a.SRV_ORGAN_ID = o.SRV_ORGAN_ID
where a.APPLY_ID = #{applyId} where a.APPLY_ID = #{applyId}
......
...@@ -124,12 +124,13 @@ public class TaskServiceImpl implements TaskService { ...@@ -124,12 +124,13 @@ public class TaskServiceImpl implements TaskService {
如果省市区下没有对应的组长,就查询省市下的对应组长,如果省市下也没有就查询省下的组长 如果省市区下没有对应的组长,就查询省市下的对应组长,如果省市下也没有就查询省下的组长
*/ */
if (aprEmpVOS == null || aprEmpVOS.size() <= 0) { if (aprEmpVOS == null || aprEmpVOS.size() <= 0) {
if (StringUtils.isNotBlank(provincial) || StringUtils.isNotBlank(city) || StringUtils.isNotBlank(area)) { /*if (StringUtils.isNotBlank(provincial) || StringUtils.isNotBlank(city) || StringUtils.isNotBlank(area)) {
aprEmpVOS = taskMapper.aprEmpList(provincial, city, null, organName, name, tel, groupLeader); aprEmpVOS = taskMapper.aprEmpList(provincial, city, null, organName, name, tel, groupLeader);
if (aprEmpVOS == null || aprEmpVOS.size() <= 0) { if (aprEmpVOS == null || aprEmpVOS.size() <= 0) {
aprEmpVOS = taskMapper.aprEmpList(provincial, null, null, organName, name, tel, groupLeader); aprEmpVOS = taskMapper.aprEmpList(provincial, null, null, organName, name, tel, groupLeader);
} }
} }*/
aprEmpVOS = taskMapper.aprEmpList(null, null, null, organName, name, tel, groupLeader);
} }
return aprEmpVOS; return aprEmpVOS;
} }
......
...@@ -26,11 +26,11 @@ ...@@ -26,11 +26,11 @@
LEFT JOIN CH_FND_ORGAN t3 ON t2.ORGAN_ID = t3.ORGAN_ID LEFT JOIN CH_FND_ORGAN t3 ON t2.ORGAN_ID = t3.ORGAN_ID
left join ch_cfg_srv_mode mode1 on t1.mode_id = mode1.mode_id left join ch_cfg_srv_mode mode1 on t1.mode_id = mode1.mode_id
<where> <where>
<if test='req.accountsTime != null'> <if test="req.accountsTime != null and req.accountsTime != ''">
AND t1.ACCOUNTS_TIME = #{req.accountsTime} AND to_char(t1.ACCOUNTS_TIME,'yyyy-MM') = #{req.accountsTime}
</if> </if>
<if test='req.organName != null'> <if test="req.organName != null and req.organName != ''">
AND t2.ORGAN_NAME = #{req.organName} AND t2.ORGAN_NAME LIKE CONCAT('%',CONCAT(#{req.organName},'%'))
</if> </if>
</where> </where>
</select> </select>
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
d.ASSESS_COST assessAllCost, d.ASSESS_COST assessAllCost,
organ.organ_name assessOrganName, organ.organ_name assessOrganName,
to_char(d.ACCOUNTS_TIME,'yyyy-MM') accountsTime, to_char(d.ACCOUNTS_TIME,'yyyy-MM') accountsTime,
apply.MEDICAL_AREA medicalArea, (select district_name from ch_fnd_district dis where apply.MEDICAL_AREA = dis.district_code) medicalArea,
to_char(d.assess_time,'yyyy-MM-dd') assessTime, to_char(d.assess_time,'yyyy-MM-dd') assessTime,
emp.REAL_NAME empName emp.REAL_NAME empName
from CH_ASSESS_ACCOUNTS_DETAIL d from CH_ASSESS_ACCOUNTS_DETAIL d
...@@ -28,7 +28,7 @@ SELECT ...@@ -28,7 +28,7 @@ SELECT
t1.ASSESS_COST assessCost, t1.ASSESS_COST assessCost,
to_char(t1.assess_time,'yyyy-MM-dd') assessTime, to_char(t1.assess_time,'yyyy-MM-dd') assessTime,
t4.REAL_NAME empName, t4.REAL_NAME empName,
t2.MEDICAL_AREA medicalArea (select district_name from ch_fnd_district dis where t2.MEDICAL_AREA = dis.district_code) medicalArea,
FROM FROM
CH_ASSESS_ACCOUNTS_DETAIL t1 CH_ASSESS_ACCOUNTS_DETAIL t1
left join CH_DISABLE_APPLY t2 on t1.APPLY_ID = t2.APPLY_ID left join CH_DISABLE_APPLY t2 on t1.APPLY_ID = t2.APPLY_ID
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
LEFT JOIN ch_srv_organ srvOrgan ON organ.organ_id = srvOrgan.srv_organ_id LEFT JOIN ch_srv_organ srvOrgan ON organ.organ_id = srvOrgan.srv_organ_id
<where> <where>
and organ.STATUS = 0 and organ.STATUS = 0
<if test="provincial != null and provincial != ''"> <!--<if test="provincial != null and provincial != ''">
and (SELECT dis.DISTRICT_NAME FROM CH_FND_DISTRICT dis WHERE organ.DISTRICT_PROVINCIAL = dis.DISTRICT_CODE) = #{provincial} and (SELECT dis.DISTRICT_NAME FROM CH_FND_DISTRICT dis WHERE organ.DISTRICT_PROVINCIAL = dis.DISTRICT_CODE) = #{provincial}
</if> </if>
<if test="city != null and city != ''"> <if test="city != null and city != ''">
...@@ -247,7 +247,7 @@ ...@@ -247,7 +247,7 @@
</if> </if>
<if test="area != null and area != ''"> <if test="area != null and area != ''">
and (SELECT dis.DISTRICT_NAME FROM CH_FND_DISTRICT dis WHERE organ.DISTRICT_AREA = dis.DISTRICT_CODE) = #{area} and (SELECT dis.DISTRICT_NAME FROM CH_FND_DISTRICT dis WHERE organ.DISTRICT_AREA = dis.DISTRICT_CODE) = #{area}
</if> </if>-->
<if test="organName != null and organName != ''"> <if test="organName != null and organName != ''">
and organ.organ_name like CONCAT(CONCAT('%',#{organName}) ,'%') and organ.organ_name like CONCAT(CONCAT('%',#{organName}) ,'%')
</if> </if>
......
package com.hungraim.ltc.controller; package com.hungraim.ltc.controller;
import com.alibaba.fastjson.JSONObject;
import com.hungraim.ltc.util.CsoftSecurityUtil; import com.hungraim.ltc.util.CsoftSecurityUtil;
import com.hungraim.ltc.util.Result; import com.hungraim.ltc.util.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.security.core.Authentication; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.jwt.JwtHelper;
import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.endpoint.TokenEndpoint; import org.springframework.security.oauth2.provider.endpoint.TokenEndpoint;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.security.Principal; import java.security.Principal;
import java.util.Map; import java.util.Map;
...@@ -26,6 +24,7 @@ import java.util.Map; ...@@ -26,6 +24,7 @@ import java.util.Map;
@AllArgsConstructor @AllArgsConstructor
public class AuthController { public class AuthController {
private final RedisTemplate redisTemplate;
private final TokenEndpoint tokenEndpoint; private final TokenEndpoint tokenEndpoint;
@PostMapping("/token") @PostMapping("/token")
...@@ -48,15 +47,12 @@ public class AuthController { ...@@ -48,15 +47,12 @@ public class AuthController {
return Result.success(keyMap.get(0).toString()); return Result.success(keyMap.get(0).toString());
} }
@GetMapping("/authLogout") @PostMapping("/logout")
public Result authLogout(HttpServletRequest request, HttpServletResponse response) { public Result doLogout(String access_token){
Authentication auth = SecurityContextHolder.getContext().getAuthentication(); String claims = JwtHelper.decode(access_token).getClaims();
//清除认证 String jti = (String)JSONObject.parseObject(claims).get("jti");
if (auth != null) { redisTemplate.opsForValue().set(jti,access_token);
new SecurityContextLogoutHandler().logout(request, response, auth);
}
return Result.success(); return Result.success();
} }
} }
...@@ -12,6 +12,7 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur ...@@ -12,6 +12,7 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.logout.LogoutHandler; import org.springframework.security.web.authentication.logout.LogoutHandler;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
...@@ -20,7 +21,6 @@ import org.springframework.security.web.authentication.logout.SecurityContextLog ...@@ -20,7 +21,6 @@ import org.springframework.security.web.authentication.logout.SecurityContextLog
*/ */
@Configuration @Configuration
@EnableWebSecurity @EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)
@Order(1) @Order(1)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
...@@ -35,13 +35,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -35,13 +35,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).permitAll() .authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).permitAll()
.and() .and()
.authorizeRequests() .authorizeRequests()
.antMatchers("/getPublicKey","/oauth/*").permitAll() .antMatchers("/getPublicKey","/oauth/**").permitAll()
.anyRequest().authenticated() .anyRequest().authenticated();
.and()
.logout()
.logoutUrl("/oauth/logout")
.invalidateHttpSession(true);
} }
/** /**
......
...@@ -29,6 +29,7 @@ public class ChAprEmp { ...@@ -29,6 +29,7 @@ public class ChAprEmp {
private Integer cfgModeId; private Integer cfgModeId;
private Integer age; private Integer age;
private Integer aprempTypeIdF; private Integer aprempTypeIdF;
private Integer aprempTypeIdP;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private java.util.Date fcd; private java.util.Date fcd;
...@@ -51,4 +52,5 @@ public class ChAprEmp { ...@@ -51,4 +52,5 @@ public class ChAprEmp {
private java.util.Date effTime; private java.util.Date effTime;
private Integer aprOrganId; private Integer aprOrganId;
private Integer lcu; private Integer lcu;
} }
...@@ -610,12 +610,12 @@ public class ChDisableApply extends PageInfo implements Serializable { ...@@ -610,12 +610,12 @@ public class ChDisableApply extends PageInfo implements Serializable {
/** /**
*医保统筹区省 *医保统筹区省
*/ */
private String medicalProvincial; // private String medicalProvincial;
/** /**
*医保统筹区市 *医保统筹区市
*/ */
private String medicalCity; //private String medicalCity;
/** /**
*医保统筹区区 *医保统筹区区
......
...@@ -26,6 +26,12 @@ public class SrvOrganListReq extends BaseReq { ...@@ -26,6 +26,12 @@ public class SrvOrganListReq extends BaseReq {
*/ */
private Long srvOrganId; private Long srvOrganId;
/**
* 护理机构id
*/
private String srvOrganName;
/** /**
* 结算月份 * 结算月份
*/ */
......
...@@ -17,4 +17,5 @@ public class SrvTaskReqVO extends BaseReq { ...@@ -17,4 +17,5 @@ public class SrvTaskReqVO extends BaseReq {
private String status; private String status;
private String srvOrganName;
} }
...@@ -32,6 +32,6 @@ public class SrvTaskRespVO { ...@@ -32,6 +32,6 @@ public class SrvTaskRespVO {
private Long status; private Long status;
private String srvModeName;
} }
...@@ -16,7 +16,7 @@ public class SrvOrganListReq extends BaseReq { ...@@ -16,7 +16,7 @@ public class SrvOrganListReq extends BaseReq {
private Long organId; private Long organId;
private Long organName; private String organName;
/** /**
* 是否包含下级机构 * 是否包含下级机构
*/ */
...@@ -30,8 +30,7 @@ public class SrvOrganListReq extends BaseReq { ...@@ -30,8 +30,7 @@ public class SrvOrganListReq extends BaseReq {
/** /**
* 结算月份 * 结算月份
*/ */
@DateTimeFormat(pattern = "yyyy-MM")
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date accountsTime; private String accountsTime;
} }
...@@ -34,12 +34,12 @@ public class DisableExamineInfoVO { ...@@ -34,12 +34,12 @@ public class DisableExamineInfoVO {
/** /**
*医保统筹区省 *医保统筹区省
*/ */
private String medicalProvincial; // private String medicalProvincial;
/** /**
*医保统筹区市 *医保统筹区市
*/ */
private String medicalCity; // private String medicalCity;
/** /**
*医保统筹区区 *医保统筹区区
...@@ -125,6 +125,7 @@ public class DisableExamineInfoVO { ...@@ -125,6 +125,7 @@ public class DisableExamineInfoVO {
// 复评备注 // 复评备注
private String reasonsRemark; private String reasonsRemark;
private String bankCardNo;
private List<ChFndAttach> fileDataList; private List<ChFndAttach> fileDataList;
} }
...@@ -31,6 +31,8 @@ public enum ResultCode implements IResultCode, Serializable { ...@@ -31,6 +31,8 @@ public enum ResultCode implements IResultCode, Serializable {
TOKEN_INVALID_OR_EXPIRED("A0230", "token无效或已过期"), TOKEN_INVALID_OR_EXPIRED("A0230", "token无效或已过期"),
// 请求参数错误,参数校验不通过 // 请求参数错误,参数校验不通过
REQUEST_PARAM_ERROR("Q0001", "请求参数错误"), REQUEST_PARAM_ERROR("Q0001", "请求参数错误"),
//文件类型不匹配
FILE_TYPE_ERROR("F0001", "文件类型不支持"),
// 请求参数错误,参数校验不通过 // 请求参数错误,参数校验不通过
SRV_ORGAN_NOT_QUERY("S0001", "未查询到数据"), SRV_ORGAN_NOT_QUERY("S0001", "未查询到数据"),
/** /**
......
...@@ -56,6 +56,13 @@ ...@@ -56,6 +56,13 @@
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-resource-server</artifactId> <artifactId>spring-security-oauth2-resource-server</artifactId>
</dependency> </dependency>
<!--jwt-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.0.9.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
......
...@@ -102,6 +102,12 @@ ...@@ -102,6 +102,12 @@
<version>0.0.1</version> <version>0.0.1</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.hungraim.ltc</groupId>
<artifactId>account-api</artifactId>
<version>0.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<select id="queryPlan" resultType="com.hungraim.ltc.pojo.entity.governance.ChSrvPlan"> <select id="queryPlan" resultType="com.hungraim.ltc.pojo.entity.governance.ChSrvPlan">
select select
disable.DISAB_INFO_ID disabInfoId, disable.DISAB_INFO_ID disabInfoId,
mode1.MODE_ID modeId, disable.SRV_MODE_ID modeId,
--护理机构名称 --护理机构名称
organ.srv_organ_id srvOrganId, organ.srv_organ_id srvOrganId,
emp.emp_id empId, emp.emp_id empId,
...@@ -19,18 +19,15 @@ ...@@ -19,18 +19,15 @@
from ch_srv_task_detail detail --服务计划 from ch_srv_task_detail detail --服务计划
left join ch_srv_task task on task.srv_task_id = detail.srv_task_id--服务计划详情 left join ch_srv_task task on task.srv_task_id = detail.srv_task_id--服务计划详情
left join ch_disable_info disable on task.disab_info_id = disable.disab_info_id--失能人员 left join ch_disable_info disable on task.disab_info_id = disable.disab_info_id--失能人员
left join CH_DEV.CH_DISABLE_APPLY apply on apply.apply_id = disable.apply_id left join CH_DISABLE_APPLY apply on apply.apply_id = disable.apply_id
left join ch_srv_program program on task.program_id = program.program_id--服务方案 left join ch_srv_program program on task.program_id = program.program_id--服务方案
left join ch_srv_organ organ on program.srv_organ_id = organ.srv_organ_id--服务机构 left join ch_srv_organ organ on program.srv_organ_id = organ.srv_organ_id--服务机构
left join ch_cfg_srv_mode mode1 on program.srv_mode_id = mode1.mode_id--服务方式
left join ch_srv_organ_emp emp on task.srv_emp_id = emp.emp_id--护理人员 left join ch_srv_organ_emp emp on task.srv_emp_id = emp.emp_id--护理人员
left join CH_SRV_PROGRAM_SET CSTFI on CSTFI.PROGRAM_ID = task.program_id left join CH_SRV_PROGRAM_SET CSTFI on CSTFI.PROGRAM_ID = task.program_id
LEFT JOIN CH_SRV_ORGAN_PROJECT CSOP ON CSOP.PROJECT_ID = CSTFI.ITEM_ID LEFT JOIN CH_SRV_ORGAN_PROJECT CSOP ON CSOP.PROJECT_ID = CSTFI.ITEM_ID
LEFT JOIN CH_SERVICE_TYPE_detailed d on d.service_type_detailed_id = CSOP.item_name LEFT JOIN CH_SERVICE_TYPE_detailed d on d.service_type_detailed_id = CSOP.item_name
<where> <where>
mode1.mode_name in ('医疗','养老') and program.program_id =#{programId} disable.SRV_MODE_ID in ('1','2') and program.program_id =#{programId}
</where> </where>
order by detail.SRV_DATE desc order by detail.SRV_DATE desc
</select> </select>
......
...@@ -4,11 +4,14 @@ import lombok.Data; ...@@ -4,11 +4,14 @@ import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
@Component @Component
@Data @Data
@ConfigurationProperties(prefix = "file.upload") @ConfigurationProperties(prefix = "file.upload")
public class FileUploadConfig { public class FileUploadConfig {
private String path; private String path;
private List<String> type;
} }
...@@ -38,7 +38,16 @@ public class FileUploadController { ...@@ -38,7 +38,16 @@ public class FileUploadController {
if (null == uploadType || null == file) { if (null == uploadType || null == file) {
return Result.failed(ResultCode.REQUEST_PARAM_ERROR); return Result.failed(ResultCode.REQUEST_PARAM_ERROR);
} }
//过滤上传资料类型
String originalFilename = file.getOriginalFilename(); String originalFilename = file.getOriginalFilename();
//文件类型
String fileType = originalFilename.substring(file.getOriginalFilename().lastIndexOf("."));
List<String> fileTypes = fileUploadConfig.getType();
log.info("支持图片类型:" + fileTypes+",上传的图片类型:"+fileType);
if(!fileTypes.stream().anyMatch(e->e.equalsIgnoreCase(fileType))){
log.info("上传文件错误");
return Result.failed(ResultCode.FILE_TYPE_ERROR);
}
String realPath = FileUtils.uploadFile(file, fileUploadConfig.getPath()); String realPath = FileUtils.uploadFile(file, fileUploadConfig.getPath());
log.info("文件上传成功:{}", realPath); log.info("文件上传成功:{}", realPath);
Long attachId = attachService.saveFileInfo(originalFilename, realPath, uploadType); Long attachId = attachService.saveFileInfo(originalFilename, realPath, uploadType);
......
...@@ -34,4 +34,21 @@ mybatis-plus: ...@@ -34,4 +34,21 @@ mybatis-plus:
file: file:
upload: upload:
path: E:/workspace/upload path: E:/workspace/upload
\ No newline at end of file type:
- .png
- .gif
- .jpg
- .jpeg
- .bmp
- .zip
- .rar
- .7z
- .gz
- .doc
- .docx
- .xls
- .xlsx
- .pdf
- .txt
- .csv
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