员工计价有效无效明细 ++

This commit is contained in:
zhuangdashia 2025-08-27 21:40:03 +08:00
parent c3c13687a6
commit 260492fa0a
10 changed files with 907 additions and 0 deletions

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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();
}
};
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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>