员工计价有效无效明细 ++
This commit is contained in:
parent
c3c13687a6
commit
260492fa0a
@ -0,0 +1,133 @@
|
||||
package org.dromara.mps.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.dromara.common.excel.core.ExcelResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.mps.domain.vo.MpsEmpAddItemsVo;
|
||||
import org.dromara.mps.domain.bo.MpsEmpAddItemsBo;
|
||||
import org.dromara.mps.service.IMpsEmpAddItemsService;
|
||||
import org.dromara.mps.domain.vo.MpsEmpAddItemsImportVo;
|
||||
import org.dromara.mps.listener.MpsEmpAddItemsImportListener;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 员工附加项
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/mps/empAddItems")
|
||||
public class MpsEmpAddItemsController extends BaseController {
|
||||
|
||||
private final IMpsEmpAddItemsService mpsEmpAddItemsService;
|
||||
|
||||
/**
|
||||
* 查询员工附加项列表
|
||||
*/
|
||||
@SaCheckPermission("mps:empAddItems:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<MpsEmpAddItemsVo> list(MpsEmpAddItemsBo bo, PageQuery pageQuery) {
|
||||
return mpsEmpAddItemsService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出员工附加项列表
|
||||
*/
|
||||
@SaCheckPermission("mps:empAddItems:export")
|
||||
@Log(title = "员工附加项", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(MpsEmpAddItemsBo bo, HttpServletResponse response) {
|
||||
List<MpsEmpAddItemsVo> list = mpsEmpAddItemsService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "员工附加项", MpsEmpAddItemsVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取导入模板
|
||||
*/
|
||||
@PostMapping("/importTemplate")
|
||||
public void importTemplate(HttpServletResponse response) {
|
||||
ExcelUtil.exportExcel(new ArrayList<>(), "员工附加项", MpsEmpAddItemsImportVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入数据
|
||||
*
|
||||
* @param file 导入文件
|
||||
* @param updateSupport 是否更新已存在数据
|
||||
*/
|
||||
@Log(title = "员工附加项", businessType = BusinessType.IMPORT)
|
||||
@SaCheckPermission("mps:empAddItems:import")
|
||||
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
|
||||
ExcelResult<MpsEmpAddItemsImportVo> result = ExcelUtil.importExcel(file.getInputStream(), MpsEmpAddItemsImportVo.class, new MpsEmpAddItemsImportListener(updateSupport));
|
||||
return R.ok(result.getAnalysis());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取员工附加项详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("mps:empAddItems:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<MpsEmpAddItemsVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(mpsEmpAddItemsService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增员工附加项
|
||||
*/
|
||||
@SaCheckPermission("mps:empAddItems:add")
|
||||
@Log(title = "员工附加项", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody MpsEmpAddItemsBo bo) {
|
||||
return toAjax(mpsEmpAddItemsService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改员工附加项
|
||||
*/
|
||||
@SaCheckPermission("mps:empAddItems:edit")
|
||||
@Log(title = "员工附加项", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody MpsEmpAddItemsBo bo) {
|
||||
return toAjax(mpsEmpAddItemsService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除员工附加项
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("mps:empAddItems:remove")
|
||||
@Log(title = "员工附加项", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(mpsEmpAddItemsService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package org.dromara.mps.domain;
|
||||
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
/**
|
||||
* 员工附加项对象 mps_emp_add_items
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("mps_emp_add_items")
|
||||
public class MpsEmpAddItems extends TenantEntity {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 支行代码
|
||||
*/
|
||||
private String branchId;
|
||||
|
||||
/**
|
||||
* 支行名称
|
||||
*/
|
||||
private String branchName;
|
||||
|
||||
/**
|
||||
* 员工姓名
|
||||
*/
|
||||
private String employeeName;
|
||||
|
||||
/**
|
||||
* 营销编号
|
||||
*/
|
||||
private String marketingCode;
|
||||
|
||||
/**
|
||||
* 附加项
|
||||
*/
|
||||
private BigDecimal addItem;
|
||||
|
||||
/**
|
||||
* 记录月份
|
||||
*/
|
||||
private String recordMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package org.dromara.mps.domain.bo;
|
||||
|
||||
import org.dromara.mps.domain.MpsEmpAddItems;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 员工附加项业务对象 mps_emp_add_items
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = MpsEmpAddItems.class, reverseConvertGenerate = false)
|
||||
public class MpsEmpAddItemsBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 支行代码
|
||||
*/
|
||||
@NotBlank(message = "支行代码不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String branchId;
|
||||
|
||||
/**
|
||||
* 支行名称
|
||||
*/
|
||||
@NotBlank(message = "支行名称不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String branchName;
|
||||
|
||||
/**
|
||||
* 员工姓名
|
||||
*/
|
||||
@NotBlank(message = "员工姓名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String employeeName;
|
||||
|
||||
/**
|
||||
* 营销编号
|
||||
*/
|
||||
@NotBlank(message = "营销编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String marketingCode;
|
||||
|
||||
/**
|
||||
* 附加项
|
||||
*/
|
||||
@NotNull(message = "附加项不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private BigDecimal addItem;
|
||||
|
||||
/**
|
||||
* 记录月份
|
||||
*/
|
||||
@NotBlank(message = "记录月份不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String recordMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package org.dromara.mps.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 员工附加项视图对象 mps_emp_add_items
|
||||
*
|
||||
* 自行按照业务需要修改模板列
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
// @Accessors(chain = true) // 导入不允许使用 会找不到set方法
|
||||
public class MpsEmpAddItemsImportVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@ExcelProperty(value = "ID")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 支行代码
|
||||
*/
|
||||
@ExcelProperty(value = "支行代码")
|
||||
private String branchId;
|
||||
|
||||
/**
|
||||
* 支行名称
|
||||
*/
|
||||
@ExcelProperty(value = "支行名称")
|
||||
private String branchName;
|
||||
|
||||
/**
|
||||
* 员工姓名
|
||||
*/
|
||||
@ExcelProperty(value = "员工姓名")
|
||||
private String employeeName;
|
||||
|
||||
/**
|
||||
* 营销编号
|
||||
*/
|
||||
@ExcelProperty(value = "营销编号")
|
||||
private String marketingCode;
|
||||
|
||||
/**
|
||||
* 附加项
|
||||
*/
|
||||
@ExcelProperty(value = "附加项")
|
||||
private BigDecimal addItem;
|
||||
|
||||
/**
|
||||
* 记录月份
|
||||
*/
|
||||
@ExcelProperty(value = "记录月份")
|
||||
private String recordMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package org.dromara.mps.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import org.dromara.mps.domain.MpsEmpAddItems;
|
||||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import cn.idev.excel.annotation.ExcelProperty;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 员工附加项视图对象 mps_emp_add_items
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = MpsEmpAddItems.class)
|
||||
public class MpsEmpAddItemsVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@ExcelProperty(value = "ID")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 支行代码
|
||||
*/
|
||||
@ExcelProperty(value = "支行代码")
|
||||
private String branchId;
|
||||
|
||||
/**
|
||||
* 支行名称
|
||||
*/
|
||||
@ExcelProperty(value = "支行名称")
|
||||
private String branchName;
|
||||
|
||||
/**
|
||||
* 员工姓名
|
||||
*/
|
||||
@ExcelProperty(value = "员工姓名")
|
||||
private String employeeName;
|
||||
|
||||
/**
|
||||
* 营销编号
|
||||
*/
|
||||
@ExcelProperty(value = "营销编号")
|
||||
private String marketingCode;
|
||||
|
||||
/**
|
||||
* 附加项
|
||||
*/
|
||||
@ExcelProperty(value = "附加项")
|
||||
private BigDecimal addItem;
|
||||
|
||||
/**
|
||||
* 记录月份
|
||||
*/
|
||||
@ExcelProperty(value = "记录月份")
|
||||
private String recordMonth;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,140 @@
|
||||
package org.dromara.mps.listener;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.http.HtmlUtil;
|
||||
import cn.idev.excel.context.AnalysisContext;
|
||||
import cn.idev.excel.event.AnalysisEventListener;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.ValidatorUtils;
|
||||
import org.dromara.common.excel.core.ExcelListener;
|
||||
import org.dromara.common.excel.core.ExcelResult;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.mps.domain.MpsEmpAddItems;
|
||||
import org.dromara.mps.domain.bo.MpsEmpAddItemsBo;
|
||||
import org.dromara.mps.domain.vo.MpsEmpAddItemsImportVo;
|
||||
import org.dromara.mps.service.IMpsEmpAddItemsService;
|
||||
import cn.hutool.core.lang.Pair;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 自定义导入
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Slf4j
|
||||
public class MpsEmpAddItemsImportListener extends AnalysisEventListener<MpsEmpAddItemsImportVo> implements ExcelListener<MpsEmpAddItemsImportVo> {
|
||||
|
||||
private final IMpsEmpAddItemsService mpsEmpAddItemsService;
|
||||
private final Boolean isUpdateSupport;
|
||||
private final Long operUserId;
|
||||
private int countN = 1;
|
||||
|
||||
// 存储所有解析成功的对象
|
||||
private final Collection<MpsEmpAddItems> successList = new ArrayList<>();
|
||||
|
||||
//TODO 考虑展示数据还是行数,暂定行数
|
||||
// 存储所有解析失败的对象及错误信息
|
||||
//private final Collection<Pair<MpsEmpAddItemsImportVo, String>> failureList = new ArrayList<>();
|
||||
private final Collection<Pair<Integer, String>> failureList = new ArrayList<>();
|
||||
|
||||
public MpsEmpAddItemsImportListener(Boolean isUpdateSupport) {
|
||||
this.mpsEmpAddItemsService = SpringUtils.getBean(IMpsEmpAddItemsService.class);
|
||||
this.isUpdateSupport = isUpdateSupport;
|
||||
this.operUserId = LoginHelper.getUserId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(MpsEmpAddItemsImportVo mpsEmpAddItemsImportVo, AnalysisContext context) {
|
||||
try {
|
||||
countN++;
|
||||
|
||||
//TODO 自行实现验重逻辑
|
||||
//MpsEmpAddItemsVo mpsEmpAddItemsVo1 = this.mpsEmpAddItemsService.queryById(mpsEmpAddItemsVo.getDataId());
|
||||
|
||||
// 1. 基本数据验证
|
||||
ValidatorUtils.validate(mpsEmpAddItemsImportVo);
|
||||
|
||||
// 2. 转换为业务对象
|
||||
MpsEmpAddItems mpsEmpAddItems = BeanUtil.toBean(mpsEmpAddItemsImportVo, MpsEmpAddItems.class);
|
||||
|
||||
// 3. 添加到成功列表(稍后批量处理)
|
||||
successList.add(mpsEmpAddItems);
|
||||
|
||||
} catch (Exception e) {
|
||||
// 捕获并记录所有验证错误
|
||||
String errorMsg = e.getMessage();
|
||||
if (e instanceof ConstraintViolationException cvException) {
|
||||
errorMsg = StreamUtils.join(cvException.getConstraintViolations(),
|
||||
ConstraintViolation::getMessage, ", ");
|
||||
}
|
||||
failureList.add(Pair.of(countN, errorMsg));
|
||||
log.error("数据验证失败: {}", errorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
// 所有数据解析完成后执行批量操作
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExcelResult<MpsEmpAddItemsImportVo> getExcelResult() {
|
||||
// 存在验证错误则直接返回错误
|
||||
if (!failureList.isEmpty()) {
|
||||
StringBuilder errorMsg = new StringBuilder("数据验证失败,共 ")
|
||||
.append(failureList.size())
|
||||
.append(" 条错误:<br/>");
|
||||
failureList.forEach(pair ->
|
||||
//errorMsg.append("\n行数据: ")
|
||||
errorMsg.append("行数[")
|
||||
.append(pair.getKey())
|
||||
.append("],")
|
||||
.append("错误:")
|
||||
.append(pair.getValue())
|
||||
.append("<br/>"));
|
||||
throw new ServiceException(errorMsg.toString());
|
||||
}
|
||||
|
||||
try {
|
||||
// 执行事务性批量导入
|
||||
mpsEmpAddItemsService.batchInsertOrUpdate(successList, isUpdateSupport);
|
||||
return createSuccessResult();
|
||||
} catch (Exception e) {
|
||||
// 事务回滚,整体导入失败
|
||||
log.error("批量导入失败", e);
|
||||
throw new ServiceException("导入失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private ExcelResult<MpsEmpAddItemsImportVo> createSuccessResult() {
|
||||
return new ExcelResult<>() {
|
||||
@Override
|
||||
public String getAnalysis() {
|
||||
return "成功导入 " + successList.size() + " 条数据";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MpsEmpAddItemsImportVo> getList() {
|
||||
return successList.stream()
|
||||
.map(bo -> BeanUtil.toBean(bo, MpsEmpAddItemsImportVo.class))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getErrorList() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,41 @@
|
||||
package org.dromara.mps.mapper;
|
||||
|
||||
import org.dromara.mps.domain.MpsEmpAddItems;
|
||||
import org.dromara.mps.domain.vo.MpsEmpAddItemsVo;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.common.mybatis.annotation.DataColumn;
|
||||
import org.dromara.common.mybatis.annotation.DataPermission;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 员工附加项Mapper接口
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
public interface MpsEmpAddItemsMapper extends BaseMapperPlus<MpsEmpAddItems, MpsEmpAddItemsVo> {
|
||||
|
||||
@DataPermission({
|
||||
@DataColumn(key = "deptName", value = "create_dept"),
|
||||
@DataColumn(key = "userName", value = "create_by")
|
||||
})
|
||||
default Page<MpsEmpAddItemsVo> selectPageMpsEmpAddItemsList(Page<MpsEmpAddItems> page, Wrapper<MpsEmpAddItems> queryWrapper) {
|
||||
return this.selectVoPage(page, queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
//@DataPermission({
|
||||
// @DataColumn(key = "deptName", value = "create_dept"),
|
||||
// @DataColumn(key = "userName", value = "create_by")
|
||||
//})
|
||||
// List<SysUserExportVo> selectMpsEmpAddItemsExportList(@Param(Constants.WRAPPER) Wrapper<MpsEmpAddItems> queryWrapper);
|
||||
|
||||
// 批量插入
|
||||
void batchInsert(@Param("list") Collection<MpsEmpAddItems> list);
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package org.dromara.mps.service;
|
||||
|
||||
import org.dromara.mps.domain.MpsEmpAddItems;
|
||||
import org.dromara.mps.domain.vo.MpsEmpAddItemsVo;
|
||||
import org.dromara.mps.domain.bo.MpsEmpAddItemsBo;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 员工附加项Service接口
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
public interface IMpsEmpAddItemsService {
|
||||
|
||||
//事务性批量处理
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
void batchInsertOrUpdate(Collection<MpsEmpAddItems> list, Boolean isUpdateSupport);
|
||||
|
||||
/**
|
||||
* 查询员工附加项
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 员工附加项
|
||||
*/
|
||||
MpsEmpAddItemsVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询员工附加项列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 员工附加项分页列表
|
||||
*/
|
||||
TableDataInfo<MpsEmpAddItemsVo> queryPageList(MpsEmpAddItemsBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的员工附加项列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 员工附加项列表
|
||||
*/
|
||||
List<MpsEmpAddItemsVo> queryList(MpsEmpAddItemsBo bo);
|
||||
|
||||
/**
|
||||
* 新增员工附加项
|
||||
*
|
||||
* @param bo 员工附加项
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(MpsEmpAddItemsBo bo);
|
||||
|
||||
/**
|
||||
* 修改员工附加项
|
||||
*
|
||||
* @param bo 员工附加项
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(MpsEmpAddItemsBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除员工附加项信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
@ -0,0 +1,196 @@
|
||||
package org.dromara.mps.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import org.dromara.common.core.enums.FormatsType;
|
||||
import org.dromara.common.core.utils.DateUtils;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.mps.domain.bo.MpsEmpAddItemsBo;
|
||||
import org.dromara.mps.domain.vo.MpsEmpAddItemsVo;
|
||||
import org.dromara.mps.domain.MpsEmpAddItems;
|
||||
import org.dromara.mps.mapper.MpsEmpAddItemsMapper;
|
||||
import org.dromara.mps.service.IMpsEmpAddItemsService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 员工附加项Service业务层处理
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-27
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class MpsEmpAddItemsServiceImpl implements IMpsEmpAddItemsService {
|
||||
|
||||
private final MpsEmpAddItemsMapper baseMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void batchInsertOrUpdate(Collection<MpsEmpAddItems> list, Boolean isUpdateSupport) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 业务校验(可选),参照demo
|
||||
//validateBusinessRules(list);
|
||||
|
||||
// 2. 批量插入/更新
|
||||
if (isUpdateSupport) {
|
||||
baseMapper.insertOrUpdateBatch(list);
|
||||
} else {
|
||||
//baseMapper.insertBatch(list);
|
||||
|
||||
/**
|
||||
* 多笔写入方式有循环写入、开启数据库batch模式、sql拼接后多笔入库以及mapper foreach多笔写入模式
|
||||
* 经对比验证,foreach方式效率最高
|
||||
*
|
||||
* **/
|
||||
|
||||
//由于mybatis的批量方法为伪批量,以下优化为真批量
|
||||
//SqlHelper与service的注解事务管理冲突,所以此处自行写分批
|
||||
int batchSize = 1000;//每批1000条
|
||||
List<MpsEmpAddItems> batchList = new ArrayList<>(batchSize);
|
||||
for (MpsEmpAddItems item : list) {
|
||||
batchList.add(item);
|
||||
if (batchList.size() == batchSize) {
|
||||
baseMapper.batchInsert(batchList);
|
||||
batchList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
// 处理最后一批不满batchSize的数据
|
||||
if (!batchList.isEmpty()) {
|
||||
baseMapper.batchInsert(batchList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 示例:业务重复检查
|
||||
/*private void validateBusinessRules(Collection<MpsEmpAddItemsBo> list) {
|
||||
Set<String> uniqueKeys = new HashSet<>();
|
||||
for (MpsEmpAddItemsBo bo : list) {
|
||||
String key = bo.getCustAcctNo();
|
||||
if (uniqueKeys.contains(key)) {
|
||||
throw new ServiceException("重复的客户账号: " + key);
|
||||
}
|
||||
uniqueKeys.add(key);
|
||||
}
|
||||
} */
|
||||
|
||||
/**
|
||||
* 查询员工附加项
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 员工附加项
|
||||
*/
|
||||
@Override
|
||||
public MpsEmpAddItemsVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询员工附加项列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 员工附加项分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<MpsEmpAddItemsVo> queryPageList(MpsEmpAddItemsBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<MpsEmpAddItems> lqw = buildQueryWrapper(bo);
|
||||
Page<MpsEmpAddItemsVo> result = baseMapper.selectPageMpsEmpAddItemsList(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的员工附加项列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 员工附加项列表
|
||||
*/
|
||||
@Override
|
||||
public List<MpsEmpAddItemsVo> queryList(MpsEmpAddItemsBo bo) {
|
||||
LambdaQueryWrapper<MpsEmpAddItems> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<MpsEmpAddItems> buildQueryWrapper(MpsEmpAddItemsBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<MpsEmpAddItems> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByAsc(MpsEmpAddItems::getId);
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getBranchId()), MpsEmpAddItems::getBranchId, bo.getBranchId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getBranchName()), MpsEmpAddItems::getBranchName, bo.getBranchName());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getEmployeeName()), MpsEmpAddItems::getEmployeeName, bo.getEmployeeName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getMarketingCode()), MpsEmpAddItems::getMarketingCode, bo.getMarketingCode());
|
||||
lqw.eq(bo.getAddItem() != null, MpsEmpAddItems::getAddItem, bo.getAddItem());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getRecordMonth()), MpsEmpAddItems::getRecordMonth, bo.getRecordMonth());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增员工附加项
|
||||
*
|
||||
* @param bo 员工附加项
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(MpsEmpAddItemsBo bo) {
|
||||
String month = DateUtils.parseDateToStr(FormatsType.YYYY_MM,Date.from(Instant.ofEpochMilli(Long.parseLong(bo.getRecordMonth()))));
|
||||
bo.setRecordMonth(month);
|
||||
MpsEmpAddItems add = MapstructUtils.convert(bo, MpsEmpAddItems.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改员工附加项
|
||||
*
|
||||
* @param bo 员工附加项
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(MpsEmpAddItemsBo bo) {
|
||||
MpsEmpAddItems update = MapstructUtils.convert(bo, MpsEmpAddItems.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(MpsEmpAddItems entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除员工附加项信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.mps.mapper.MpsEmpAddItemsMapper">
|
||||
|
||||
<!--mysql写法,达梦兼容-->
|
||||
<insert id="batchInsert">
|
||||
INSERT INTO mps_emp_add_items
|
||||
(
|
||||
id,
|
||||
branch_id,
|
||||
branch_name,
|
||||
employee_name,
|
||||
marketing_code,
|
||||
add_item,
|
||||
record_month,
|
||||
tenant_id,
|
||||
create_dept,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time
|
||||
)
|
||||
VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(
|
||||
#{item.id},
|
||||
#{item.branchId},
|
||||
#{item.branchName},
|
||||
#{item.employeeName},
|
||||
#{item.marketingCode},
|
||||
#{item.addItem},
|
||||
#{item.recordMonth},
|
||||
#{item.tenantId},
|
||||
#{item.createDept},
|
||||
#{item.createBy},
|
||||
#{item.createTime},
|
||||
#{item.updateBy},
|
||||
#{item.updateTime}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user