Browse Source

Merge branch 'feat-20240108-financialreview'

lixuesong 1 year ago
parent
commit
9267bfd68f
27 changed files with 898 additions and 82 deletions
  1. 11 0
      db/v2.0/20240105.sql
  2. 19 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsState.java
  3. 25 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsType.java
  4. 6 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysDept.java
  5. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  6. 4 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java
  7. 6 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaDrugEntController.java
  8. 214 4
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java
  9. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaAgent.java
  10. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaDrugEnt.java
  11. 16 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackageSettleNote.java
  12. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java
  13. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleOutput.java
  14. 90 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/SettleFinancialReviewSettleDetailVO.java
  15. 74 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/SettleFinancialReviewVO.java
  16. 2 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SettleStatusEnum.java
  17. 17 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScorePackageMapper.java
  18. 16 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java
  19. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageService.java
  20. 8 6
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaAgentServiceImpl.java
  21. 4 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaDrugEntServiceImpl.java
  22. 173 7
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java
  23. 89 56
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java
  24. 4 1
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptMapper.xml
  25. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaAgentMapper.xml
  26. 2 1
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaDrugEntMapper.xml
  27. 71 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageMapper.xml

+ 11 - 0
db/v2.0/20240105.sql

@@ -0,0 +1,11 @@
+alter table sys_dept
+    add financial_review_type char(10) null comment '财务复核方式';
+
+alter table wm_score_package_settle_note
+    add review_status char(20) null comment '财务复核状态';
+
+alter table wm_score_package_settle_note
+    add review_time datetime null comment '复核时间';
+
+alter table wm_score_package_settle_note
+    add review_user int null comment '复核人';

+ 19 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsState.java

@@ -30,4 +30,23 @@ public class UpmsState {
 		private final String status;
 		private final String status;
 		private final String description;
 		private final String description;
 	}
 	}
+
+	/**
+	 * 积分包结算财务复核状态
+	 *
+	 * @author lixuesong
+	 * @date 2024/01/05
+	 */
+	@Getter
+	@AllArgsConstructor
+	public enum SettleFinancialReviewStatus {
+		AUTO("AUTO", "自动"),
+		TO_BE_REVIEWED("TO_BE_REVIEWED", "待复核"),
+		PASSED("PASSED", "通过"),
+		REJECTED("REJECTED", "拒绝");
+
+		@EnumValue
+		private final String status;
+		private final String description;
+	}
 }
 }

+ 25 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsType.java

@@ -260,4 +260,29 @@ public final class UpmsType {
 		 */
 		 */
 		private final String description;
 		private final String description;
 	}
 	}
+
+	/**
+	 * 财务复核方式
+	 *
+	 * @author lixuesong
+	 * @date 2024/01/05
+	 */
+	@Getter
+	@AllArgsConstructor
+	public enum FinancialReviewType {
+		AUTO("AUTO", "自动"),
+		MANUAL("MANUAL", "手动");
+
+		/**
+		 * 类型
+		 */
+		@EnumValue
+		private final String type;
+
+		/**
+		 * 描述
+		 */
+		private final String description;
+
+	}
 }
 }

+ 6 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysDept.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 
 
@@ -152,4 +153,9 @@ public class SysDept extends Model<SysDept> {
 	 */
 	 */
 	private Integer renlijiaServiceChargeRate;
 	private Integer renlijiaServiceChargeRate;
 
 
+	/**
+	 * 财务复核方式
+	 */
+	private UpmsType.FinancialReviewType financialReviewType;
+
 }
 }

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -2900,6 +2900,7 @@ public class ApiController {
 	 */
 	 */
 	@GetMapping("/getH5To")
 	@GetMapping("/getH5To")
 	@SysLog("更新任务截图")
 	@SysLog("更新任务截图")
+	@Inner(value = false)
 	public R getH5To(String taskId) {
 	public R getH5To(String taskId) {
 		WmTask wmTask = wmTaskService.getById(taskId);
 		WmTask wmTask = wmTaskService.getById(taskId);
 		log.info("更新任务截图任务原数据:{}", wmTask);
 		log.info("更新任务截图任务原数据:{}", wmTask);

+ 4 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -95,7 +95,8 @@ public class SysUserController {
 			return false;
 			return false;
 		}
 		}
 
 
-		// 1-管理员,2-平台管理员,3-药企管理员,4-CSO管理员,7-财务管理员,9-CRO管理员,11-患教管理员,19-CMS,27-平台财务管理员,33-行政人员
+		// 1-管理员,2-平台管理员,3-药企管理员,4-CSO管理员,7-财务管理员,9-CRO管理员,11-患教管理员,19-CMS,27-平台财务管理员,33-行政人员,
+		// 34-财务复核
 		return Arrays.asList(roles).contains(1)
 		return Arrays.asList(roles).contains(1)
 				|| Arrays.asList(roles).contains(2)
 				|| Arrays.asList(roles).contains(2)
 				|| Arrays.asList(roles).contains(3)
 				|| Arrays.asList(roles).contains(3)
@@ -105,7 +106,8 @@ public class SysUserController {
 				|| Arrays.asList(roles).contains(11)
 				|| Arrays.asList(roles).contains(11)
 				|| Arrays.asList(roles).contains(19)
 				|| Arrays.asList(roles).contains(19)
 				|| Arrays.asList(roles).contains(27)
 				|| Arrays.asList(roles).contains(27)
-				|| Arrays.asList(roles).contains(33);
+				|| Arrays.asList(roles).contains(33)
+				|| Arrays.asList(roles).contains(34);
 	}
 	}
 
 
 	/**
 	/**

+ 6 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaDrugEntController.java

@@ -119,6 +119,7 @@ public class WmDaDrugEntController {
 	@SysLog("新增档案-药企")
 	@SysLog("新增档案-药企")
 	@PostMapping("saves")
 	@PostMapping("saves")
 	@PreAuthorize("@pms.hasPermission('admin_wmdadrugent_add')")
 	@PreAuthorize("@pms.hasPermission('admin_wmdadrugent_add')")
+	@Transactional(rollbackFor = Exception.class)
 	public R saves(@RequestBody WmDaDrugEnt wmDaDrugEnt) {
 	public R saves(@RequestBody WmDaDrugEnt wmDaDrugEnt) {
 
 
 		WmDaDrugEnt query = new WmDaDrugEnt();
 		WmDaDrugEnt query = new WmDaDrugEnt();
@@ -199,10 +200,11 @@ public class WmDaDrugEntController {
 	@PreAuthorize("@pms.hasPermission('admin_wmdadrugent_edit')")
 	@PreAuthorize("@pms.hasPermission('admin_wmdadrugent_edit')")
 	@Transactional(rollbackFor = Exception.class)
 	@Transactional(rollbackFor = Exception.class)
 	public R updateById(@RequestBody WmDaDrugEnt wmDaDrugEnt) {
 	public R updateById(@RequestBody WmDaDrugEnt wmDaDrugEnt) {
+		if (wmDaDrugEnt.getDeptId() == null || wmDaDrugEnt.getId() == null) {
+			return R.failed("id和deptId必填");
+		}
 
 
-		SysDept sysDept1 = new SysDept();
-		sysDept1.setDeptId(Integer.parseInt(wmDaDrugEnt.getDeptId()));
-		SysDept sysDept = sysDeptMapper.selectDept(sysDept1);
+		SysDept sysDept = new SysDept();
 		sysDept.setDelFlag(wmDaDrugEnt.getEnableFlag());
 		sysDept.setDelFlag(wmDaDrugEnt.getEnableFlag());
 		sysDept.setName(wmDaDrugEnt.getEntname());
 		sysDept.setName(wmDaDrugEnt.getEntname());
 		sysDept.setDeptId(Integer.parseInt(wmDaDrugEnt.getDeptId()));
 		sysDept.setDeptId(Integer.parseInt(wmDaDrugEnt.getDeptId()));
@@ -242,6 +244,7 @@ public class WmDaDrugEntController {
 
 
 		sysDept.setSubjectType(wmDaDrugEnt.getSubjectType());
 		sysDept.setSubjectType(wmDaDrugEnt.getSubjectType());
 		sysDept.setDeptPermissions(wmDaDrugEnt.getDeptPermissions());
 		sysDept.setDeptPermissions(wmDaDrugEnt.getDeptPermissions());
+		sysDept.setFinancialReviewType(wmDaDrugEnt.getFinancialReviewType());
 		sysDeptMapper.updateByPrimaryKeySelective(sysDept);
 		sysDeptMapper.updateByPrimaryKeySelective(sysDept);
 		SysUser sysUserCondition = new SysUser();
 		SysUser sysUserCondition = new SysUser();
 		sysUserCondition.setDeptId(Integer.parseInt(wmDaDrugEnt.getDeptId()));
 		sysUserCondition.setDeptId(Integer.parseInt(wmDaDrugEnt.getDeptId()));

+ 214 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java

@@ -6,6 +6,8 @@ import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.XWPFTemplate;
@@ -22,11 +24,14 @@ import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.SettlementProofModel;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.SettlementProofModel;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmScorePackageSettleExcelModel;
 import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewSettleDetailVO;
+import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewVO;
 import com.qunzhixinxi.hnqz.admin.enums.DeptPermissionEnum;
 import com.qunzhixinxi.hnqz.admin.enums.DeptPermissionEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
+import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
@@ -46,6 +51,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.security.access.AccessDeniedException;
 import org.springframework.security.access.AccessDeniedException;
@@ -82,6 +88,7 @@ public class WmPayOffController {
 
 
 	private final WmPayOffService wmPayOffService;
 	private final WmPayOffService wmPayOffService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageService wmScorePackageService;
+	private final WmScorePackageMapper wmScorePackageMapper;
 	private final WmScorePackageSettleNoteService wmScorePackageSettleNoteService;
 	private final WmScorePackageSettleNoteService wmScorePackageSettleNoteService;
 	private final SysDeptService sysDeptService;
 	private final SysDeptService sysDeptService;
 	private final RedisTemplate<String, Object> redisTemplate;
 	private final RedisTemplate<String, Object> redisTemplate;
@@ -321,6 +328,91 @@ public class WmPayOffController {
 		return R.ok(outputPage);
 		return R.ok(outputPage);
 	}
 	}
 
 
+	/**
+	 * 查询财务结算复核汇总数据
+	 *
+	 * @param realname 姓名
+	 * @param subjectLocation 结算渠道
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@GetMapping("/list-financial-review")
+	public R<List<SettleFinancialReviewVO>> listFinancialReview(String realname, SubjectLocation subjectLocation, Boolean reviewFlag) {
+		Integer deptId = SecurityUtils.getUser().getDeptId();
+
+		SettleFinancialReviewVO query = new SettleFinancialReviewVO();
+		query.setRealname(realname);
+		query.setSubjectLocation(subjectLocation);
+		query.setDeptId(deptId);
+		query.setReviewFlag(reviewFlag);
+		List<SettleFinancialReviewVO> voList = wmScorePackageMapper.listFinancialReview(query);
+
+		return R.ok(voList);
+	}
+
+	/**
+	 * 查询财务结算复核汇总数据
+	 *
+	 * @param page 分页参数
+	 * @param settleNoteIds 结算id
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@GetMapping("/page-financial-review-detail")
+	public R<IPage<WmScorePackageSettleOutput>> pageFinancialReviewDetail(Page<WmScorePackageSettleOutput> page,
+																	@Param("userId") String[] settleNoteIds) {
+		SettleFinancialReviewVO query = new SettleFinancialReviewVO();
+		query.setSettleNoteIds(settleNoteIds);
+		IPage<WmScorePackageSettleOutput> detailPage = wmScorePackageService.pageFinancialReviewDetail(page, query);
+
+		return R.ok(detailPage);
+	}
+
+	/**
+	 * 查询财务复核-批量结算列表数据
+	 *
+	 * @param settleNoteIds 结算id
+	 * @return {@link R}<{@link List}<{@link WmScorePackageSettleOutput}>> 结果
+	 */
+	@GetMapping("/list-financial-review_settle_detail")
+	public R<List<SettleFinancialReviewSettleDetailVO>> listFinancialReviewSettleDetail(String[] settleNoteIds) {
+		List<WmScorePackageSettleNote> settleNotes = wmScorePackageSettleNoteService.listByIds(Arrays.asList(settleNoteIds));
+
+		List<SysUser> sysUsers = sysUserService.listByIds(settleNotes.stream().map(WmScorePackageSettleNote::getUserId).collect(Collectors.toSet()));
+		Map<Integer, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+
+		Set<String> packageIds = settleNotes.stream().map(WmScorePackageSettleNote::getPackageId).collect(Collectors.toSet());
+		List<WmScorePackage> scorePackages = wmScorePackageMapper.selectBatchIds(packageIds);
+		Map<String, WmScorePackage> packageMap = scorePackages.stream().collect(Collectors.toMap(WmScorePackage::getId, Function.identity()));
+
+		List<SettleFinancialReviewSettleDetailVO> outputList = new ArrayList<>();
+		settleNotes.forEach(settleNote -> {
+			SettleFinancialReviewSettleDetailVO output = new SettleFinancialReviewSettleDetailVO();
+			output.setNoteId(String.valueOf(settleNote.getId()));
+			output.setPackageId(settleNote.getPackageId());
+			output.setUserId(settleNote.getUserId());
+			output.setDeptId(settleNote.getSettleDeptId());
+			output.setDiscount(settleNote.getDiscount());
+			output.setSettleAmount(settleNote.getSettleAmount());
+			output.setActualAmount(settleNote.getActualAmount());
+			SysUser sysUser = userMap.get(Integer.parseInt(settleNote.getUserId()));
+			output.setUsername(sysUser.getUsername());
+			output.setRealname(sysUser.getRealname());
+
+			WmScorePackage scorePackage = packageMap.get(settleNote.getPackageId());
+			output.setSettleStatus(scorePackage.getSettleStatus());
+			if (scorePackage.getSettleStatus() != null) {
+				output.setSettleStatusName(SettleStatusEnum.resolve(String.valueOf(scorePackage.getSettleStatus())).getName2());
+			}
+			output.setSubjectLocation(settleNote.getSubjectLocation());
+			if (settleNote.getSubjectLocation() != null) {
+				output.setSubjectLocationName(settleNote.getSubjectLocation().getDescription());
+			}
+			output.setReviewStatus(settleNote.getReviewStatus());
+			outputList.add(output);
+		});
+
+		return R.ok(outputList);
+	}
+
 	/**
 	/**
 	 * 结算包结算导出
 	 * 结算包结算导出
 	 *
 	 *
@@ -617,13 +709,13 @@ public class WmPayOffController {
 	@SysLog("结算-自由选择渠道")
 	@SysLog("结算-自由选择渠道")
 	@PostMapping("/settleIssueBySubType")
 	@PostMapping("/settleIssueBySubType")
 	public R<?> settleIssueBySubType(@RequestBody WmScorePackageSettleInput input) {
 	public R<?> settleIssueBySubType(@RequestBody WmScorePackageSettleInput input) {
-
+		log.info("结算-自由选择渠道参数:{}", input);
 
 
 		if (StrUtil.isBlank(input.getId()) || StrUtil.isBlank(input.getScorePackageName()) || input.getSubjectLocation() == null || CollUtil.isEmpty(input.getNotes()) || null == input.getInvoiceCategory()) {
 		if (StrUtil.isBlank(input.getId()) || StrUtil.isBlank(input.getScorePackageName()) || input.getSubjectLocation() == null || CollUtil.isEmpty(input.getNotes()) || null == input.getInvoiceCategory()) {
 			return R.failed("数据异常");
 			return R.failed("数据异常");
 		}
 		}
 
 
-		return wmPayOffService.settleIssueBySubType(input);
+		return wmPayOffService.financialSettle(input);
 	}
 	}
 
 
 	/**
 	/**
@@ -636,6 +728,7 @@ public class WmPayOffController {
 	@PostMapping("/batch-financial-settle")
 	@PostMapping("/batch-financial-settle")
 	@SuppressWarnings("all")
 	@SuppressWarnings("all")
 	public R<?> batchFinancialSettle(@RequestBody List<WmScorePackageSettleInput> inputList) {
 	public R<?> batchFinancialSettle(@RequestBody List<WmScorePackageSettleInput> inputList) {
+		log.info("批量财务结算参数:{}", inputList);
 
 
 		if (CollectionUtil.isEmpty(inputList)) {
 		if (CollectionUtil.isEmpty(inputList)) {
 			return R.failed("数据异常");
 			return R.failed("数据异常");
@@ -667,7 +760,7 @@ public class WmPayOffController {
 
 
 				input.setNotes(notes);
 				input.setNotes(notes);
 				// 调用单个结算
 				// 调用单个结算
-				R<?> settleR = wmPayOffService.settleIssueBySubType(input);
+				R<?> settleR = wmPayOffService.financialSettle(input);
 				boolean failFlag;
 				boolean failFlag;
 				if (settleR.getCode() == 0) {
 				if (settleR.getCode() == 0) {
 					// 结算成功,不进行页面提示
 					// 结算成功,不进行页面提示
@@ -695,6 +788,123 @@ public class WmPayOffController {
 		return R.ok(msgList);
 		return R.ok(msgList);
 	}
 	}
 
 
+	/**
+	 * 财务复核(通过则直接发起结算)
+	 *
+	 * @param input 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("财务复核")
+	@PostMapping("/financial-review")
+	public R<?> financialReview(@RequestBody WmScorePackageSettleInput input) {
+		log.info("财务复核参数:{}", input);
+
+		if (StringUtils.isEmpty(input.getId()) || null == input.getReviewStatus()) {
+			return R.failed("必填参数为空");
+		}
+
+		// 查询结算详情(用于拼接notes数据)
+		R<?> queryR = wmPayOffService.settleById(input.getId());
+
+		if (queryR.getCode() != 0) {
+			return R.failed("数据异常");
+		}
+
+		Map<String, Object> queryData = (Map<String, Object>) queryR.getData();
+		List<WmScorePackageSettleNote> notes = (List<WmScorePackageSettleNote>) queryData.get("notes");
+		WmScorePackage wsp = (WmScorePackage) queryData.get("wsp");
+
+		WmScorePackageSettleNote settleNote = notes.get(0);
+
+		input.setSubjectLocation(settleNote.getSubjectLocation());
+		input.setInvoiceCategory(settleNote.getInvoiceType());
+		input.setScorePackageName(wsp.getScorePackageName());
+		input.setNotes(notes);
+
+		// 防止结算时,复核状态被更新
+		notes.forEach(n -> {
+			n.setReviewStatus(null);
+			n.setReviewUser(null);
+			n.setReviewTime(null);
+		});
+
+		return wmPayOffService.financialReview(input);
+	}
+
+	/**
+	 * 批量财务复核(通过则直接发起结算)
+	 *
+	 * @param inputList 参数
+	 * @return {@link R}<{@link ?}> 结果
+	 */
+	@SysLog("批量财务复核")
+	@PostMapping("/batch-financial-review")
+	public R<?> batchFinancialReview(@RequestBody List<WmScorePackageSettleInput> inputList) {
+		log.info("批量财务复核参数:{}", inputList);
+
+		if (CollectionUtil.isEmpty(inputList)) {
+			return R.failed("参数为空");
+		}
+
+		List<Map<String, String>> msgList = new ArrayList<>();
+
+		for (WmScorePackageSettleInput input : inputList) {
+			if (StringUtils.isEmpty(input.getId()) || null == input.getReviewStatus()) {
+				return R.failed("必填参数为空");
+			}
+
+			WmScorePackage scorePackage = wmScorePackageMapper.selectById(input.getId());
+			// 查询结算详情(用于拼接notes数据)
+			R<?> queryR = wmPayOffService.settleById(input.getId());
+
+			if (queryR.getCode() == 0) {
+				Map<String, Object> queryData = (Map<String, Object>) queryR.getData();
+				List<WmScorePackageSettleNote> notes = (List<WmScorePackageSettleNote>) queryData.get("notes");
+
+				WmScorePackageSettleNote settleNote = notes.get(0);
+
+				input.setSubjectLocation(settleNote.getSubjectLocation());
+				input.setInvoiceCategory(settleNote.getInvoiceType());
+				input.setScorePackageName(scorePackage.getScorePackageName());
+				input.setNotes(notes);
+
+				// 防止结算时,复核状态被更新
+				notes.forEach(n -> {
+					n.setReviewStatus(null);
+					n.setReviewUser(null);
+					n.setReviewTime(null);
+				});
+
+				// 调用单个复核
+				R<?> settleR = wmPayOffService.financialReview(input);
+				boolean failFlag;
+				if (settleR.getCode() == 0) {
+					// 结算成功,不进行页面提示
+					Optional<WmScorePackageSettleNote> any = notes.stream().filter(note -> !DingEnum.NOTE_STATUS_SUBMIT.getType().equals(note.getSettleNoteStatus())).findAny();
+					failFlag = any.isPresent();
+				} else {
+					failFlag = true;
+				}
+
+				if (failFlag) {
+					Map<String, String> msgMap = new HashMap<>(2);
+					msgMap.put("packageName", scorePackage.getScorePackageName());
+					msgMap.put("reason", settleR.getMsg());
+					msgList.add(msgMap);
+				}
+
+			} else {
+				Map<String, String> msgMap = new HashMap<>(2);
+				msgMap.put("packageName", scorePackage.getScorePackageName());
+				msgMap.put("reason", queryR.getMsg());
+				msgList.add(msgMap);
+			}
+		}
+
+//		return R.ok(msgList);
+		return R.ok();
+	}
+
 	/**
 	/**
 	 * 手动回调
 	 * 手动回调
 	 *
 	 *
@@ -742,7 +952,7 @@ public class WmPayOffController {
 		boolean updateSettleResult = wmScorePackageSettleNoteService.updateSettleNoteById(packageId, settleNoteId, settleNoteStatus, remark, notifyTime);
 		boolean updateSettleResult = wmScorePackageSettleNoteService.updateSettleNoteById(packageId, settleNoteId, settleNoteStatus, remark, notifyTime);
 
 
 		// 结束输出
 		// 结束输出
-		log.info("===== 手工回调开始 =====");
+		log.info("===== 手工回调结束 =====");
 
 
 		// 返回更新结果
 		// 返回更新结果
 		return R.ok(updateSettleResult);
 		return R.ok(updateSettleResult);

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaAgent.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 
 
@@ -162,4 +163,10 @@ public class WmDaAgent extends Model<WmDaAgent> {
 	 */
 	 */
 	@TableField(exist = false)
 	@TableField(exist = false)
 	private Integer deptLevel;
 	private Integer deptLevel;
+
+	/**
+	 * 财务复核方式(字段存于sys_dept表)
+	 */
+	@TableField(exist = false)
+	private UpmsType.FinancialReviewType financialReviewType;
 }
 }

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmDaDrugEnt.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 
 
@@ -97,4 +98,10 @@ public class WmDaDrugEnt extends Model<WmDaDrugEnt> {
 	@TableField(exist = false)
 	@TableField(exist = false)
 	private String[] deptPermissions;
 	private String[] deptPermissions;
 
 
+	/**
+	 * 财务复核方式(字段存于sys_dept表)
+	 */
+	@TableField(exist = false)
+	private UpmsType.FinancialReviewType financialReviewType;
+
 }
 }

+ 16 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackageSettleNote.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
 import com.qunzhixinxi.hnqz.admin.enums.CategoryEnum;
 import com.qunzhixinxi.hnqz.admin.enums.CategoryEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 import lombok.Data;
@@ -165,6 +166,21 @@ public class WmScorePackageSettleNote extends Model<WmScorePackageSettleNote> {
 	 */
 	 */
 	private Integer settleDeptSubId;
 	private Integer settleDeptSubId;
 
 
+	/**
+	 * 复核状态
+	 */
+	private UpmsState.SettleFinancialReviewStatus reviewStatus;
+
+	/**
+	 * 复核时间
+	 */
+	private LocalDateTime reviewTime;
+
+	/**
+	 * 复核人
+	 */
+	private Integer reviewUser;
+
 	/**
 	/**
 	 * 真实名称
 	 * 真实名称
 	 */
 	 */

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.entity.input;
 package com.qunzhixinxi.hnqz.admin.entity.input;
 
 
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
@@ -118,4 +119,9 @@ public class WmScorePackageSettleInput implements Serializable {
 	 */
 	 */
 	private String invoiceNumber;
 	private String invoiceNumber;
 
 
+	/**
+	 * 财务复核状态
+	 */
+	private UpmsState.SettleFinancialReviewStatus reviewStatus;
+
 }
 }

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleOutput.java

@@ -19,6 +19,11 @@ public class WmScorePackageSettleOutput {
 
 
 	private Integer invoiceCategory;
 	private Integer invoiceCategory;
 
 
+	/**
+	 * 发票类目名称
+	 */
+	private String categoryName;
+
 	private BigDecimal settleAmount;
 	private BigDecimal settleAmount;
 
 
 	private BigDecimal actualAmount;
 	private BigDecimal actualAmount;
@@ -27,6 +32,11 @@ public class WmScorePackageSettleOutput {
 
 
 	private String settleStatus;
 	private String settleStatus;
 
 
+	/**
+	 * 结算状态名称
+	 */
+	private String settleStatusName;
+
 	private String enableType;
 	private String enableType;
 
 
 	private String taskAddFlag;
 	private String taskAddFlag;
@@ -80,6 +90,11 @@ public class WmScorePackageSettleOutput {
 
 
 	private SubjectLocation subjectLocation;
 	private SubjectLocation subjectLocation;
 
 
+	/**
+	 * 结算渠道名称
+	 */
+	private String subjectLocationName;
+
 	/**
 	/**
 	 * 积分包来源, 0->手动, 1->线上
 	 * 积分包来源, 0->手动, 1->线上
 	 */
 	 */

+ 90 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/SettleFinancialReviewSettleDetailVO.java

@@ -0,0 +1,90 @@
+package com.qunzhixinxi.hnqz.admin.entity.vo;
+
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 财务结算复核详情VO
+ *
+ * @author lixuesong
+ * @date 2024/01/09
+ */
+@Data
+public class SettleFinancialReviewSettleDetailVO implements Serializable {
+	private static final long serialVersionUID = 1690853997106657014L;
+
+	/**
+	 * 结算id
+	 */
+	private String noteId;
+
+	/**
+	 * 积分包id
+	 */
+	private String packageId;
+
+	/**
+	 * 用户id
+	 */
+	private String userId;
+
+	/**
+	 * 企业id
+	 */
+	private Integer deptId;
+
+	/**
+	 * 用户姓名
+	 */
+	private String realname;
+
+	/**
+	 * 用户名
+	 */
+	private String username;
+
+	/**
+	 * 结算渠道
+	 */
+	private SubjectLocation subjectLocation;
+
+	/**
+	 * 结算渠道名称
+	 */
+	private String subjectLocationName;
+
+	/**
+	 * 结算金额
+	 */
+	private BigDecimal settleAmount;
+
+	/**
+	 * 实际结算金额
+	 */
+	private BigDecimal actualAmount;
+
+	/**
+	 * 结算状态
+	 */
+	private Integer settleStatus;
+
+	/**
+	 * 结算状态名称
+	 */
+	private String settleStatusName;
+
+	/**
+	 * 折扣
+	 */
+	private BigDecimal discount;
+
+	/**
+	 * 复核状态
+	 */
+	private UpmsState.SettleFinancialReviewStatus reviewStatus;
+
+}

+ 74 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/SettleFinancialReviewVO.java

@@ -0,0 +1,74 @@
+package com.qunzhixinxi.hnqz.admin.entity.vo;
+
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 财务结算复核汇总VO
+ *
+ * @author lixuesong
+ * @date 2024/01/08
+ */
+@Data
+public class SettleFinancialReviewVO implements Serializable {
+	private static final long serialVersionUID = -4383632697565147294L;
+
+	/**
+	 * 用户id
+	 */
+	private Integer userId;
+
+	/**
+	 * 企业id
+	 */
+	private Integer deptId;
+
+	/**
+	 * 用户姓名
+	 */
+	private String realname;
+
+	/**
+	 * 用户名
+	 */
+	private String username;
+
+	/**
+	 * 身份证号
+	 */
+	private String idCardNumber;
+
+	/**
+	 * 结算渠道
+	 */
+	private SubjectLocation subjectLocation;
+
+	/**
+	 * 结算金额
+	 */
+	private BigDecimal settleAmount;
+
+	/**
+	 * 实际结算金额
+	 */
+	private BigDecimal actualAmount;
+
+	/**
+	 * 积分包个数
+	 */
+	private Integer packageCount;
+
+	/**
+	 * 复核标记
+	 */
+	private Boolean reviewFlag;
+
+	/**
+	 * 结算表id
+	 */
+	private String[] settleNoteIds;
+}

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SettleStatusEnum.java

@@ -19,6 +19,8 @@ public enum SettleStatusEnum {
 	SETTLE_STATUS_NO("4", "未结算", ""),
 	SETTLE_STATUS_NO("4", "未结算", ""),
 	SETTLE_STATUS_PART("5", "部分成功", ""),
 	SETTLE_STATUS_PART("5", "部分成功", ""),
 	SETTLE_STATUS_WAIT("9", "待结算", "申请结算"),
 	SETTLE_STATUS_WAIT("9", "待结算", "申请结算"),
+	REVIEW_NOT_PASSED("10", "复核不通过", "复核不通过"),
+	TO_BE_REVIEWED("11", "待复核", "待复核"),
 	SETTLE_STATUS_NULL("", "", "");
 	SETTLE_STATUS_NULL("", "", "");
 
 
 	private String val;
 	private String val;

+ 17 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmScorePackageMapper.java

@@ -26,6 +26,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
+import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewVO;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScope;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScope;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScopeMapper;
 import com.qunzhixinxi.hnqz.common.data.datascope.DataScopeMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -178,4 +179,20 @@ public interface WmScorePackageMapper extends DataScopeMapper<WmScorePackage> {
 	Page<WmScorePackage> listScorePackage(Page<WmScorePackage> page, @Param(Constants.WRAPPER) QueryWrapper<WmScorePackage> queryWrapper,
 	Page<WmScorePackage> listScorePackage(Page<WmScorePackage> page, @Param(Constants.WRAPPER) QueryWrapper<WmScorePackage> queryWrapper,
 										  @Param("acceptUser") String acceptUser, @Param("relationScoreId") String relationScoreId,
 										  @Param("acceptUser") String acceptUser, @Param("relationScoreId") String relationScoreId,
 										  @Param("toApproval") Boolean toApproval);
 										  @Param("toApproval") Boolean toApproval);
+
+	/**
+	 * 查询财务结算复核汇总
+	 *
+	 * @param query 查询条件
+	 * @return 结果
+	 */
+	List<SettleFinancialReviewVO> listFinancialReview(@Param("query") SettleFinancialReviewVO query);
+
+	/**
+	 * 查询财务结算复核数据详情
+	 *
+	 * @param query 查询条件
+	 * @return 结果
+	 */
+	IPage<WmScorePackageSettleOutput> pageFinancialReviewDetail(Page<WmScorePackageSettleOutput> page, @Param("query") SettleFinancialReviewVO query);
 }
 }

+ 16 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java

@@ -94,4 +94,20 @@ public interface WmPayOffService extends IService<WmPayOff> {
 	 * @return 提交结果
 	 * @return 提交结果
 	 */
 	 */
 	R<?> settleReIssueBySubType(WmScorePackageSettleInput input);
 	R<?> settleReIssueBySubType(WmScorePackageSettleInput input);
+
+	/**
+	 * 财务复核(通过则直接发起结算)
+	 *
+	 * @param input 参数
+	 * @return {@link R}<{@link ?}>
+	 */
+	R<?> financialReview(WmScorePackageSettleInput input);
+
+	/**
+	 * 财务结算
+	 *
+	 * @param input 参数
+	 * @return {@link R}<{@link ?}>
+	 */
+	R<?> financialSettle(WmScorePackageSettleInput input);
 }
 }

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmScorePackageService.java

@@ -31,6 +31,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.UnpackDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
+import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewVO;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 
 
 import java.time.LocalDate;
 import java.time.LocalDate;
@@ -236,4 +237,13 @@ public interface WmScorePackageService extends IService<WmScorePackage> {
 	 * @return 结果
 	 * @return 结果
 	 */
 	 */
 	List<WmScorePackage> getScorePackagekfpjf(Integer superDeptId, Integer deptId, String[] typeIds, String[] packageIds);
 	List<WmScorePackage> getScorePackagekfpjf(Integer superDeptId, Integer deptId, String[] typeIds, String[] packageIds);
+
+
+	/**
+	 * 查询财务结算复核数据详情
+	 *
+	 * @param query 查询条件
+	 * @return 结果
+	 */
+	IPage<WmScorePackageSettleOutput> pageFinancialReviewDetail(Page<WmScorePackageSettleOutput> page, SettleFinancialReviewVO query);
 }
 }

+ 8 - 6
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaAgentServiceImpl.java

@@ -348,6 +348,7 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 			sysDept.setTaxCode(wmDaAgent.getZjNumber());
 			sysDept.setTaxCode(wmDaAgent.getZjNumber());
 			sysDept.setSubjectType(wmDaAgent.getSubjectType());
 			sysDept.setSubjectType(wmDaAgent.getSubjectType());
 			sysDept.setDeptPermissions(wmDaAgent.getDeptPermissions());
 			sysDept.setDeptPermissions(wmDaAgent.getDeptPermissions());
+			sysDept.setFinancialReviewType(wmDaAgent.getFinancialReviewType());
 			if (wmDaAgent.getQylx().contains("0")) {
 			if (wmDaAgent.getQylx().contains("0")) {
 				sysDept.setName(wmDaAgent.getGsmc());
 				sysDept.setName(wmDaAgent.getGsmc());
 				sysDept.setLevel(3);
 				sysDept.setLevel(3);
@@ -588,11 +589,11 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 		 */
 		 */
 		sysDept.setTaxCode(wmDaAgent.getZjNumber());
 		sysDept.setTaxCode(wmDaAgent.getZjNumber());
 
 
-		if(!Arrays.equals(sysDept.getSubjectType(),wmDaAgent.getSubjectType())){
-
-			sysDeptSubMapper.update(new SysDeptSub(), Wrappers.<SysDeptSub>lambdaUpdate()
-					.eq(SysDeptSub::getDeptId,sysDept.getDeptId())
-					.set(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_FALSE.getCode()));
+//		if(!Arrays.equals(sysDept.getSubjectType(),wmDaAgent.getSubjectType())){
+//
+//			sysDeptSubMapper.update(new SysDeptSub(), Wrappers.<SysDeptSub>lambdaUpdate()
+//					.eq(SysDeptSub::getDeptId,sysDept.getDeptId())
+//					.set(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_FALSE.getCode()));
 
 
 //			if (CollUtil.isNotEmpty(wmDaAgent.getSubjectTypeAndChannel())) {
 //			if (CollUtil.isNotEmpty(wmDaAgent.getSubjectTypeAndChannel())) {
 //				for (Map.Entry<String, Integer> entry : wmDaAgent.getSubjectTypeAndChannel().entrySet()) {
 //				for (Map.Entry<String, Integer> entry : wmDaAgent.getSubjectTypeAndChannel().entrySet()) {
@@ -617,12 +618,13 @@ public class WmDaAgentServiceImpl extends ServiceImpl<WmDaAgentMapper, WmDaAgent
 //				}
 //				}
 //			}
 //			}
 
 
-		}
+//		}
 		/**
 		/**
 		 * @Modify: end
 		 * @Modify: end
 		 */
 		 */
 		sysDept.setSubjectType(wmDaAgent.getSubjectType());
 		sysDept.setSubjectType(wmDaAgent.getSubjectType());
 		sysDept.setDeptPermissions(wmDaAgent.getDeptPermissions());
 		sysDept.setDeptPermissions(wmDaAgent.getDeptPermissions());
+		sysDept.setFinancialReviewType(wmDaAgent.getFinancialReviewType());
 		sysDeptMapper.updateByPrimaryKeySelective(sysDept);
 		sysDeptMapper.updateByPrimaryKeySelective(sysDept);
 		SysUser sysUser1 = new SysUser();
 		SysUser sysUser1 = new SysUser();
 		sysUser1.setDeptId(Integer.parseInt(wmDaAgent.getDeptId()));
 		sysUser1.setDeptId(Integer.parseInt(wmDaAgent.getDeptId()));

+ 4 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaDrugEntServiceImpl.java

@@ -66,7 +66,7 @@ public class WmDaDrugEntServiceImpl extends ServiceImpl<WmDaDrugEntMapper, WmDaD
 	private final WmTaskSubmissionPercentRuleService taskSubmissionPercentRuleService;
 	private final WmTaskSubmissionPercentRuleService taskSubmissionPercentRuleService;
 
 
 	@Override
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public boolean saveDrugEnt(WmDaDrugEnt entity) {
 	public boolean saveDrugEnt(WmDaDrugEnt entity) {
 		Integer deptId = Integer.parseInt(System.currentTimeMillis() / 1000 + "");
 		Integer deptId = Integer.parseInt(System.currentTimeMillis() / 1000 + "");
 		entity.setDeptId(deptId + "");
 		entity.setDeptId(deptId + "");
@@ -81,6 +81,8 @@ public class WmDaDrugEntServiceImpl extends ServiceImpl<WmDaDrugEntMapper, WmDaD
 			sysDept.setLevel1Name(entity.getEntname());
 			sysDept.setLevel1Name(entity.getEntname());
 			sysDept.setSubjectType(entity.getSubjectType());
 			sysDept.setSubjectType(entity.getSubjectType());
 			sysDept.setTaxCode(entity.getEntcode());
 			sysDept.setTaxCode(entity.getEntcode());
+			sysDept.setFinancialReviewType(entity.getFinancialReviewType());
+			sysDept.setDeptPermissions(entity.getDeptPermissions());
 			/**
 			/**
 			 * @Modify: start
 			 * @Modify: start
 			 * @Author: ryz
 			 * @Author: ryz
@@ -147,6 +149,7 @@ public class WmDaDrugEntServiceImpl extends ServiceImpl<WmDaDrugEntMapper, WmDaD
 			sysDept.setLevel(2);
 			sysDept.setLevel(2);
 			sysDept.setSubjectType(entity.getSubjectType());
 			sysDept.setSubjectType(entity.getSubjectType());
 			sysDept.setDeptPermissions(entity.getDeptPermissions());
 			sysDept.setDeptPermissions(entity.getDeptPermissions());
+			sysDept.setFinancialReviewType(entity.getFinancialReviewType());
 			sysDeptService.save(sysDept);
 			sysDeptService.save(sysDept);
 			entity.setDeptId(String.valueOf(sysDept.getDeptId()));
 			entity.setDeptId(String.valueOf(sysDept.getDeptId()));
 			wmDaDrugEntMapper.updateById(entity);
 			wmDaDrugEntMapper.updateById(entity);

+ 173 - 7
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java

@@ -8,6 +8,7 @@ import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsState;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
@@ -28,6 +29,7 @@ import com.qunzhixinxi.hnqz.admin.mapper.SysUserSubMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
+import com.qunzhixinxi.hnqz.common.core.exception.BizException;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.ding.config.DingConfig;
 import com.qunzhixinxi.hnqz.common.ding.config.DingConfig;
 import com.qunzhixinxi.hnqz.common.ding.entity.*;
 import com.qunzhixinxi.hnqz.common.ding.entity.*;
@@ -64,6 +66,7 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 
 /**
 /**
  * 结算表
  * 结算表
@@ -802,6 +805,169 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 
 	}
 	}
 
 
+	/**
+	 * 财务复核(通过则直接发起结算)
+	 *
+	 * @param input 参数
+	 * @return {@link R}<{@link ?}>
+	 */
+	@Override
+	public R<?> financialReview(WmScorePackageSettleInput input) {
+		HnqzUser operator = SecurityUtils.getUser();
+		Boolean review = this.checkAndUpdateFinancialReviewForReview(input, operator);
+		if (!Boolean.TRUE.equals(review)) {
+			// 复核不通过,直接返回
+			return R.ok(null, "操作成功");
+		}
+
+		R<?> r = this.settleIssueBySubType(input);
+
+		if (r.getCode() != 0) {
+			LocalDateTime now = LocalDateTime.now();
+			// 设置结算状态为结算失败
+			Set<WmScorePackageSettleNote> updateNotes = input.getNotes().stream().map(note -> {
+				WmScorePackageSettleNote updateNote = new WmScorePackageSettleNote();
+				updateNote.setId(note.getId());
+				updateNote.setSettleNoteStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_FAIL.getVal()));
+				updateNote.setUpdateTime(now);
+				return updateNote;
+			}).collect(Collectors.toSet());
+			noteService.updateBatchById(updateNotes);
+
+			WmScorePackage scorePackage = new WmScorePackage();
+			scorePackage.setId(input.getId());
+			scorePackage.setSettleStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_FAIL.getVal()));
+			scorePackage.setUpdateUser(operator.getId());
+			scorePackage.setUpdateTime(now);
+			wmScorePackageService.updateById(scorePackage);
+		}
+
+		return r;
+	}
+
+	/**
+	 * 财务结算
+	 *
+	 * @param input 参数
+	 * @return {@link R}<{@link ?}>
+	 */
+	@Override
+	public R<?> financialSettle(WmScorePackageSettleInput input) {
+		HnqzUser operator = SecurityUtils.getUser();
+		SysDept sysDept = sysDeptService.getById(operator.getDeptId());
+		// 校验是否财务复核并更新
+		Boolean review = this.checkAndUpdateFinancialReviewForSettle(input, operator, sysDept);
+		if (!Boolean.TRUE.equals(review)) {
+			// 复核不通过,直接返回
+			return R.ok(null, "提交复核成功");
+		}
+
+		return this.settleIssueBySubType(input);
+	}
+
+	/**
+	 * 校验是否财务复核并更新
+	 *
+	 * @param input 结算入参
+	 * @param operator 操作人
+	 * @return true为通过(可以发起结算),false为不通过(不发起结算)
+	 */
+	private Boolean checkAndUpdateFinancialReviewForReview(WmScorePackageSettleInput input, HnqzUser operator) {
+		// 1.财务复核员操作通过,则直接发起结算
+		// 2.财务复核员操作不通过则改为复核不通过状态,结算状态也改为复核不通过
+		LocalDateTime now = LocalDateTime.now();
+		Set<Integer> noteIds = input.getNotes().stream().map(WmScorePackageSettleNote::getId).collect(Collectors.toSet());
+		List<WmScorePackageSettleNote> settleNotes = noteService.listByIds(noteIds);
+		Set<WmScorePackageSettleNote> updateNotes = settleNotes.stream().map(note -> {
+			WmScorePackageSettleNote updateNote = new WmScorePackageSettleNote();
+			updateNote.setId(note.getId());
+			updateNote.setReviewStatus(input.getReviewStatus());
+			updateNote.setReviewUser(operator.getId());
+			updateNote.setReviewTime(now);
+			return updateNote;
+		}).collect(Collectors.toSet());
+		noteService.updateBatchById(updateNotes);
+
+		if (UpmsState.SettleFinancialReviewStatus.REJECTED.equals(input.getReviewStatus())) {
+			// 复核拒绝,则改为复核不通过
+			WmScorePackage scorePackage = new WmScorePackage();
+			scorePackage.setId(input.getId());
+			scorePackage.setSettleStatus(Integer.valueOf(SettleStatusEnum.REVIEW_NOT_PASSED.getVal()));
+			scorePackage.setUpdateUser(operator.getId());
+			scorePackage.setUpdateTime(now);
+			wmScorePackageService.updateById(scorePackage);
+			return Boolean.FALSE;
+		} else if (UpmsState.SettleFinancialReviewStatus.PASSED.equals(input.getReviewStatus())) {
+			// 复核通过,则改为待结算
+			WmScorePackage scorePackage = new WmScorePackage();
+			scorePackage.setId(input.getId());
+			scorePackage.setSettleStatus(Integer.valueOf(SettleStatusEnum.SETTLE_STATUS_WAIT.getVal()));
+			scorePackage.setUpdateUser(operator.getId());
+			scorePackage.setUpdateTime(now);
+			wmScorePackageService.updateById(scorePackage);
+			return Boolean.TRUE;
+		}
+
+		return Boolean.FALSE;
+	}
+
+	/**
+	 * 校验是否财务复核并更新
+	 *
+	 * @param input 结算入参
+	 * @param operator 操作人
+	 * @param sysDept 企业信息
+	 * @return 是否可以发起结算
+	 */
+	private Boolean checkAndUpdateFinancialReviewForSettle(WmScorePackageSettleInput input, HnqzUser operator, SysDept sysDept) {
+		LocalDateTime now = LocalDateTime.now();
+		// 校验企业是否配置了财务复核, 有则到财务复核
+		if (UpmsType.FinancialReviewType.AUTO.equals(sysDept.getFinancialReviewType())) {
+			// 企业配置为自动的,则跳过复核,直接发起结算
+			Set<WmScorePackageSettleNote> updateNotes = input.getNotes().stream().map(note -> {
+				WmScorePackageSettleNote updateNote = new WmScorePackageSettleNote();
+				updateNote.setId(note.getId());
+				updateNote.setReviewStatus(UpmsState.SettleFinancialReviewStatus.AUTO);
+				updateNote.setReviewUser(operator.getId());
+				updateNote.setReviewTime(now);
+				return updateNote;
+			}).collect(Collectors.toSet());
+			noteService.updateBatchById(updateNotes);
+
+			return Boolean.TRUE;
+		} else {
+			// 企业配置为手动的
+			// 判断如果当前是不通过或待复核,则不能发起(开发备注:手动的情况下,这里暂定为 即使状态为通过也不发起结算,由复核员操作)
+			Set<Integer> noteIds = input.getNotes().stream().map(WmScorePackageSettleNote::getId).collect(Collectors.toSet());
+			List<WmScorePackageSettleNote> settleNotes = noteService.listByIds(noteIds);
+			boolean anyMatch = settleNotes.stream()
+					.anyMatch(note -> UpmsState.SettleFinancialReviewStatus.TO_BE_REVIEWED.equals(note.getReviewStatus()));
+			if (anyMatch) {
+				throw new BizException("已提交复核");
+			}
+
+			// 修改复核状态为待复核
+			Set<WmScorePackageSettleNote> updateNotes = input.getNotes().stream().map(note -> {
+				WmScorePackageSettleNote updateNote = new WmScorePackageSettleNote();
+				updateNote.setId(note.getId());
+				updateNote.setReviewStatus(UpmsState.SettleFinancialReviewStatus.TO_BE_REVIEWED);
+				updateNote.setReviewUser(operator.getId());
+				updateNote.setReviewTime(now);
+				return updateNote;
+			}).collect(Collectors.toSet());
+			noteService.updateBatchById(updateNotes);
+
+			WmScorePackage scorePackage = new WmScorePackage();
+			scorePackage.setId(input.getId());
+			scorePackage.setSettleStatus(Integer.valueOf(SettleStatusEnum.TO_BE_REVIEWED.getVal()));
+			scorePackage.setUpdateUser(operator.getId());
+			scorePackage.setUpdateTime(now);
+			wmScorePackageService.updateById(scorePackage);
+
+			return Boolean.FALSE;
+		}
+	}
+
 	/**
 	/**
 	 * 福建企赋结算操作
 	 * 福建企赋结算操作
 	 *
 	 *
@@ -2586,7 +2752,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			SysUser sysUser = sysUserMapper.selectById(note.getUserId());
 			SysUser sysUser = sysUserMapper.selectById(note.getUserId());
 
 
 			// 校验认证信息
 			// 校验认证信息
-			if (DingEnum.CER_STATUS_1.getType().equals(sysUser.getRljCertStatus())) {
+//			if (DingEnum.CER_STATUS_1.getType().equals(sysUser.getRljCertStatus())) {
 				//认证成功  发起结算
 				//认证成功  发起结算
 				//当前登陆人的机构名称
 				//当前登陆人的机构名称
 				String subjectName = sysDeptSub.getSubjectName();
 				String subjectName = sysDeptSub.getSubjectName();
@@ -2642,12 +2808,12 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 					}
 					}
 				}
 				}
 
 
-			} else {
-				log.info("认证状态异常,结算解锁settleNoteId:{}", input.getId());
-				redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
-
-				note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
-			}
+//			} else {
+//				log.info("认证状态异常,结算解锁settleNoteId:{}", input.getId());
+//				redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+//
+//				note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+//			}
 
 
 		}
 		}
 
 

+ 89 - 56
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageServiceImpl.java

@@ -32,6 +32,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.UnpackDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
+import com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewVO;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
@@ -1847,62 +1848,7 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		Page<WmScorePackageSettleOutput> settleListPage = wmScorePackageMapper.listPackageSettleList(page, input);
 		Page<WmScorePackageSettleOutput> settleListPage = wmScorePackageMapper.listPackageSettleList(page, input);
 
 
 		List<WmScorePackageSettleOutput> settleList = settleListPage.getRecords();
 		List<WmScorePackageSettleOutput> settleList = settleListPage.getRecords();
-		for (WmScorePackageSettleOutput ouPut : settleList) {
-			WmScorePackageStatus statusQuery = new WmScorePackageStatus();
-			statusQuery.setPackageId(ouPut.getId());
-			statusQuery.setStatus("2");
-			List<WmScorePackageStatus> statusList = wmScorePackageStatusService.getByPackageId(statusQuery);
-			String userNames = statusList.stream()
-					.map(WmScorePackageStatus::getUserId)
-					.collect(Collectors.joining(","));
-			ouPut.setUserNames(userNames);
-
-			Set<String> userIds = statusList.stream().map(WmScorePackageStatus::getTaskUserId).collect(Collectors.toSet());
-			if (CollUtil.isNotEmpty(userIds)) {
-				List<SysUser> users = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
-				String userPhones = users.stream().map(SysUser::getUsername).collect(Collectors.joining(","));
-				ouPut.setUserPhones(userPhones);
-				// 脱敏的身份证号
-				String idCardNums = users.stream().map(user -> DesensitizedUtil.idCardNum(user.getIdCardNumber(), 5, 4)).collect(Collectors.joining(","));
-				ouPut.setIdCardNums(idCardNums);
-			}
-			// 查询结算成功时间
-			List<WmScorePackageSettleNote> packageSettleNoteList = settleNoteMapper.selectList(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
-					.eq(WmScorePackageSettleNote::getPackageId, ouPut.getId()));
-			if (CollectionUtil.isNotEmpty(packageSettleNoteList)) {
-				WmScorePackageSettleNote settleNote = packageSettleNoteList.get(0);
-				LocalDateTime notifyTime = settleNote.getNotifyTime();
-				if (notifyTime != null) {
-					ouPut.setBelongDate(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(notifyTime));
-				}
-				if (ouPut.getInvoiceCategory() == null) {
-					ouPut.setInvoiceCategory(settleNote.getInvoiceType());
-				}
-
-				if (ouPut.getSettleAmount() == null) {
-					BigDecimal tmp = new BigDecimal("0");
-					for (WmScorePackageSettleNote note : packageSettleNoteList) {
-						if (null != note.getSettleAmount()) {
-							tmp = tmp.add(note.getSettleAmount());
-						}
-					}
-					ouPut.setSettleAmount(tmp);
-				}
-				if (StringUtils.isBlank(ouPut.getSettleStatus())) {
-					ouPut.setSettleStatus(String.valueOf(settleNote.getSettleNoteStatus()));
-				}
-				ouPut.setSubjectLocation(settleNote.getSubjectLocation());
-				ouPut.setSubToGigTime(settleNote.getSubToGigTime());
-				ouPut.setActualAmount(settleNote.getActualAmount());
-			}
-			if (PackageTypeEnum.TYPE1_HCP_PACKAGE.val().equals(ouPut.getPackageType1())) {
-				// 如果是患者教育,则转换积分值 '分'->'元'
-				WmScorePackage scorePackage = this.getById(ouPut.getId());
-				if (scorePackage != null && StringUtils.isNumeric(scorePackage.getUserScore())) {
-					ouPut.setScore(String.format("%.2f", Integer.parseInt(scorePackage.getUserScore()) / 100.0));
-				}
-			}
-		}
+		this.settleDetail(settleList);
 		return settleListPage;
 		return settleListPage;
 	}
 	}
 
 
@@ -3482,4 +3428,91 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 
 
 		return packages;
 		return packages;
 	}
 	}
+
+	/**
+	 * 查询财务结算复核数据详情
+	 *
+	 * @param query 查询条件
+	 * @return 结果
+	 */
+	@Override
+	public IPage<WmScorePackageSettleOutput> pageFinancialReviewDetail(Page<WmScorePackageSettleOutput> page, SettleFinancialReviewVO query) {
+		IPage<WmScorePackageSettleOutput> detailPage = wmScorePackageMapper.pageFinancialReviewDetail(page, query);
+
+		List<WmScorePackageSettleOutput> settleList = detailPage.getRecords();
+		this.settleDetail(settleList);
+
+		return detailPage;
+	}
+
+	/**
+	 * 结算数据字段拼接转换
+	 *
+	 * @param settleList 数据列表
+	 */
+	private void settleDetail(List<WmScorePackageSettleOutput> settleList) {
+		for (WmScorePackageSettleOutput ouPut : settleList) {
+			WmScorePackageStatus statusQuery = new WmScorePackageStatus();
+			statusQuery.setPackageId(ouPut.getId());
+			statusQuery.setStatus("2");
+			List<WmScorePackageStatus> statusList = wmScorePackageStatusService.getByPackageId(statusQuery);
+			String userNames = statusList.stream()
+					.map(WmScorePackageStatus::getUserId)
+					.collect(Collectors.joining(","));
+			ouPut.setUserNames(userNames);
+
+			Set<String> userIds = statusList.stream().map(WmScorePackageStatus::getTaskUserId).collect(Collectors.toSet());
+			if (CollUtil.isNotEmpty(userIds)) {
+				List<SysUser> users = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
+				String userPhones = users.stream().map(SysUser::getUsername).collect(Collectors.joining(","));
+				ouPut.setUserPhones(userPhones);
+				// 脱敏的身份证号
+				String idCardNums = users.stream().map(user -> DesensitizedUtil.idCardNum(user.getIdCardNumber(), 5, 4)).collect(Collectors.joining(","));
+				ouPut.setIdCardNums(idCardNums);
+			}
+			// 查询结算成功时间
+			List<WmScorePackageSettleNote> packageSettleNoteList = settleNoteMapper.selectList(Wrappers.<WmScorePackageSettleNote>lambdaQuery()
+					.eq(WmScorePackageSettleNote::getPackageId, ouPut.getId()));
+			if (CollectionUtil.isNotEmpty(packageSettleNoteList)) {
+				WmScorePackageSettleNote settleNote = packageSettleNoteList.get(0);
+				LocalDateTime notifyTime = settleNote.getNotifyTime();
+				if (notifyTime != null) {
+					ouPut.setBelongDate(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(notifyTime));
+				}
+				if (ouPut.getInvoiceCategory() == null) {
+					ouPut.setInvoiceCategory(settleNote.getInvoiceType());
+				}
+
+				if (ouPut.getSettleAmount() == null) {
+					BigDecimal tmp = new BigDecimal("0");
+					for (WmScorePackageSettleNote note : packageSettleNoteList) {
+						if (null != note.getSettleAmount()) {
+							tmp = tmp.add(note.getSettleAmount());
+						}
+					}
+					ouPut.setSettleAmount(tmp);
+				}
+				if (StringUtils.isBlank(ouPut.getSettleStatus())) {
+					ouPut.setSettleStatus(String.valueOf(settleNote.getSettleNoteStatus()));
+				}
+				ouPut.setSubjectLocation(settleNote.getSubjectLocation());
+				if (settleNote.getSubjectLocation() != null) {
+					ouPut.setSubjectLocationName(settleNote.getSubjectLocation().getDescription());
+				}
+				ouPut.setSubToGigTime(settleNote.getSubToGigTime());
+				ouPut.setActualAmount(settleNote.getActualAmount());
+				ouPut.setCategoryName(settleNote.getCategoryName());
+			}
+			if (PackageTypeEnum.TYPE1_HCP_PACKAGE.val().equals(ouPut.getPackageType1())) {
+				// 如果是患者教育,则转换积分值 '分'->'元'
+				WmScorePackage scorePackage = this.getById(ouPut.getId());
+				if (scorePackage != null && StringUtils.isNumeric(scorePackage.getUserScore())) {
+					ouPut.setScore(String.format("%.2f", Integer.parseInt(scorePackage.getUserScore()) / 100.0));
+				}
+			}
+			if (StrUtil.isNotBlank(ouPut.getSettleStatus())) {
+				ouPut.setSettleStatusName(SettleStatusEnum.resolve(ouPut.getSettleStatus()).getName2());
+			}
+		}
+	}
 }
 }

+ 4 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptMapper.xml

@@ -171,7 +171,10 @@
 				tax_code = #{taxCode,jdbcType=VARCHAR},
 				tax_code = #{taxCode,jdbcType=VARCHAR},
 			</if>
 			</if>
 			<if test="deptPermissions != null and deptPermissions != ''">
 			<if test="deptPermissions != null and deptPermissions != ''">
-				dept_permissions = #{deptPermissions, jdbcType=VARCHAR}
+				dept_permissions = #{deptPermissions, jdbcType=VARCHAR},
+			</if>
+			<if test="financialReviewType != null">
+				financial_review_type = #{financialReviewType.type, jdbcType=CHAR}
 			</if>
 			</if>
 		</set>
 		</set>
 		where dept_id = #{deptId,jdbcType=BIGINT}
 		where dept_id = #{deptId,jdbcType=BIGINT}

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaAgentMapper.xml

@@ -75,7 +75,7 @@
 	<!-- 分页查询派工企业 -->
 	<!-- 分页查询派工企业 -->
 	<select id="selectWmManagementPage" resultMap="wmDaAgentMap">
 	<select id="selectWmManagementPage" resultMap="wmDaAgentMap">
 		SELECT
 		SELECT
-		a.*, d.dept_permissions, d.level as dept_level
+		a.*, d.dept_permissions, d.level as dept_level, d.financial_review_type
 		FROM wm_da_agent a
 		FROM wm_da_agent a
 		LEFT JOIN sys_dept d ON d.dept_id = a.dept_id
 		LEFT JOIN sys_dept d ON d.dept_id = a.dept_id
 		<where>
 		<where>

+ 2 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaDrugEntMapper.xml

@@ -64,7 +64,8 @@
 			e.pgqx,
 			e.pgqx,
 			e.management,
 			e.management,
 			e.subject_type,
 			e.subject_type,
-			d.dept_permissions
+			d.dept_permissions,
+			d.financial_review_type
 		FROM wm_da_drug_ent e LEFT JOIN sys_dept d ON e.dept_id=d.dept_id
 		FROM wm_da_drug_ent e LEFT JOIN sys_dept d ON e.dept_id=d.dept_id
 		<where>
 		<where>
 			<if test="query.entname != null and query.entname != ''">
 			<if test="query.entname != null and query.entname != ''">

+ 71 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmScorePackageMapper.xml

@@ -1723,4 +1723,75 @@
 			</if>
 			</if>
 		</where>
 		</where>
 	</select>
 	</select>
+
+	<!-- 查询财务结算复核数据 -->
+	<select id="listFinancialReview" resultType="com.qunzhixinxi.hnqz.admin.entity.vo.SettleFinancialReviewVO">
+		SELECT u.realname,
+			   u.id_card_number,
+			   u.username,
+			   u.dept_id,
+			   n.user_id,
+			   n.subject_location,
+			   sum(n.settle_amount) AS settle_amount,
+			   sum(n.actual_amount) AS actual_amount,
+			   count(p.id)          AS package_count,
+			   group_concat(n.id) AS settle_note_ids
+		FROM wm_score_package_settle_note n
+		LEFT JOIN wm_score_package p ON n.package_id = p.id
+				 LEFT JOIN sys_user u ON u.user_id = n.user_id
+		WHERE (
+					p.send_package_dept_id = #{query.deptId} OR
+					p.mah_settle_dept_id = #{query.deptId} AND p.mah_settle_step = 'FINANCE')
+		  AND p.package_finish_status = 1
+		  AND p.typeid IN (4, 5)
+		  AND p.settle_flag = 1
+		<if test="query.subjectLocation != null">
+			AND n.subject_location = #{query.subjectLocation}
+		</if>
+		<if test="query.realname != null and query.realname != ''">
+			AND u.realname like CONCAT('%',#{query.realname},'%')
+		</if>
+		<if test="query.reviewFlag != null and query.reviewFlag == true">
+			AND n.review_status in ('PASSED', 'REJECTED')
+		</if>
+		<if test="query.reviewFlag == null or query.reviewFlag == false">
+			AND n.review_status = 'TO_BE_REVIEWED'
+		</if>
+		GROUP BY n.user_id
+	</select>
+
+	<!-- 结算复核-查看 -->
+	<select id="pageFinancialReviewDetail" resultMap="packageSettleMap">
+		SELECT p.id,
+			p.pkg_sn,
+			p.score_package_name,
+			p.score,
+			p.send_package_dept_id,
+			d.name,
+			p.create_time,
+			u.realname,
+			u.id_card_number,
+			u.username,
+			u.dept_id,
+			n.user_id,
+			n.subject_location,
+			p.settle_status,
+			n.invoice_type       as invoice_category,
+			n.settle_amount,
+			n.actual_amount,
+			p.settlement_date,
+			n.sub_time,
+			n.sub_to_gig_time,
+			n.notify_time
+		FROM wm_score_package_settle_note n
+		LEFT JOIN wm_score_package p ON n.package_id = p.id
+		LEFT JOIN sys_user u ON u.user_id = n.user_id
+		LEFT JOIN sys_dept d on d.dept_id = p.send_package_dept_id
+		WHERE n.id in (
+		<foreach collection="query.settleNoteIds" item="noteId" index="index" separator=",">
+			#{noteId}
+		</foreach>
+		)
+		AND n.review_status = 'TO_BE_REVIEWED'
+	</select>
 </mapper>
 </mapper>