调整导出, 新增推送金蝶

This commit is contained in:
andy 2025-07-12 11:57:47 +08:00
parent d61d08fcbc
commit 4e3a045a42
23 changed files with 2397 additions and 698 deletions

View File

@ -214,6 +214,15 @@
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
</dependency>
<!-- 金蝶 -->
<dependency>
<groupId>com.kingdee.bos</groupId>
<artifactId>k3cloud-webapi-sdk-java11</artifactId>
<version>v8.2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/k3cloud-webapi-sdk-java11-v8.2.0.jar</systemPath>
</dependency>
</dependencies>
<build>

View File

@ -5,9 +5,11 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;
import com.evo.common.utils.poi.handler.ExcelFieldHandlerAdapter;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import com.evo.common.utils.poi.ExcelHandlerAdapter;
import com.evo.common.utils.poi.handler.ExcelHandlerAdapter;
/**
* 自定义导出Excel数据注解
@ -148,6 +150,15 @@ public @interface Excel
*/
public Class<?> handler() default ExcelHandlerAdapter.class;
/**
* 自定义数据处理器
*/
public boolean customExcelField() default false;
/**
* 自定义数据处理器
*/
public Class<?> excelFieldHandler() default ExcelFieldHandlerAdapter.class;
/**
* 自定义数据处理器参数
*/

View File

@ -284,7 +284,7 @@ public class ParamUtils {
* @return
*/
public static List<Long> getFullPaidLeave(){
RzSysParam param= paramService.getRzSysParam("全薪发放的假期", "full_paid_leave","54,56,58,59,60","全薪发放的假期; 54-年休假,56-婚假,58-陪产假,59-丧假,60-工伤假");
RzSysParam param= paramService.getRzSysParam("全薪发放的假期", "full_paid_leave","54,56,57,58,59,60","全薪发放的假期; 54-年休假, 56-婚假,57-产假,58-陪产假,59-丧假,60-工伤假 (55-调休假 这是个特殊的假期, 加班会自动抵扣)");
return Collections.asList(param.getParamValue().split(",")).stream().filter(StringUtils::isNotEmpty).map(Long::valueOf).collect(Collectors.toList());
}

View File

@ -24,6 +24,8 @@ import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import com.evo.common.utils.poi.handler.ExcelHandlerAdapter;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.reflect.FieldUtils;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
package com.evo.common.utils.poi.handler;
import com.evo.common.annotation.Excel;
import java.lang.reflect.Field;
import java.util.List;
/**
* 特殊出具处理接口
*
* @ClassName:ExcelFieldHandlerAdapter
* @date: 2025年07月12日 10:40
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface ExcelFieldHandlerAdapter {
List<String> buildExcel();
}

View File

@ -1,4 +1,4 @@
package com.evo.common.utils.poi;
package com.evo.common.utils.poi.handler;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;

View File

@ -0,0 +1,30 @@
package com.evo.common.utils.poi.handler.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evo.common.constant.Constants;
import com.evo.common.utils.Collections;
import com.evo.common.utils.poi.handler.ExcelFieldHandlerAdapter;
import com.evo.common.utils.spring.SpringUtils;
import com.evo.personnelMatters.domain.RzSubsidyInfo;
import com.evo.personnelMatters.mapper.RzSubsidyInfoMapper;
import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;
/**
*
*
* @ClassName:SysStaffExcelFieldHandlerAdapter
* @date: 2025年07月12日 10:42
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public class SysStaffExcelFieldHandlerAdapter implements ExcelFieldHandlerAdapter {
@Override
public List<String> buildExcel() {
return SpringUtils.getBean(RzSubsidyInfoMapper.class).selectList(new LambdaQueryWrapper<RzSubsidyInfo>().eq(RzSubsidyInfo::getDelFlag, Constants.DELETE_FLAG_0)).stream().map(RzSubsidyInfo::getName).collect(Collectors.toList());
}
}

View File

@ -0,0 +1,109 @@
package com.evo.kingdeeUtils;
import com.alibaba.fastjson2.JSON;
import com.evo.common.utils.DateUtils;
import com.evo.common.utils.spring.SpringUtils;
import com.evo.kingdeeUtils.exception.KingdeeException;
import com.evo.kingdeeUtils.kenum.BaseEnum;
import com.evo.kingdeeUtils.kenum.KingdeeParamsEnum;
import com.evo.kingdeeUtils.mapper.LogKingDeeMapper;
import com.evo.kingdeeUtils.vo.LogKingDee;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*
* @ClassName:KingdeeRequestUtils
* @date: 2025年07月11日 9:33
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
public class KingdeeRequestUtils {
/***
* 员工保存接口
* @param params
* 参数说明对照关系: key-value
* FName-员工姓名
* FStaffNumber-员工编号
* FNumber-岗位编号
* FPostDept_FNumber_岗位所属部门编号
*/
public static void employeeSave(Map<String, String> params){
// request(params, KingdeeParamsEnum.Employee.SAVE);
}
/***
* 员工禁用接口
* @param params
* 参数说明对照关系: key-value
* Numbers-员工编码 (多个使用,分割, : 001,002,003)
*/
public static void employeeDisabled(Map<String, String> params){
// request(params, KingdeeParamsEnum.Employee.DISABLED);
}
/***
* 岗位调整
* @param params
* 参数说明对照关系: key-value
* NeedUpDateFields-更新字段 (多个使用,分割, :FDept_FNumber,FPosition_FNumber )
* FNumber-员工编号
* FDept_FNumber-部门编号
* FPosition_FNumber-岗位编号
*/
public static void updateJobInfo(Map<String, String> params){
// request(params, KingdeeParamsEnum.JobInfo.UPDATE);
}
private static void request(Map<String, String> params, BaseEnum paramEnum){
log.error("{}====> 接口调用, 参数为:{} ", paramEnum.getDes(), JSON.toJSONString(params));
List<String> keyList = params.entrySet().stream().map(Map.Entry<String, String>::getKey).collect(Collectors.toList());
Map<String,String> requiredParams = paramEnum.getRequiredParams();
for (String key : requiredParams.keySet()){
if(!keyList.contains(key)){
throw new KingdeeException(requiredParams.get(key));
}
}
String requestParam = paramEnum.getParamJson();
for (String key : params.keySet()){
requestParam = requestParam.replaceAll(key+ KingdeeParamsEnum.REQUEST_PARAM_SUFFIX, params.get(key));
}
//更新时间
requestParam = requestParam.replaceAll("date"+KingdeeParamsEnum.REQUEST_PARAM_SUFFIX, DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date()));
String resultJson = "";
try {
K3CloudApi client = new K3CloudApi();
resultJson = client.save(paramEnum.getFromId(), requestParam);
log.info("{}====>接口返回结果: {}", paramEnum.getDes(), resultJson);
} catch (Exception e) {
resultJson = e.getMessage();
log.error("{}====>请求错误: {}", paramEnum.getDes(), e.getMessage());
}finally {
//记录日志
instLog(paramEnum, params, requestParam, resultJson);
}
}
private static void instLog(BaseEnum paramEnum, Map<String, String> params, String requestInfo, String response){
LogKingDee logKingDee = new LogKingDee();
logKingDee.setRequestTime(new Date());
logKingDee.setType(paramEnum.getDes());
logKingDee.setRequestParams(JSON.toJSONString(params));
logKingDee.setRequestInfo(requestInfo);
logKingDee.setResponse(response);
SpringUtils.getBean(LogKingDeeMapper.class).insert(logKingDee);
}
}

View File

@ -0,0 +1,29 @@
package com.evo.kingdeeUtils.exception;
import lombok.extern.slf4j.Slf4j;
/**
*
*
* @ClassName:KingdeeException
* @date: 2025年07月11日 10:02
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
public class KingdeeException extends RuntimeException{
public KingdeeException(String message){
super(message);
log.error("推送金蝶出现错误---->>>>>>>{}", message);
}
public KingdeeException(String message, Throwable e)
{
super(message, e);
log.error("推送金蝶出现错误---->>>>>>>错误信息{}, 异常信息:{}", message, e.getMessage());
}
}

View File

@ -0,0 +1,24 @@
package com.evo.kingdeeUtils.kenum;
import java.util.Map;
/**
* 枚举
* @ClassName:BaseEnum
* @date: 2025年07月11日 10:26
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface BaseEnum {
abstract Map<String,String> getRequiredParams();
abstract String getParamJson();
abstract String getFromId();
abstract String getDes();
}

View File

@ -0,0 +1,97 @@
package com.evo.kingdeeUtils.kenum;
import com.evo.common.utils.Collections;
import java.util.Map;
/**
* 金蝶请求的参数类枚举
*
* @ClassName:KingdeeRequest
* @date: 2025年07月11日 8:59
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public enum KingdeeParamsEnum {
;
Enum paramEnum;
KingdeeParamsEnum() {
}
KingdeeParamsEnum(Enum paramEnum) {
this.paramEnum = paramEnum;
}
public static final String REQUEST_PARAM_SUFFIX="_param";
public enum JobInfo implements BaseEnum{
UPDATE("岗位信息修改", "BD_NEWSTAFF", Collections.asMap("FNumber","员工编号不能为空","FDept_FNumber","部门编号不能为空","FPosition_FNumber","岗位编号不能为空"),"{\"NeedUpDateFields\":[NeedUpDateFields"+REQUEST_PARAM_SUFFIX+"],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FSTAFFID\":0,\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\",\"FPerson\":{\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FDept\":{\"FNumber\":\"FDept_FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FPosition\":{\"FNumber\":\"FPosition_FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FEmpInfoId\":{\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FPOSTBILLEntity\":{\"FIsFirstPost\":false},\"FOtherEntity\":{},\"FSHRMapEntity\":{}}}"),
;
String des;
String fromId;
Map<String,String> requiredParams;
String paramJson;
JobInfo(String des, String fromId, Map<String,String> requiredParams, String paramJson) {
this.des = des;
this.fromId = fromId;
this.requiredParams = requiredParams;
this.paramJson = paramJson;
}
@Override
public Map<String, String> getRequiredParams() {
return this.requiredParams;
}
@Override
public String getParamJson() {
return this.paramJson;
}
@Override
public String getFromId() {
return this.fromId;
}
@Override
public String getDes() {
return this.des;
}
}
/***
* 金蝶请求参数, 员工
*/
public enum Employee implements BaseEnum {
SAVE("员工保存", "BD_Empinfo", Collections.asMap("FName","员工姓名不能为空","FStaffNumber","员工编号不能为空","FNumber","岗位编号不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FID\":0,\"FName\":\"FName"+REQUEST_PARAM_SUFFIX+"\",\"FStaffNumber\":\"FStaffNumber"+REQUEST_PARAM_SUFFIX+"\",\"FCreateSaler\":false,\"FCreateUser\":false,\"FCreateCashier\":false,\"FJoinDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FSHRMapEntity\":{},\"FPostEntity\":[{\"FPostDept\":{\"FNumber\":\"FPostDept_FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FPost\":{\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FStaffStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FIsFirstPost\":true,\"FStaffDetails\":0}]}}"),
DISABLED("员工禁用","BD_Empinfo", Collections.asMap("Numbers","员工编码不能为空"),"{\"Numbers\":[Numbers"+REQUEST_PARAM_SUFFIX+"],\"Ids\":\"\",\"PkEntryIds\":[],\"UseOrgId\":0,\"NetworkCtrl\":\"\",\"IgnoreInterationFlag\":\"\"}")
;
String des;
String fromId;
Map<String,String> requiredParams;
String paramJson;
Employee(String des, String fromId, Map<String,String> requiredParams, String paramJson) {
this.des = des;
this.fromId = fromId;
this.requiredParams = requiredParams;
this.paramJson = paramJson;
}
@Override
public Map<String, String> getRequiredParams() {
return this.requiredParams;
}
@Override
public String getParamJson() {
return this.paramJson;
}
@Override
public String getFromId() {
return this.fromId;
}
@Override
public String getDes() {
return this.des;
}
}
}

View File

@ -0,0 +1,16 @@
package com.evo.kingdeeUtils.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evo.kingdeeUtils.vo.LogKingDee;
/**
* 金蝶日志请求接口
*
* @ClassName:LogKingDeeMapper
* @date: 2025年07月11日 11:18
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface LogKingDeeMapper extends BaseMapper<LogKingDee> {
}

View File

@ -0,0 +1,38 @@
package com.evo.kingdeeUtils.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 请求日志类
*
* @ClassName:LogKingDee
* @date: 2025年07月11日 11:15
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Data
@TableName("sys_log_king_dee")
public class LogKingDee implements Serializable {
/** 主键 */
@TableId(type= IdType.AUTO)
private Long id;
private String type;
private String requestParams;
private String requestInfo;
private String response;
private Date requestTime;
}

View File

@ -6,10 +6,8 @@ import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.page.TableDataInfo;
import com.evo.common.enums.BusinessType;
import com.evo.common.utils.poi.ExcelUtil;
import com.evo.personnelMatters.domain.RzSubsidy;
import com.evo.personnelMatters.domain.RzSubsidyInfo;
import com.evo.personnelMatters.service.IRzSubsidyInfoService;
import com.evo.personnelMatters.service.IRzSubsidyService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

View File

@ -1,5 +1,7 @@
package com.evo.personnelMatters.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.evo.common.annotation.Excel;
import com.evo.common.core.domain.BaseEntity;
import lombok.Data;
@ -39,6 +41,7 @@ public class RzSubsidyInfo extends BaseEntity
private String remarks;
/** 删除标识 */
@TableField(fill = FieldFill.INSERT)
private String delFlag;
@Override

View File

@ -52,9 +52,9 @@ public class SysStaffController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, SysStaff sysStaff)
{
List<SysStaff> list = sysStaffService.selectSysStaffList(sysStaff);
ExcelUtil<SysStaff> util = new ExcelUtil<SysStaff>(SysStaff.class);
util.exportExcel(response, list, "员工管理数据");
sysStaffService.exportInfo(response, sysStaff);
// ExcelUtil<SysStaff> util = new ExcelUtil<SysStaff>(SysStaff.class);
// util.exportExcel(response, list, "员工管理数据");
}
/**
* 导出员工详情
@ -63,9 +63,11 @@ public class SysStaffController extends BaseController
@PostMapping("/exportDetail")
public void exportDetail(HttpServletResponse response, SysStaff sysStaff)
{
List<SysStaffVo> list = sysStaffService.selectSysStaffDetailList(sysStaff);
ExcelUtil<SysStaffVo> util = new ExcelUtil<SysStaffVo>(SysStaffVo.class);
util.exportExcel(response, list, "员工详情数据");
sysStaffService.exportInfo(response, sysStaff);
// List<SysStaffVo> list = sysStaffService.selectSysStaffDetailList(sysStaff);
// ExcelUtil<SysStaffVo> util = new ExcelUtil<SysStaffVo>(SysStaffVo.class);
// util.exportExcel(response, list, "员工详情数据");
}
/**
* 获取员工管理详细信息

View File

@ -47,6 +47,8 @@ public class SysStaff extends BaseEntity
@TableField(exist = false)
private String deptName;
private String jobCode;
/** 身份证号 */
@Excel(name = "身份证号")
private String idCard;

View File

@ -1,769 +1,125 @@
package com.evo.system.domain.vo;
import com.evo.common.annotation.Excel;
import com.evo.common.utils.poi.handler.impl.SysStaffExcelFieldHandlerAdapter;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
@Data
public class SysStaffVo {
/** 姓名 */
@Excel(name = "* 姓名")
private String name;
@Excel(name = "* 公司", dictType = "sys_company")
private String companyName;
@Excel(name = "* 部门")
private String deptName;
/** 编号 */
@Excel(name = "编号")
private String code;
/** 身份证号 */
@Excel(name = "* 身份证号")
private String idCard;
/** 性别 */
@Excel(name = "性别")
@Excel(name = "性别", dictType = "sys_user_sex")
private String sex;
/** 年龄 */
@Excel(name = "年龄")
private Long age;
/** 电话 */
@Excel(name = "电话")
private String phone;
/** 住址 */
@Excel(name = "住址")
private String address;
/** 学历 */
@Excel(name = "* 学历")
@Excel(name = "* 学历", dictType = "sys_level")
private String level;
/** 专业 */
@Excel(name = "专业")
private String major;
/** 毕业学校 */
@Excel(name = "毕业学校")
private String school;
/** 银行卡号 */
@Excel(name = "银行卡号")
private String bankNumber;
/** 开户行 */
@Excel(name = "专业")
private String major;
@Excel(name = "开户行")
private String bank;
/** 入职时间 */
@Excel(name = "银行卡号")
private String bankNumber;
@Excel(name = "在职状态", dictType = "sys_worker_status")
private String status;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = " * 入职时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date employmentDate;
/** 全额工资时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "全额工资时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date wagesRatioDate;
/** 履历 */
@Excel(name = "履历")
private String experience;
/** 试用期限 */
@Excel(name = "试用期限")
private Long workerTerm;
/** 转正日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "转正日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date regularDate;
/** 离职时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "离职时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date quitDate;
/** 合同-起 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "合同-起", width = 30, dateFormat = "yyyy-MM-dd")
private Date contractStart;
/** 合同-止 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "合同-止", width = 30, dateFormat = "yyyy-MM-dd")
private Date contractEnd;
/** 合同类型 */
@Excel(name = "* 合同期限")
private String contractType;
@Excel(name = "* 是否新农合")
private String socialSubsidy;
/** 社保 */
@Excel(name = "* 社保")
private String socialType;
/** 工龄 */
@Excel(name = "工龄")
private Long seniority;
/** 是否有加班费 */
@Excel(name = "* 加班费")
private String isOvertimePay;
/** 住宿标识 */
@Excel(name = "* 住宿")
@Excel(name = "* 是否住宿")
private String zsFlag;
/** 保密合同 */
@Excel(name = "保密合同")
private String secrecy;
/** 工伤 */
@Excel(name = "工伤")
@Excel(name = "工伤险")
private String injury;
/** 雇主险 */
@Excel(name = "雇主险")
private String insurance;
/** 介绍人 */
@Excel(name = "介绍人")
private String introducer;
/** 是否打卡 */
@Excel(name = "* 打卡")
@Excel(name = "* 是否打卡")
private String clockIn;
/** 在职状态 */
@Excel(name = "在职状态")
private String status;
@Excel(name = "* 公司")
private String companyName;
@Excel(name = "基本工资")
private BigDecimal basicSalary;
/** 岗位工资 */
@Excel(name = "岗位工资")
private BigDecimal jobsSalary;
/** 日薪 */
@Excel(name = "日薪")
private BigDecimal dailyWage;
/** 时薪 */
@Excel(name = "时薪")
private BigDecimal hoursSalary;
/** 全勤奖 */
@Excel(name = "全勤奖")
private BigDecimal fullFrequentlySubsidies;
/** 学历补助 */
@Excel(name = "学历补助")
private BigDecimal levelOfEducationSubsidies;
/** 合同补助 */
@Excel(name = "合同补助")
private BigDecimal contractSubsidies;
/** 工龄补助 */
@Excel(name = "工龄补助")
private BigDecimal senioritySubsidies;
/** 社保补助 */
@Excel(name = "社保补助")
private BigDecimal socialSecuritySubsidies;
@Excel(name = "中班补助")
private BigDecimal middleSubsidies;
/** 夜班补助 */
@Excel(name = "夜班补助")
private BigDecimal nightShiftSubsidies;
/** 夜餐补助 */
@Excel(name = "夜餐补助")
private BigDecimal dinnerSubsidies;
/** 固定补助 */
@Excel(name = "享有补助", customExcelField = true, excelFieldHandler= SysStaffExcelFieldHandlerAdapter.class, defaultValue = "0")
private Map<String, Object> subsidyMap;
@Excel(name = "固定补助")
private BigDecimal fixedAllowance;
/** 其他补助 */
@Excel(name = "其他补助")
private BigDecimal otherSubsidies;
/** 早餐消费 */
@Excel(name = "早餐消费")
private BigDecimal breakfastExpend;
/** 午餐消费 */
@Excel(name = "午餐消费")
private BigDecimal lunchExpend;
/** 晚餐消费 */
@Excel(name = "晚餐消费")
private BigDecimal supperExpend;
/** 离职扣款 */
@Excel(name = "离职扣款")
private BigDecimal subsidyDeductMoney;
/** 其他扣款 */
@Excel(name = "其他扣款")
private BigDecimal deductions;
/** 养老保险 */
@Excel(name = "养老保险")
private BigDecimal endowmentInsurance;
/** 医疗保险 */
@Excel(name = "医疗保险")
private BigDecimal medicalInsurance;
/** 工伤保险 */
@Excel(name = "工伤保险")
private BigDecimal employmentInjuryInsurance;
/** 生育保险 */
@Excel(name = "生育保险")
private BigDecimal maternityInsurance;
/** 失业保险 */
@Excel(name = "失业保险")
private BigDecimal unemploymentInsurance;
/** 公积金 */
@Excel(name = "公积金")
private BigDecimal accumulationFund;
/** 子女教育 */
@Excel(name = "子女教育")
private BigDecimal childrenEducation;
/** 赡养老人 */
@Excel(name = "赡养老人")
private BigDecimal supportTheOld;
/** 住房贷款 */
@Excel(name = "住房贷款")
private BigDecimal housingLoans;
/** 住房租金 */
@Excel(name = "住房租金")
private BigDecimal housingRents;
/** 继续教育 */
@Excel(name = "继续教育")
private BigDecimal adultEducation;
/** 大病医疗 */
@Excel(name = "大病医疗")
private BigDecimal treatmentForSeriousDisease;
/** 本年累计专项附加扣除 */
@Excel(name = "本年累计专项附加扣除")
private BigDecimal specialDeduction;
/** 本年累计已发工资 */
@Excel(name = "本年累计已发工资")
private BigDecimal totalWages;
/** 本年累计已缴个税 */
@Excel(name = "本年累计已缴个税")
private BigDecimal aggregatePersonalIncomeTax;
/** 备注 */
@Excel(name = "备注")
private String remarks;
public String getSocialSubsidy() {
return socialSubsidy;
}
public void setSocialSubsidy(String socialSubsidy) {
this.socialSubsidy = socialSubsidy;
}
public BigDecimal getMiddleSubsidies() {
return middleSubsidies;
}
public void setMiddleSubsidies(BigDecimal middleSubsidies) {
this.middleSubsidies = middleSubsidies;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Long getAge() {
return age;
}
public void setAge(Long age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getBankNumber() {
return bankNumber;
}
public void setBankNumber(String bankNumber) {
this.bankNumber = bankNumber;
}
public String getBank() {
return bank;
}
public void setBank(String bank) {
this.bank = bank;
}
public Date getEmploymentDate() {
return employmentDate;
}
public void setEmploymentDate(Date employmentDate) {
this.employmentDate = employmentDate;
}
public Date getWagesRatioDate() {
return wagesRatioDate;
}
public void setWagesRatioDate(Date wagesRatioDate) {
this.wagesRatioDate = wagesRatioDate;
}
public String getExperience() {
return experience;
}
public void setExperience(String experience) {
this.experience = experience;
}
public Long getWorkerTerm() {
return workerTerm;
}
public void setWorkerTerm(Long workerTerm) {
this.workerTerm = workerTerm;
}
public Date getRegularDate() {
return regularDate;
}
public void setRegularDate(Date regularDate) {
this.regularDate = regularDate;
}
public Date getQuitDate() {
return quitDate;
}
public void setQuitDate(Date quitDate) {
this.quitDate = quitDate;
}
public Date getContractStart() {
return contractStart;
}
public void setContractStart(Date contractStart) {
this.contractStart = contractStart;
}
public Date getContractEnd() {
return contractEnd;
}
public void setContractEnd(Date contractEnd) {
this.contractEnd = contractEnd;
}
public String getContractType() {
return contractType;
}
public void setContractType(String contractType) {
this.contractType = contractType;
}
public String getSocialType() {
return socialType;
}
public void setSocialType(String socialType) {
this.socialType = socialType;
}
public Long getSeniority() {
return seniority;
}
public void setSeniority(Long seniority) {
this.seniority = seniority;
}
public String getIsOvertimePay() {
return isOvertimePay;
}
public void setIsOvertimePay(String isOvertimePay) {
this.isOvertimePay = isOvertimePay;
}
public String getZsFlag() {
return zsFlag;
}
public void setZsFlag(String zsFlag) {
this.zsFlag = zsFlag;
}
public String getSecrecy() {
return secrecy;
}
public void setSecrecy(String secrecy) {
this.secrecy = secrecy;
}
public String getInjury() {
return injury;
}
public void setInjury(String injury) {
this.injury = injury;
}
public String getInsurance() {
return insurance;
}
public void setInsurance(String insurance) {
this.insurance = insurance;
}
public String getIntroducer() {
return introducer;
}
public void setIntroducer(String introducer) {
this.introducer = introducer;
}
public String getClockIn() {
return clockIn;
}
public void setClockIn(String clockIn) {
this.clockIn = clockIn;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public BigDecimal getBasicSalary() {
return basicSalary;
}
public void setBasicSalary(BigDecimal basicSalary) {
this.basicSalary = basicSalary;
}
public BigDecimal getJobsSalary() {
return jobsSalary;
}
public void setJobsSalary(BigDecimal jobsSalary) {
this.jobsSalary = jobsSalary;
}
public BigDecimal getDailyWage() {
return dailyWage;
}
public void setDailyWage(BigDecimal dailyWage) {
this.dailyWage = dailyWage;
}
public BigDecimal getHoursSalary() {
return hoursSalary;
}
public void setHoursSalary(BigDecimal hoursSalary) {
this.hoursSalary = hoursSalary;
}
public BigDecimal getFullFrequentlySubsidies() {
return fullFrequentlySubsidies;
}
public void setFullFrequentlySubsidies(BigDecimal fullFrequentlySubsidies) {
this.fullFrequentlySubsidies = fullFrequentlySubsidies;
}
public BigDecimal getLevelOfEducationSubsidies() {
return levelOfEducationSubsidies;
}
public void setLevelOfEducationSubsidies(BigDecimal levelOfEducationSubsidies) {
this.levelOfEducationSubsidies = levelOfEducationSubsidies;
}
public BigDecimal getContractSubsidies() {
return contractSubsidies;
}
public void setContractSubsidies(BigDecimal contractSubsidies) {
this.contractSubsidies = contractSubsidies;
}
public BigDecimal getSenioritySubsidies() {
return senioritySubsidies;
}
public void setSenioritySubsidies(BigDecimal senioritySubsidies) {
this.senioritySubsidies = senioritySubsidies;
}
public BigDecimal getSocialSecuritySubsidies() {
return socialSecuritySubsidies;
}
public void setSocialSecuritySubsidies(BigDecimal socialSecuritySubsidies) {
this.socialSecuritySubsidies = socialSecuritySubsidies;
}
public BigDecimal getNightShiftSubsidies() {
return nightShiftSubsidies;
}
public void setNightShiftSubsidies(BigDecimal nightShiftSubsidies) {
this.nightShiftSubsidies = nightShiftSubsidies;
}
public BigDecimal getDinnerSubsidies() {
return dinnerSubsidies;
}
public void setDinnerSubsidies(BigDecimal dinnerSubsidies) {
this.dinnerSubsidies = dinnerSubsidies;
}
public BigDecimal getFixedAllowance() {
return fixedAllowance;
}
public void setFixedAllowance(BigDecimal fixedAllowance) {
this.fixedAllowance = fixedAllowance;
}
public BigDecimal getOtherSubsidies() {
return otherSubsidies;
}
public void setOtherSubsidies(BigDecimal otherSubsidies) {
this.otherSubsidies = otherSubsidies;
}
public BigDecimal getBreakfastExpend() {
return breakfastExpend;
}
public void setBreakfastExpend(BigDecimal breakfastExpend) {
this.breakfastExpend = breakfastExpend;
}
public BigDecimal getLunchExpend() {
return lunchExpend;
}
public void setLunchExpend(BigDecimal lunchExpend) {
this.lunchExpend = lunchExpend;
}
public BigDecimal getSupperExpend() {
return supperExpend;
}
public void setSupperExpend(BigDecimal supperExpend) {
this.supperExpend = supperExpend;
}
public BigDecimal getSubsidyDeductMoney() {
return subsidyDeductMoney;
}
public void setSubsidyDeductMoney(BigDecimal subsidyDeductMoney) {
this.subsidyDeductMoney = subsidyDeductMoney;
}
public BigDecimal getDeductions() {
return deductions;
}
public void setDeductions(BigDecimal deductions) {
this.deductions = deductions;
}
public BigDecimal getEndowmentInsurance() {
return endowmentInsurance;
}
public void setEndowmentInsurance(BigDecimal endowmentInsurance) {
this.endowmentInsurance = endowmentInsurance;
}
public BigDecimal getMedicalInsurance() {
return medicalInsurance;
}
public void setMedicalInsurance(BigDecimal medicalInsurance) {
this.medicalInsurance = medicalInsurance;
}
public BigDecimal getEmploymentInjuryInsurance() {
return employmentInjuryInsurance;
}
public void setEmploymentInjuryInsurance(BigDecimal employmentInjuryInsurance) {
this.employmentInjuryInsurance = employmentInjuryInsurance;
}
public BigDecimal getMaternityInsurance() {
return maternityInsurance;
}
public void setMaternityInsurance(BigDecimal maternityInsurance) {
this.maternityInsurance = maternityInsurance;
}
public BigDecimal getUnemploymentInsurance() {
return unemploymentInsurance;
}
public void setUnemploymentInsurance(BigDecimal unemploymentInsurance) {
this.unemploymentInsurance = unemploymentInsurance;
}
public BigDecimal getAccumulationFund() {
return accumulationFund;
}
public void setAccumulationFund(BigDecimal accumulationFund) {
this.accumulationFund = accumulationFund;
}
public BigDecimal getChildrenEducation() {
return childrenEducation;
}
public void setChildrenEducation(BigDecimal childrenEducation) {
this.childrenEducation = childrenEducation;
}
public BigDecimal getSupportTheOld() {
return supportTheOld;
}
public void setSupportTheOld(BigDecimal supportTheOld) {
this.supportTheOld = supportTheOld;
}
public BigDecimal getHousingLoans() {
return housingLoans;
}
public void setHousingLoans(BigDecimal housingLoans) {
this.housingLoans = housingLoans;
}
public BigDecimal getHousingRents() {
return housingRents;
}
public void setHousingRents(BigDecimal housingRents) {
this.housingRents = housingRents;
}
public BigDecimal getAdultEducation() {
return adultEducation;
}
public void setAdultEducation(BigDecimal adultEducation) {
this.adultEducation = adultEducation;
}
public BigDecimal getTreatmentForSeriousDisease() {
return treatmentForSeriousDisease;
}
public void setTreatmentForSeriousDisease(BigDecimal treatmentForSeriousDisease) {
this.treatmentForSeriousDisease = treatmentForSeriousDisease;
}
public BigDecimal getSpecialDeduction() {
return specialDeduction;
}
public void setSpecialDeduction(BigDecimal specialDeduction) {
this.specialDeduction = specialDeduction;
}
public BigDecimal getTotalWages() {
return totalWages;
}
public void setTotalWages(BigDecimal totalWages) {
this.totalWages = totalWages;
}
public BigDecimal getAggregatePersonalIncomeTax() {
return aggregatePersonalIncomeTax;
}
public void setAggregatePersonalIncomeTax(BigDecimal aggregatePersonalIncomeTax) {
this.aggregatePersonalIncomeTax = aggregatePersonalIncomeTax;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
}

View File

@ -7,6 +7,7 @@ import com.evo.system.domain.SysStaff;
import com.evo.system.domain.vo.SysStaffVo;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -100,4 +101,11 @@ public interface ISysStaffService extends IService<SysStaff>
SysStaff selectByDepId(Long deptId);
AjaxResult importSalesCommissions(List<RzSalaryVo> attendanceList);
/***
* 数据导出
* @param response
* @param sysStaff
*/
void exportInfo(HttpServletResponse response, SysStaff sysStaff);
}

View File

@ -11,8 +11,14 @@ import com.evo.common.core.domain.entity.RzUpload;
import com.evo.common.core.domain.entity.SysDept;
import com.evo.common.core.domain.entity.SysDictData;
import com.evo.common.utils.*;
import com.evo.common.utils.Collections;
import com.evo.common.utils.bean.BeanUtils;
import com.evo.common.utils.poi.ExcelUtil;
import com.evo.common.utils.poi.ExcelUtil1;
import com.evo.equipment.service.IEqSnDetailService;
import com.evo.kingdeeUtils.KingdeeRequestUtils;
import com.evo.personnelMatters.domain.RzSubsidyInfo;
import com.evo.personnelMatters.mapper.RzSubsidyInfoMapper;
import com.evo.restaurant.service.IRzRestaurantStatisticsService;
import com.evo.system.domain.SysStaff;
import com.evo.system.domain.SysStaffDetail;
@ -23,6 +29,7 @@ import com.evo.system.mapper.SysStaffDetailMapper;
import com.evo.system.mapper.SysStaffMapper;
import com.evo.system.service.ISysStaffService;
import com.evo.system.service.RzUploadService;
import com.evo.system.utils.SubsidyCalculationUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
@ -35,14 +42,11 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -69,6 +73,8 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
private RzUploadService rzUploadService;//文件上传
@Resource
private IEqSnDetailService eqSnDetailService;//设备信息
@Resource
private RzSubsidyInfoMapper rzSubsidyInfoMapper;
/**
* 查询员工管理
*
@ -152,6 +158,9 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
rzRestaurantStatisticsService.createRestaurantStatistics(sysStaff, DateUtils.getNowDate());
//处理考勤机相关信息
initCheckDevice(sysStaff);
//新增员工信息到金蝶
KingdeeRequestUtils.employeeSave(Collections.asMap("FName", sysStaff.getName(), "FStaffNumber", sysStaff.getCode(), "FNumber", sysStaff.getJobCode().split("_")[0]));
return AjaxResult.success();
}
@ -223,6 +232,8 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
if(i < 1){
return AjaxResult.error();
}
//如果是离职, 推送金蝶禁用
KingdeeRequestUtils.employeeDisabled(Collections.asMap("Numbers",sysStaff.getJobCode().split("_")[0]));
return AjaxResult.success();
}
}
@ -237,6 +248,10 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
}
//根据员工ID查询原来的数据信息
SysStaff old_staff = getBaseMapper().selectSysStaffByUserId(sysStaff.getUserId());
//检查是否修改岗位
if(!old_staff.getJobCode().equals(sysStaff.getJobCode())) {
KingdeeRequestUtils.updateJobInfo(Collections.asMap("NeedUpDateFields","\"FDept\",\"FPosition\"", "FNumber", sysStaff.getCode(), "FDept_FNumber", sysStaff.getJobCode().split("_")[1], "FPosition_FNumber", sysStaff.getJobCode().split("_")[0]));
}
//判断员工更换公司
if(!old_staff.getCompanyName().equals(sysStaff.getCompanyName())) {
SysStaffDetail sysStaffDetail = sysStaffDetailMapper.selectSysStaffDetailByStaffId(sysStaff.getUserId());
@ -480,8 +495,8 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
for (SysStaffVo Staffvo : staffList){
//判断必填项是否为空为空执行下一条数据: 身份证号姓名部门是否有加班费入职日期学历打卡,合同社保
if(StringUtils.isEmpty(Staffvo.getIdCard()) || StringUtils.isEmpty(Staffvo.getName()) || StringUtils.isEmpty(Staffvo.getDeptName())
|| StringUtils.isEmpty(Staffvo.getIsOvertimePay()) || Staffvo.getEmploymentDate() == null || StringUtils.isEmpty(Staffvo.getLevel())
|| StringUtils.isEmpty(Staffvo.getClockIn()) || StringUtils.isEmpty(Staffvo.getContractType()) || StringUtils.isEmpty(Staffvo.getSocialType())
|| Staffvo.getEmploymentDate() == null || StringUtils.isEmpty(Staffvo.getLevel())
|| StringUtils.isEmpty(Staffvo.getClockIn()) || StringUtils.isEmpty(Staffvo.getSocialType())
|| StringUtils.isEmpty(Staffvo.getSocialSubsidy())){
continue;
}
@ -526,12 +541,12 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
}
}
//合同年限
for (SysDictData sysDictData : ht_list) {
if(sysDictData.getDictLabel().equals(Staffvo.getContractType())){
sysStaff.setContractType(sysDictData.getDictValue());
break;
}
}
// for (SysDictData sysDictData : ht_list) {
// if(sysDictData.getDictLabel().equals(Staffvo.getContractType())){
// sysStaff.setContractType(sysDictData.getDictValue());
// break;
// }
// }
//计算性别和年龄
if(StringUtils.isNotEmpty(sysStaff.getIdCard())){
//根据身份证解析性别和年龄
@ -707,5 +722,45 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
return AjaxResult.success();
}
@Override
public void exportInfo(HttpServletResponse response, SysStaff sysStaff) {
List<SysStaffVo> res_list = new ArrayList<SysStaffVo>();
//查询员工信息
List<SysStaff> yg_list = getBaseMapper().selectSysStaffList(sysStaff);
List<Long> userIds = yg_list.stream().map(SysStaff::getUserId).collect(Collectors.toList());
Map<Long, SysStaffDetail> detailMap = sysStaffDetailMapper.selectList(new LambdaQueryWrapper<SysStaffDetail>().eq(SysStaffDetail::getDelFlag, Constants.DELETE_FLAG_0).in(SysStaffDetail::getStaffId,userIds)).stream().collect(Collectors.toMap(SysStaffDetail::getStaffId, v->v));
List<RzSubsidyInfo> subsidyList = rzSubsidyInfoMapper.selectList(new LambdaQueryWrapper<RzSubsidyInfo>());
Map<Long, String> subsidyMap = rzSubsidyInfoMapper.selectList(new LambdaQueryWrapper<RzSubsidyInfo>()).stream().collect(Collectors.toMap(RzSubsidyInfo::getId, RzSubsidyInfo::getName));
for (SysStaff staff : yg_list) {
SysStaffVo sysStaffVo = new SysStaffVo();
BeanUtils.copyProperties(staff,sysStaffVo);
//根据员工信息查询详情信息
SysStaffDetail sysStaffDetail = SubsidyCalculationUtils.subsidyCalculation(staff,detailMap.get(staff.getUserId()), subsidyList);
BeanUtils.copyProperties(sysStaffDetail,sysStaffVo);
// StringBuilder subsidyInfo = new StringBuilder("");
// for (String key : sysStaffDetail.getExtendeds().keySet()){
// subsidyInfo.append(key).append("-").append(sysStaffDetail.getExtendeds().get(key)).append("元,");
// }
// sysStaffVo.setSubsidyInfo(subsidyInfo.toString());
sysStaffVo.setSubsidyMap(sysStaffDetail.getExtendeds());
res_list.add(sysStaffVo);
}
ExcelUtil1<SysStaffVo> util = new ExcelUtil1<SysStaffVo>(SysStaffVo.class);
util.exportExcel(response, res_list, "员工信息");
}
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\andy\\文档\\考勤\\岗位任职部门信息.txt")));
String line = reader.readLine();
while (line != null) {
String[] configData = line.split("_");
System.out.println("update sys_dict_data set dict_value='"+line+"' where dict_value='"+configData[0]+"';\n");
line = reader.readLine();
}
}
}

View File

@ -52,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectSysStaffVo">
select user_id,company_name, dept_id, code, name, id_card,is_leader, sex, age, phone, address, level, major, school, bank_number,social_subsidy, bank, employment_date, experience, worker_term, regular_date, quit_date, contract_start, contract_end, contract_type, social_type, seniority, is_overtime_pay, zs_flag, secrecy, injury, insurance, introducer, clock_in, status, wages_ratio_date, remarks, del_flag, create_by, create_time, update_by, update_time, image_url,time_clock,subsidys from sys_staff
select user_id,company_name, dept_id, code, name, id_card,is_leader, sex, age, phone, address, level, major, school, bank_number,social_subsidy, bank, employment_date, experience, worker_term, regular_date, quit_date, contract_start, contract_end, contract_type, social_type, seniority, is_overtime_pay, zs_flag, secrecy, injury, insurance, introducer, clock_in, status, wages_ratio_date, remarks, del_flag, create_by, create_time, update_by, update_time, image_url,time_clock,subsidys, job_code from sys_staff
</sql>
<select id="selectSysStaffList" parameterType="com.evo.system.domain.SysStaff" resultMap="SysStaffResult">
@ -131,7 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="imageUrl != null">image_url,</if>
<if test="timeClock != null">time_clock,</if>
<if test="subsidys != null">subsidys,</if>
<if test="jobCode != null">job_code,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="companyName != null">#{companyName},</if>
@ -178,6 +178,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="imageUrl != null">#{imageUrl},</if>
<if test="timeClock != null">#{timeClock},</if>
<if test="subsidys != null">#{subsidys},</if>
<if test="jobCode != null">#{jobCode},</if>
</trim>
</insert>