Przeglądaj źródła

feat(controller): 积分包结算管理-导出

lixuesong 4 lat temu
rodzic
commit
0fa1ec55e5

+ 51 - 8
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java

@@ -1,16 +1,18 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
-import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
-import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
-import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageSettleNoteMapper;
-import com.qunzhixinxi.hnqz.admin.service.*;
+import com.qunzhixinxi.hnqz.admin.entity.model.excel.WmScorePackageSettleExcelModel;
+import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
+import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SettleStatusEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
+import com.qunzhixinxi.hnqz.admin.service.WmPayOffService;
+import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
@@ -19,10 +21,14 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 结算表
@@ -157,6 +163,43 @@ public class WmPayOffController {
 		return R.ok(outputList);
 	}
 
+	/**
+	 * 结算包结算导出
+	 *
+	 * @param input
+	 * @return
+	 */
+	@ApiOperation(value = "积分包结算导出", notes = "积分包结算导出")
+	@ResponseExcel(name = "exportPackageSettle", sheet = "积分包结算数据")
+	@SysLog("积分包结算导出" )
+	@GetMapping("/exportPackageSettle")
+	public List<WmScorePackageSettleExcelModel> exportPackageSettle(WmScorePackageSettleInput input) {
+		input.setSendPackageDeptId(SecurityUtils.getUser().getDeptId() +"");
+		input.setPackageFinishStatus("1");
+		input.setTypeid("4");
+		input.setSettleFlag("1");
+		List<WmScorePackageSettleOutput> list = wmScorePackageService.listAllPackageSettle(input);
+		// 转换为导出实体
+		List<WmScorePackageSettleExcelModel> exportList = new ArrayList<>();
+		list.forEach(settleOutput -> {
+			WmScorePackageSettleExcelModel export = new WmScorePackageSettleExcelModel();
+			export.setScorePackageName(settleOutput.getScorePackageName());
+			export.setPackageType1(PackageTypeEnum.type1Resolve(settleOutput.getPackageType1()).getName());
+			export.setPackageEntName(settleOutput.getPackageEntName());
+			export.setCreateTime(settleOutput.getCreateTime());
+			export.setPackageFinishStatus(PackageFinishStatusEnum.resolve(settleOutput.getPackageFinishStatus()).getName());
+			export.setScore(settleOutput.getScore());
+			export.setSubType(SubjectTypeEnum.resolve(settleOutput.getSubType()).getDesc());
+			export.setInvoiceCategory(WmScorePackageSettleExcelModel.CategoryEnum.resolve(settleOutput.getInvoiceCategory()).getDesc());
+			export.setUserNames(settleOutput.getUserNames());
+			export.setSettleAmount(settleOutput.getSettleAmount());
+			export.setSettleStatus(SettleStatusEnum.resolve(settleOutput.getSettleStatus()).getName());
+			export.setBelongDate(settleOutput.getBelongDate());
+			exportList.add(export);
+		});
+
+		return exportList;
+	}
 
 	@ApiOperation(value = "结算", notes = "结算")
 	@SysLog("结算" )

+ 144 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/excel/WmScorePackageSettleExcelModel.java

@@ -0,0 +1,144 @@
+package com.qunzhixinxi.hnqz.admin.entity.model.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 积分包结算-导出excel模型
+ *
+ * @author lixuesong
+ * @date 2021年07月12日 14:28
+ */
+@Data
+public class WmScorePackageSettleExcelModel {
+
+	/**
+	 * 积分包名称
+	 */
+	@ColumnWidth(40)
+	@ExcelProperty("积分包名称")
+	private String scorePackageName;
+
+	/**
+	 * 积分包类型
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("积分包类型")
+	private String packageType1;
+
+	/**
+	 * 发包机构
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("发包机构")
+	private String packageEntName;
+
+	/**
+	 * 发包时间
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("发包时间")
+	private LocalDateTime createTime;
+
+	/**
+	 * 积分包完成状态
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("积分包状态")
+	private String packageFinishStatus;
+
+	/**
+	 * 积分包值
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("积分包值")
+	private String score;
+
+	/**
+	 * 结算渠道
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("结算渠道")
+	private String subType;
+
+	/**
+	 * 发票类目
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("发票类目")
+	private String invoiceCategory;
+
+	/**
+	 * 结算人员
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("结算人员")
+	private String userNames;
+
+	/**
+	 * 实际结算金额
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("实际结算金额")
+	private BigDecimal settleAmount;
+
+	/**
+	 * 结算状态
+	 */
+	@ColumnWidth(15)
+	@ExcelProperty("结算状态")
+	private String settleStatus;
+
+	/**
+	 * 结算成功时间
+	 */
+	@ColumnWidth(20)
+	@ExcelProperty("结算成功时间")
+	private String belongDate;
+
+	/**
+	 *  结算渠道
+	 */
+	@Getter
+	@AllArgsConstructor
+	public enum CategoryEnum {
+		//
+		CATEGORY_1(1, "推广服务费"),
+		CATEGORY_2(2, "营销服务费"),
+		CATEGORY_3(3, "信息服务费"),
+		CATEGORY_4(4, "专业技术服务"),
+		CATEGORY_12(12, "健康咨询服务费"),
+		CATEGORY_30(30, "市场推广服务"),
+		CATEGORY_70(70, "其他咨询服务"),
+		CATEGORY_77(77, "技术咨询划服务"),
+		CATEGORY_203(203, "现场辅助服务"),
+		CATEGORY_NULL(-1, ""),
+		;
+
+		/**
+		 * 类型
+		 */
+		private Integer code;
+
+		/**
+		 * 描述
+		 */
+		private String desc;
+
+		public static CategoryEnum resolve(Integer val) {
+			for (CategoryEnum categoryEnum: CategoryEnum.values()){
+				if (categoryEnum.code.equals(val)){
+					return categoryEnum;
+				}
+			}
+			return CATEGORY_NULL;
+		}
+
+	}
+}

+ 19 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/PackageFinishStatusEnum.java

@@ -11,19 +11,35 @@ public enum PackageFinishStatusEnum {
 	/**
 	 * 未完成
 	 */
-	NOT_COMPLETE("0"),
+	NOT_COMPLETE("0", "未完成"),
 	/**
 	 * 已完成
 	 */
-	COMPLETED("1");
+	COMPLETED("1", "已完成");
 
 	private String val;
 
-	PackageFinishStatusEnum(String val) {
+	private String name;
+
+	PackageFinishStatusEnum(String val, String name) {
 		this.val = val;
+		this.name = name;
 	}
 
 	public String val() {
 		return this.val;
 	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public static PackageFinishStatusEnum resolve(String val) {
+		for (PackageFinishStatusEnum packageFinishStatusEnum: PackageFinishStatusEnum.values()){
+			if (packageFinishStatusEnum.val.equals(val)){
+				return packageFinishStatusEnum;
+			}
+		}
+		return null;
+	}
 }

+ 9 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/PackageTypeEnum.java

@@ -52,4 +52,13 @@ public enum PackageTypeEnum {
 	public String getName() {
 		return this.name;
 	}
+
+	public static PackageTypeEnum type1Resolve(String val){
+		for (PackageTypeEnum packageTypeEnum: PackageTypeEnum.values()){
+			if (packageTypeEnum.val.equals(val) && packageTypeEnum.name().startsWith("TYPE1_")){
+				return packageTypeEnum;
+			}
+		}
+		return null;
+	}
 }

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

@@ -0,0 +1,39 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import lombok.Getter;
+
+/**
+ * 结算状态
+ *
+ * @author lixuesong
+ * @date 2021年07月12日 16:59
+ */
+@Getter
+public enum SettleStatusEnum {
+
+	// 结算状态
+	SETTLE_STATUS_SUCCESS("1", "结算成功"),
+	SETTLE_STATUS_FAIL("2", "结算失败"),
+	SETTLE_STATUS_SUBMIT("3", "已提交"),
+	SETTLE_STATUS_NO("4", "未结算"),
+	SETTLE_STATUS_PART("5", "部分成功"),
+	SETTLE_STATUS_WAIT("9", "待结算");
+
+	private String val;
+
+	private String name;
+
+	SettleStatusEnum(String val, String name) {
+		this.val = val;
+		this.name = name;
+	}
+
+	public static SettleStatusEnum resolve(String val){
+		for (SettleStatusEnum settleStatusEnum: SettleStatusEnum.values()){
+			if (settleStatusEnum.val.equals(val)){
+				return settleStatusEnum;
+			}
+		}
+		return null;
+	}
+}

+ 9 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectTypeEnum.java

@@ -28,4 +28,13 @@ public enum SubjectTypeEnum {
 	 */
 	private String desc;
 
+	public static SubjectTypeEnum resolve(String code) {
+		for (SubjectTypeEnum subjectTypeEnum: SubjectTypeEnum.values()){
+			if (subjectTypeEnum.code.equals(code)){
+				return subjectTypeEnum;
+			}
+		}
+		return null;
+	}
+
 }

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

@@ -118,4 +118,12 @@ public interface WmScorePackageMapper extends DataScopeMapper<WmScorePackage> {
 	IPage<WmScorePackageApiOutput> getPackageListForReceive(Page page,@Param("query")WmScorePackage wmScorePackage);
 
 	IPage<WmScorePackageSettleOutput> listPackageSettleList(Page page, @Param("query")WmScorePackageSettleInput input);
+
+	/**
+	 * 结算包结算列表
+	 *
+	 * @param input
+	 * @return
+	 */
+	List<WmScorePackageSettleOutput> listAllPackageSettle(@Param("query")WmScorePackageSettleInput input);
 }

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

@@ -124,8 +124,23 @@ public interface WmScorePackageService extends IService<WmScorePackage> {
 
 	IPage<WmScorePackageApiOutput> getPackageListForReceive(Page page, WmScorePackage wmScorePackage);
 
+	/**
+	 * 积分包结算列表(分页)
+	 *
+	 * @param page
+	 * @param input
+	 * @return
+	 */
 	IPage<WmScorePackageSettleOutput> listPackageSettleList(Page page, WmScorePackageSettleInput input);
 
+	/**
+	 * 积分包结算列表
+	 *
+	 * @param input
+	 * @return
+	 */
+	List<WmScorePackageSettleOutput> listAllPackageSettle(WmScorePackageSettleInput input);
+
 	/**
 	 * 获取当前部门的基于所有积分包的相关信息
 	 *

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

@@ -1239,6 +1239,13 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		return wmScorePackageMapper.getPackageListForReceive(page, wmScorePackage);
 	}
 
+	/**
+	 * 积分包结算列表(分页)
+	 *
+	 * @param page
+	 * @param input
+	 * @return
+	 */
 	@Override
 	public IPage<WmScorePackageSettleOutput> listPackageSettleList(Page page, WmScorePackageSettleInput input) {
 		IPage<WmScorePackageSettleOutput> settleListPage = wmScorePackageMapper.listPackageSettleList(page, input);
@@ -1287,6 +1294,58 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
 		return settleListPage;
 	}
 
+	/**
+	 * 积分包结算列表
+	 *
+	 * @param input
+	 * @return
+	 */
+	@Override
+	public List<WmScorePackageSettleOutput> listAllPackageSettle(WmScorePackageSettleInput input) {
+		List<WmScorePackageSettleOutput> settleList = wmScorePackageMapper.listAllPackageSettle(input);
+		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);
+			// 查询结算成功时间
+			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()));
+				}
+			}
+			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));
+				}
+			}
+		}
+		return settleList;
+	}
+
 	/**
 	 * 获取当前部门的基于所有积分包的相关信息
 	 *

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

@@ -1140,6 +1140,7 @@
 		p.create_time DESC
 	</select>
 
+	<!-- 积分包结算(分页) -->
 	<select id="listPackageSettleList" resultType="com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput">
 		SELECT p.id, d.name packageEntName, p.score_package_name, p.create_time, p.package_status, p.package_finish_status,
 		p.settle_status,p.invoice_category, p.settle_amount ,p.package_type1, p.score, p.package_type2, p.sub_type
@@ -1173,4 +1174,39 @@
 		ORDER BY
 		p.create_time DESC
 	</select>
+
+	<!-- 积分包结算列表 -->
+	<select id="listAllPackageSettle" resultType="com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput">
+		SELECT p.id, d.name packageEntName, p.score_package_name, p.create_time, p.package_status, p.package_finish_status,
+		p.settle_status, p.invoice_category, p.settle_amount ,p.package_type1, p.score, p.package_type2, p.sub_type
+		FROM wm_score_package p, sys_dept d
+		WHERE
+		p.send_package_dept_id = d.dept_id
+		<if test="query.sendPackageDeptId != null and query.sendPackageDeptId != ''">
+			AND p.send_package_dept_id= #{query.sendPackageDeptId}
+		</if>
+		<if test="query.scorePackageName != null and query.scorePackageName != ''">
+			AND p.score_package_name like CONCAT('%',#{query.scorePackageName},'%')
+		</if>
+		<if test="query.belongDate != null and query.belongDate != ''">
+			AND p.belong_date= #{query.belongDate}
+		</if>
+		<if test="query.typeid != null and query.typeid != ''">
+			AND p.typeid= #{query.typeid}
+		</if>
+		<if test="query.packageType1 != null and query.packageType1 != ''">
+			AND p.package_type1= #{query.packageType1}
+		</if>
+		<if test="query.packageFinishStatus != null and query.packageFinishStatus != ''">
+			AND p.package_finish_status= #{query.packageFinishStatus}
+		</if>
+		<if test="query.packageType2 != null and query.packageType2 != ''">
+			AND p.package_type2= #{query.packageType2}
+		</if>
+		<if test="query.settleFlag != null and query.settleFlag != ''">
+			AND p.settle_flag= #{query.settleFlag}
+		</if>
+		ORDER BY
+		p.create_time DESC
+	</select>
 </mapper>