yuansh před 1 dnem
rodič
revize
7a233e89c6
19 změnil soubory, kde provedl 416 přidání a 96 odebrání
  1. 1 1
      jeecg-boot/jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActBusinessController.java
  2. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/dataSource/OtherSource.java
  3. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/IncidentTicketController.java
  4. 13 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/IncidentTicket.java
  5. 106 67
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/IncidentTicketChildren.java
  6. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/IncidentTicketPage.java
  7. 218 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryAttendanceController.java
  8. 5 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryManagementController.java
  9. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementDetailMapper.java
  10. 2 2
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementExtraMapper.java
  11. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementHolidayMapper.java
  12. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementWorkOvertimeMapper.java
  13. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementDetailMapper.xml
  14. 2 2
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementExtraMapper.xml
  15. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementHolidayMapper.xml
  16. 1 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementWorkOvertimeMapper.xml
  17. 15 12
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/service/impl/SalaryManagementServiceImpl.java
  18. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  19. 9 4
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUser.java

+ 1 - 1
jeecg-boot/jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActBusinessController.java

@@ -1165,7 +1165,7 @@ public class ActBusinessController {
 //            URL="jdbc:sqlserver://192.168.5.170:14330;DatabaseName=srm_prod";
 //        }
 
-        String URL="jdbc:sqlserver://192.168.1.16:1433;DatabaseName=srm_prod";
+        String URL="jdbc:sqlserver://192.168.1.16:1433;DatabaseName=srm_zs";
 
         String USER="sa";
         String PASSWORD="Windows2008R2";

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/config/dataSource/OtherSource.java

@@ -26,7 +26,7 @@ public class OtherSource {
         }
 
 //        String URL="jdbc:sqlserver://192.168.5.170;DatabaseName=UFDATA_101_2021";
-        String URL="jdbc:sqlserver://192.168.1.253:1433;DatabaseName=UFDATA_101_2021";
+        String URL="jdbc:sqlserver://192.168.1.253;DatabaseName=UFDATA_101_2021";
         if(!active.equals("senyu")){
             URL="jdbc:sqlserver://192.168.1.16:1433;DatabaseName=UFDATA_101_2021";
         }

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/IncidentTicketController.java

@@ -160,12 +160,17 @@ public class IncidentTicketController {
 								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
 								   HttpServletRequest req) {
 
+		String accidentDataBegin = incidentTicket.getAccidentDataBegin();//开始日期
+		String accidentDataEnd = incidentTicket.getAccidentDataEnd();//结束日期
+
 		String state = incidentTicket.getState();//单据状态
 		String informant = incidentTicket.getInformant();//填报人
 		String processor = incidentTicket.getProcessor();//处理人
 		String responsibilityPerson1 = incidentTicket.getResponsibilityPerson1();//责任人
 
 		String handle = incidentTicket.getHandle();
+		incidentTicket.setAccidentDataEnd(null);
+		incidentTicket.setAccidentDataBegin(null);
 		incidentTicket.setProcessor(null);
 		incidentTicket.setState(null);
 		incidentTicket.setInformant(null);
@@ -183,6 +188,9 @@ public class IncidentTicketController {
         }
 //		queryWrapper.last("and id in(select table_id from act_z_business where table_name='incident_ticket' and result = 2) " +
 //				"order by accident_number desc ");
+		if(StringUtils.isNotBlank(accidentDataBegin) || StringUtils.isNotBlank(accidentDataEnd)){
+			queryWrapper.between("accident_data",accidentDataBegin,accidentDataEnd);
+		}
 		if(StringUtils.isNotBlank(state)){
 			queryWrapper.in("state",state.split(","));
 		}
@@ -671,6 +679,8 @@ public class IncidentTicketController {
 		String informant = incidentTicket.getInformant();//填报人
 		String processor = incidentTicket.getProcessor();//处理人
 		String responsibilityPerson1 = incidentTicket.getResponsibilityPerson1();//责任人
+		String accidentDataBegin = incidentTicket.getAccidentDataEnd();
+		String accidentDataEnd = incidentTicket.getAccidentDataBegin();
 
 		String handle = incidentTicket.getHandle();
 		incidentTicket.setProcessor(null);
@@ -679,9 +689,15 @@ public class IncidentTicketController {
 		incidentTicket.setHandle(null);
 		incidentTicket.setResponsibilityPerson1(null);
 
+		incidentTicket.setAccidentDataEnd(null);
+		incidentTicket.setAccidentDataBegin(null);
+
 		QueryWrapper<IncidentTicket> queryWrapper = QueryGenerator.initQueryWrapper(incidentTicket, request.getParameterMap());
 		queryWrapper.eq("1","1");
 
+		if(StringUtils.isNotBlank(accidentDataBegin) || StringUtils.isNotBlank(accidentDataEnd)){
+			queryWrapper.between("accident_data",accidentDataBegin,accidentDataEnd);
+		}
 //		queryWrapper.last("and id in(select table_id from act_z_business where table_name='incident_ticket' and result = 2) " +
 //				"order by accident_number desc ");
         if(StringUtils.isNotBlank(responsibilityPerson1)){

+ 13 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/IncidentTicket.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.oa.entity;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -64,6 +65,14 @@ public class IncidentTicket implements Serializable {
 	@Excel(name = "日期", width = 15)
     @ApiModelProperty(value = "日期")
     private String accidentData;
+	/**日期*/
+    @ApiModelProperty(value = "开始日期")
+	@TableField(exist = false)
+    private String accidentDataBegin;
+	/**日期*/
+    @ApiModelProperty(value = "结束日期")
+	@TableField(exist = false)
+    private String accidentDataEnd;
 	/**质量事故单主题*/
 	@Excel(name = "质量事故单主题", width = 15)
     @ApiModelProperty(value = "质量事故单主题")
@@ -231,6 +240,10 @@ public class IncidentTicket implements Serializable {
     //部门
 	@Excel(name = "部门", width = 15)
     private String department;
+	//扣款状态
+    private String deductionStatus;
+    //扣款金额
+    private BigDecimal deductionAmount;
 
 	/**
 	 * 订单备注

+ 106 - 67
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/IncidentTicketChildren.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.oa.entity;
 
 import java.io.Serializable;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -8,94 +9,132 @@ import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
+
 import java.util.Date;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
  * @Description: 森_工厂质量事故单-子表
  * @Author: jeecg-boot
- * @Date:   2023-02-22
+ * @Date: 2023-02-22
  * @Version: V1.0
  */
-@ApiModel(value="incident_ticket对象", description="森_工厂质量事故单-主表")
+@ApiModel(value = "incident_ticket对象", description = "森_工厂质量事故单-主表")
 @Data
 @TableName("incident_ticket_children")
 public class IncidentTicketChildren implements Serializable {
     private static final long serialVersionUID = 1L;
 
-	/**主键*/
-	@TableId(type = IdType.ID_WORKER_STR)
-	@ApiModelProperty(value = "主键")
-	private String id;
-	/**创建人*/
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private String id;
+    /**
+     * 创建人
+     */
 //	@Excel(name = "创建人", width = 15)
-	@ApiModelProperty(value = "创建人")
-	private String createBy;
-	/**创建日期*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
 //	@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	@ApiModelProperty(value = "创建日期")
-	private Date createTime;
-	/**更新人*/
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
 //	@Excel(name = "更新人", width = 15)
-	@ApiModelProperty(value = "更新人")
-	private String updateBy;
-	/**更新日期*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
 //	@Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	@ApiModelProperty(value = "更新日期")
-	private Date updateTime;
-	/**所属部门*/
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**
+     * 所属部门
+     */
 //	@Excel(name = "所属部门", width = 15)
-	@ApiModelProperty(value = "所属部门")
-	private String sysOrgCode;
-	/**计划单号*/
-	@Excel(name = "计划单号", width = 15)
-	@ApiModelProperty(value = "计划单号")
-	private String planNumber;
-	/**事故类型*/
-	@Excel(name = "事故类型", width = 15)
-	@ApiModelProperty(value = "事故类型")
-	private String accidentType;
-	/**事故金额*/
-	@Excel(name = "事故金额", width = 15)
-	@ApiModelProperty(value = "事故金额")
-	private String accidentSum;
-	/**汇率*/
-	@Excel(name = "汇率", width = 15)
-	@ApiModelProperty(value = "汇率")
-	private String exchangeRate;
-	/**实际事故金额*/
-	@Excel(name = "实际事故金额", width = 15)
-	@ApiModelProperty(value = "实际事故金额")
-	private String practicalSum;
-	/**U8生成运费发票号*/
-	@Excel(name = "U8生成运费发票号", width = 15)
-	@ApiModelProperty(value = "U8生成运费发票号")
-	private String u8Invoice;
-	/**账套号*/
-	@Excel(name = "账套号", width = 15)
-	@ApiModelProperty(value = "账套号")
-	private String zhanghaoId;
-	/**备注*/
-	@Excel(name = "备注", width = 15)
-	@ApiModelProperty(value = "备注")
-	private String remark;
-	/**是否部门负责人*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+    /**
+     * 计划单号
+     */
+    @Excel(name = "计划单号", width = 15)
+    @ApiModelProperty(value = "计划单号")
+    private String planNumber;
+    /**
+     * 事故类型
+     */
+    @Excel(name = "事故类型", width = 15)
+    @ApiModelProperty(value = "事故类型")
+    private String accidentType;
+    /**
+     * 事故金额
+     */
+    @Excel(name = "事故金额", width = 15)
+    @ApiModelProperty(value = "事故金额")
+    private String accidentSum;
+    /**
+     * 汇率
+     */
+    @Excel(name = "汇率", width = 15)
+    @ApiModelProperty(value = "汇率")
+    private String exchangeRate;
+    /**
+     * 实际事故金额
+     */
+    @Excel(name = "实际事故金额", width = 15)
+    @ApiModelProperty(value = "实际事故金额")
+    private String practicalSum;
+    /**
+     * U8生成运费发票号
+     */
+    @Excel(name = "U8生成运费发票号", width = 15)
+    @ApiModelProperty(value = "U8生成运费发票号")
+    private String u8Invoice;
+    /**
+     * 账套号
+     */
+    @Excel(name = "账套号", width = 15)
+    @ApiModelProperty(value = "账套号")
+    private String zhanghaoId;
+    /**
+     * 备注
+     */
+    @Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    /**
+     * 是否部门负责人
+     */
 //	@Excel(name = "是否部门负责人", width = 15)
-	@ApiModelProperty(value = "是否部门负责人")
-	private String isLeaders;
-	/**主表id*/
+    @ApiModelProperty(value = "是否部门负责人")
+    private String isLeaders;
+    /**
+     * 主表id
+     */
 //	@ApiModelProperty(value = "主表id")
-	private String incidentTicketId;
-	/**报错字段sort*/
+    private String incidentTicketId;
+    /**
+     * 报错字段sort
+     */
 //	@Excel(name = "报错字段sort", width = 15)
-	@ApiModelProperty(value = "报错字段sort")
-	private String sort;
+    @ApiModelProperty(value = "报错字段sort")
+    private String sort;
 
-	@ApiModelProperty(value = "币种")
-	private String moneyType;
+    @ApiModelProperty(value = "币种")
+    private String moneyType;
+    @Excel(name = "已扣款金额", width = 15)
+    private String referMoney;
 }

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/IncidentTicketPage.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.oa.vo;
 
+import java.math.BigDecimal;
 import java.util.List;
 import org.jeecg.modules.oa.entity.IncidentTicket;
 import org.jeecg.modules.oa.entity.IncidentTicketChildren;
@@ -229,6 +230,10 @@ public class IncidentTicketPage {
 
 	@Excel(name = "部门", width = 15)
 	private String department;
+	//扣款状态
+	private String deductionStatus;
+	//扣款金额
+	private BigDecimal deductionAmount;
 
 	@ExcelCollection(name="森_工厂质量事故单-子表")
 	@ApiModelProperty(value = "森_工厂质量事故单-子表")

+ 218 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryAttendanceController.java

@@ -13,6 +13,8 @@ import javax.servlet.http.HttpServletResponse;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.vo.LoginUser;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.util.DateUtils;
@@ -61,6 +63,10 @@ public class SalaryAttendanceController {
     private ISalaryAttendanceHolidayService salaryAttendanceHolidayService;
     @Autowired
     private ISalaryChangeRecordService salaryChangeRecordService;
+    @Autowired
+    private ISalaryManagementService salaryManagementService;
+    @Autowired
+    private ISalaryManagementExtraService salaryManagementExtraService;
     String remarkExcel = "";
     /**
      * 分页列表查询
@@ -84,6 +90,149 @@ public class SalaryAttendanceController {
         return Result.ok(pageList);
     }
 
+    /**
+     * 通过excel导入数据
+     * 福利现金 年终奖
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @AutoLog(value = "导入福利现金或年终奖")
+    @RequestMapping(value = "/importExcelFlNz", method = RequestMethod.POST)
+//    @RequiresPermissions("salaryAttendance:importExcel:flj")
+    public Result<?> importExcelFlNz(HttpServletRequest request, HttpServletResponse response, SalaryManagement salaryManagement) throws IOException, InvalidFormatException {
+
+        if (org.apache.commons.lang.StringUtils.isEmpty(salaryManagement.getType())) {
+            return Result.error("参数异常:类型为空!!");
+        }
+        salaryManagement.setYearWithMonth(DateUtils.date_ym());
+//        salaryManagement.setYearWithMonth("2024-12");
+
+        if (org.apache.commons.lang.StringUtils.isEmpty(salaryManagement.getId()) || "false".equals(salaryManagement.getId())) {
+
+            QueryWrapper<SalaryManagement> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("del_flag", "0");
+            queryWrapper.eq("year_with_month", salaryManagement.getYearWithMonth());
+            queryWrapper.eq("type", salaryManagement.getType());
+            List<SalaryManagement> list = salaryManagementService.list(queryWrapper);
+            if (list.size() > 0) {
+                return Result.error("系统中已含有" + salaryManagement.getYearWithMonth() + salaryManagement.getType() + ",若要覆盖请选中覆盖上传选项!");
+            }
+        }
+
+        if ("福利现金".equals(salaryManagement.getType())) {
+            QueryWrapper<SalaryManagementExtra> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("del_flag", "0");
+            queryWrapper.eq("year_with_month", salaryManagement.getYearWithMonth());
+            //0福利现金 1年终奖
+            queryWrapper.eq("type", "0");
+            queryWrapper.eq("calculate", "1");
+
+            List<SalaryManagementExtra> list1 = salaryManagementExtraService.list(queryWrapper);
+            if (list1.size() > 0) {
+                return Result.error("系统中" + salaryManagement.getYearWithMonth() + salaryManagement.getType() + "已计算(" + list1.get(0).getCalculateDate() + "),无法覆盖!");
+            }
+
+            //如果当年12月份工资已计算,则当年12月福利现金不能导入
+            if(DateUtils.formatDate("MM").equals("12")){
+
+                QueryWrapper<SalaryManagement> queryWrapper2 = new QueryWrapper<>();
+                queryWrapper2.eq("del_flag", "0");
+                queryWrapper2.eq("year_with_month", salaryManagement.getYearWithMonth());
+                queryWrapper2.eq("type", "月度工资单");
+                List<SalaryManagement> list = salaryManagementService.list(queryWrapper2);
+                if (list.size() > 0) {
+                    return Result.error("系统中已含有本年度12月月度工资单,无法再生成福利现金!!");
+                }
+
+            }
+        }
+
+
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();// 获取上传文件对象
+            ImportParams params = new ImportParams();
+            params.setTitleRows(1);
+            params.setHeadRows(1);
+            params.setNeedSave(false);
+
+            String st = this.ifExist2(file, salaryManagement.getType());
+            if (!"true".equals(st)) {
+                if (st.contains("请")) {
+                    return Result.error(st);
+                }
+                return Result.error("未在模板中找到" + st + "字段,请勿增删改导入模板的字段!!");
+            }
+
+            try {
+
+                List<SalaryManagementExtra> detailList = new ArrayList<>();
+
+                List<SalaryManagementExtra> list = ExcelImportUtil.importExcel(file.getInputStream(), SalaryManagementExtra.class, params);
+
+                for (SalaryManagementExtra page : list) {
+
+                    String name = page.getName();//员工姓名
+                    String cardNo = page.getCardNo();//卡号
+                    String beforeTaxAmount = page.getBeforeTaxAmount();//税前金额
+
+                    if (org.apache.commons.lang.StringUtils.isEmpty(name) || org.apache.commons.lang.StringUtils.isEmpty(cardNo)) {
+                        continue;
+                    }
+                    if (org.apache.commons.lang.StringUtils.isEmpty(beforeTaxAmount)) {
+                        return Result.error("文件导入失败!" + name + "+" + cardNo + "组合,金额(税前)不能为空!");
+                    }
+
+                    try {
+                        new BigDecimal(beforeTaxAmount);
+                    } catch (Exception ex) {
+                        return Result.error("文件导入失败!" + name + "+" + cardNo + "组合,金额(税前)无转换成数字!");
+                    }
+
+                    List<SalaryChangeRecord> userList = salaryChangeRecordService.selectUserByPar(name.trim(), cardNo.trim());
+                    if (userList.size() < 1) {
+                        return Result.error("文件导入失败!" + name + "+" + cardNo + "组合,无法在查找到数据!");
+                    }
+
+                    SalaryChangeRecord entry = userList.get(0);
+
+                    page.setCode(entry.getCode());
+                    page.setUserId(entry.getUserId());
+                    page.setOrgName(entry.getOrgName());
+                    page.setYearWithMonth(salaryManagement.getYearWithMonth());
+
+                    if (salaryManagement.getType().equals("福利现金")) {
+                        page.setType("0");//福利现金
+                    } else {
+                        page.setType("1");//年终奖
+                    }
+                    detailList.add(page);
+                }
+
+                if (detailList.size() > 0) {
+                    salaryManagementService.saveMainExtra(salaryManagement, detailList);
+                } else {
+                    return Result.error("文件导入失败:导入模板不正确或者导入数据为空!");
+                }
+
+                return Result.ok("文件导入成功!合法数据行数:" + detailList.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.ok("文件导入失败!");
+    }
+
     /**
      * 添加
      *
@@ -267,6 +416,75 @@ public class SalaryAttendanceController {
      }
 
 
+    /**
+     * 校验导入模板是否完整
+     *
+     * @param file
+     * @return
+     */
+    public String ifExist2(MultipartFile file, String type) throws IOException, InvalidFormatException {
+
+        Workbook workbook = WorkbookFactory.create(file.getInputStream());
+        Sheet sheet = workbook.getSheetAt(0);
+        Iterator<Row> rowIterator = sheet.iterator();
+        List<String> header = new ArrayList<>();
+        List<String> header1 = new ArrayList<>();
+        if (rowIterator.hasNext()) {
+            Row headerRow1 = rowIterator.next();
+            if (rowIterator.hasNext()) {
+                Iterator<Cell> cellIterator = headerRow1.cellIterator();
+                while (cellIterator.hasNext()) {
+                    Cell cell = cellIterator.next();
+                    try {
+                        if (org.apache.commons.lang.StringUtils.isNotBlank(cell.getStringCellValue())) {
+                            header1.add(cell.getStringCellValue());
+                        }
+                    } catch (Exception x) {
+                        throw new RuntimeException("导入模板中表头字段:" + cell.toString() + "无法与系统匹配!" + x.getMessage());
+                    }
+                }
+            }
+            Row headerRow = rowIterator.next();
+            if (rowIterator.hasNext()) {
+//                headerRow = rowIterator.next();
+                Iterator<Cell> cellIterator = headerRow.cellIterator();
+                while (cellIterator.hasNext()) {
+                    Cell cell = cellIterator.next();
+                    try {
+                        header.add(cell.getStringCellValue());
+                    } catch (Exception x) {
+                        throw new RuntimeException("导入模板中表头字段:" + cell.toString() + "无法与系统匹配!" + x.getMessage());
+                    }
+                }
+            }
+        }
+
+        if(header1.size() == 0){
+
+            return "请使用正确的导入模板";
+        }
+        if (type.equals("福利现金") && !header1.get(0).equals("福利现金导入模板")) {
+
+            return "请使用福利现金导入模板";
+
+        }
+        if (type.equals("年终奖") && !header1.get(0).equals("年终奖导入模板")) {
+
+            return "请使用年终奖导入模板";
+
+        }
+
+        String fileName = "姓名,工资卡号,金额";
+        for (String o : fileName.split(",")) {
+            if (!header.contains(o)) {
+                return o;
+            }
+
+        }
+
+        return "true";
+    }
+
     /**
      * 校验导入模板是否完整
      * @param file

+ 5 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/controller/SalaryManagementController.java

@@ -1448,6 +1448,10 @@ public class SalaryManagementController {
             }
         }
 
+        if(header1.size() == 0){
+
+            return "请使用正确的导入模板";
+        }
         if (type.equals("福利现金") && !header1.get(0).equals("福利现金导入模板")) {
 
             return "请使用福利现金导入模板";
@@ -1560,7 +1564,7 @@ public class SalaryManagementController {
 
             //累计所得额 = 本年度当前人员所有应纳税所得之和
             BigDecimal cumulative = new BigDecimal("0");
-            List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, "2024", month);
+            List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, "2024", month,orgName);
 
             if (cumulativeList.size() > 0) {
                 for (SalaryManagementDetail detail : cumulativeList) {

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementDetailMapper.java

@@ -17,7 +17,7 @@ public interface SalaryManagementDetailMapper extends BaseMapper<SalaryManagemen
     
 	public List<SalaryManagementDetail> selectByMainId(@Param("id")String mainId,@Param("name")String name);
 
-	public List<SalaryManagementDetail> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow);
+	public List<SalaryManagementDetail> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow,@Param("orgName")String orgName);
 
 	public List<SalaryManagementDetail> selectByUserTotal(@Param("userId")String userId, @Param("beginDate")String beginDate, @Param("endDate")String endDate);
 

+ 2 - 2
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementExtraMapper.java

@@ -20,8 +20,8 @@ public interface SalaryManagementExtraMapper extends BaseMapper<SalaryManagement
 
 	public List<SalaryManagementExtra> selectByMainId(@Param("id")String mainId,@Param("name")String name,@Param("type")String type);
 
-	public List<SalaryManagementExtra> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow,@Param("type")String type);
-	public List<SalaryManagementExtra> selectByUserCalculate(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow,@Param("type")String type);
+	public List<SalaryManagementExtra> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow,@Param("type")String type,@Param("orgName")String orgName);
+	public List<SalaryManagementExtra> selectByUserCalculate(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow,@Param("type")String type,@Param("orgName")String orgName);
 
 	public List<SalaryManagementExtra> selectByUserTotal(@Param("userId")String userId, @Param("beginDate")String beginDate, @Param("endDate")String endDate,@Param("type")String type);
 

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementHolidayMapper.java

@@ -20,7 +20,7 @@ public interface SalaryManagementHolidayMapper extends BaseMapper<SalaryManageme
 
 	public List<SalaryManagementHoliday> selectByMainId(@Param("id")String mainId,@Param("name")String name);
 
-	public List<SalaryManagementHoliday> selectByUser(@Param("userId") String userId,@Param("yearWith") String yearWith);
+	public List<SalaryManagementHoliday> selectByUser(@Param("userId") String userId,@Param("yearWith") String yearWith,@Param("orgName") String orgName);
 
 	public List<SalaryManagementHoliday> selectByUserTotal(@Param("userId") String userId,@Param("beginDate") String beginDate,@Param("endDate") String endDate);
 }

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/SalaryManagementWorkOvertimeMapper.java

@@ -20,7 +20,7 @@ public interface SalaryManagementWorkOvertimeMapper extends BaseMapper<SalaryMan
 
 	public List<SalaryManagementWorkOvertime> selectByMainId(@Param("id")String mainId,@Param("name")String name);
 
-	public List<SalaryManagementWorkOvertime> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow);
+	public List<SalaryManagementWorkOvertime> selectByUser(@Param("userId")String userId, @Param("yearWithMonth")String yearWithMonth, @Param("yearWithMonthNow")String yearWithMonthNow,@Param("orgName")String orgName);
 
 	public List<SalaryManagementWorkOvertime> selectByUserTotal(@Param("userId")String userId, @Param("beginDate")String beginDate, @Param("endDate")String endDate);
 

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementDetailMapper.xml

@@ -27,7 +27,7 @@
 
 	<select id="selectByUser" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementDetail">
 		select * from salary_management_detail where del_flag = 0
-		and user_id = #{userId} and year_with_month like '${yearWithMonth}%'
+		and user_id = #{userId} and org_name = #{orgName} and year_with_month like '${yearWithMonth}%'
 
 		<if test="yearWithMonthNow != null and yearWithMonthNow != ''">
 			AND year_with_month != #{yearWithMonthNow}

+ 2 - 2
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementExtraMapper.xml

@@ -28,7 +28,7 @@
 				OR (calculate_date = #{yearWithMonthNow} and calculate = 1)
 			</if>
 			) -->
-		and user_id = #{userId} and year_with_month like '${yearWithMonth}%'
+		and user_id = #{userId} and org_name = #{orgName} and year_with_month like '${yearWithMonth}%'
 
 
 	</select>
@@ -42,7 +42,7 @@
 
 	<select id="selectByUserCalculate" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementExtra">
 		select * from salary_management_extra where del_flag = 0 and type = #{type} and calculate = 1
-		and user_id = #{userId} and year_with_month like '${yearWithMonth}%'
+		and user_id = #{userId} and org_name = #{orgName} and year_with_month like '${yearWithMonth}%'
 
 
 	</select>

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementHolidayMapper.xml

@@ -23,7 +23,7 @@
 
 	<select id="selectByUser" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementHoliday">
 		select * from salary_management_holiday where del_flag = 0
-		and user_id = #{userId} and year_with like '${yearWith}'
+		and user_id = #{userId} and org_name = #{orgName} and year_with like '${yearWith}'
 
 	</select>
 	<select id="selectByUserTotal" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementHoliday">

+ 1 - 1
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/mapper/xml/SalaryManagementWorkOvertimeMapper.xml

@@ -25,7 +25,7 @@
 
 	<select id="selectByUser" parameterType="java.lang.String" resultType="org.jeecg.modules.salary.entity.SalaryManagementWorkOvertime">
 		select * from salary_management_work_overtime where del_flag = 0
-			and user_id = #{userId} and year_with_month like '${yearWithMonth}%'
+			and user_id = #{userId} and org_name = #{orgName} and year_with_month like '${yearWithMonth}%'
 
 			<if test="yearWithMonthNow != null and yearWithMonthNow != ''">
 				AND year_with_month != #{yearWithMonthNow}

+ 15 - 12
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/salary/service/impl/SalaryManagementServiceImpl.java

@@ -654,7 +654,7 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                     StringBuffer sb = new StringBuffer("本次执行(月度工资单):");//记录执行信息
 
 //                    String name = o.getName();//用户主键
-//                    if(name.equals("崔崇杰") || name.equals("崔崇杰") || name.equals("崔崇杰")){
+//                    if(name.equals("方珂") || name.equals("谢慧丽") || name.equals("屠嘉琪")){
 //                        System.out.println("11111111");
 //                    }else{
 //                        continue;
@@ -767,11 +767,11 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                     BigDecimal cumulativeTax = new BigDecimal("0");
                     //累计所得额 = 本年度当前人员所有应纳税所得之和
                     BigDecimal cumulative = new BigDecimal("0");
-                    List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, withMonth, yearWithMonth);
-                    List<SalaryManagementWorkOvertime> cumulativeOvertimeList = salaryManagementWorkOvertimeMapper.selectByUser(userId, withMonth, null);
-                    List<SalaryManagementHoliday> holidayList = salaryManagementHolidayMapper.selectByUser(userId,withMonth);
+                    List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, withMonth, yearWithMonth,orgName);
+                    List<SalaryManagementWorkOvertime> cumulativeOvertimeList = salaryManagementWorkOvertimeMapper.selectByUser(userId, withMonth, null,orgName);
+                    List<SalaryManagementHoliday> holidayList = salaryManagementHolidayMapper.selectByUser(userId,withMonth,orgName);
                     //0福利现金 1年终奖 福利现金需计算工资、加班费、年休累计纳税额,且参与入其他薪资累计
-                    List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUser(userId,withMonth,yearWithMonth,"0");
+                    List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUser(userId,withMonth,yearWithMonth,"0",orgName);
 //                    extra = salaryManagementExtraMapper.selectByUser(userId,withMonth,yearWithMonth,"0");
 
                     //福利金
@@ -996,6 +996,9 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                     salaryManagementZZ.setPersonalTax(AesEncryptUtil.encrypt(String.format("%.2f", personalTaxZZ)));
                 }
 
+//                if(1==1){
+//                    return Result.error("执行结束");
+//                }
                 this.saveAll(yearWithMonth, salaryManagementMFY, salaryManagementNBSY, salaryManagementZZ, salaryAttendanceDetailListMFY,
                         salaryAttendanceDetailListNBSY, salaryAttendanceDetailListZZ);
 
@@ -1102,11 +1105,11 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
 
                     if (wages.compareTo(BigDecimal.ZERO) != 0) {
 
-                        List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, newYear, null);
-                        List<SalaryManagementWorkOvertime> cumulativeOvertimeList = salaryManagementWorkOvertimeMapper.selectByUser(userId, newYear, null);
+                        List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, newYear, null,orgName);
+                        List<SalaryManagementWorkOvertime> cumulativeOvertimeList = salaryManagementWorkOvertimeMapper.selectByUser(userId, newYear, null,orgName);
                         //0福利现金 1年终奖 福利现金需计算工资、加班费、年休累计纳税额,且参与入其他薪资累计
 //                        List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUserCalculate(userId,withMonth,yearWithMonth,"0");
-                        List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUserCalculate(userId,newYear,yearWithMonth,"0");
+                        List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUserCalculate(userId,newYear,yearWithMonth,"0",orgName);
 
                         if (cumulativeList.size() > 0) {
 
@@ -1381,11 +1384,11 @@ public class SalaryManagementServiceImpl extends ServiceImpl<SalaryManagementMap
                     if (workOverTotal.compareTo(BigDecimal.ZERO) != 0) {
 
 //                        List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, withMonth, yearWithMonth);
-                        List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, withMonth, null);
-                        List<SalaryManagementWorkOvertime> cumulativeOvertimeList = salaryManagementWorkOvertimeMapper.selectByUser(userId, withMonth, yearWithMonth);
-                        List<SalaryManagementHoliday> holidayList = salaryManagementHolidayMapper.selectByUser(userId,withMonth);
+                        List<SalaryManagementDetail> cumulativeList = salaryManagementDetailMapper.selectByUser(userId, withMonth, null,orgName);
+                        List<SalaryManagementWorkOvertime> cumulativeOvertimeList = salaryManagementWorkOvertimeMapper.selectByUser(userId, withMonth, yearWithMonth,orgName);
+                        List<SalaryManagementHoliday> holidayList = salaryManagementHolidayMapper.selectByUser(userId,withMonth,orgName);
                         //0福利现金 1年终奖 福利现金需计算工资、加班费、年休累计纳税额,且参与入其他薪资累计
-                        List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUserCalculate(userId,withMonth,yearWithMonth,"0");
+                        List<SalaryManagementExtra> extra = salaryManagementExtraMapper.selectByUserCalculate(userId,withMonth,yearWithMonth,"0",orgName);
 
                         if (cumulativeList.size() > 0) {
 

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -282,6 +282,14 @@ public class SysUserController {
 			user.setStatus(1);
 			user.setDelFlag("0");
 
+            String nIdNo = user.getNIdNo();
+            String passportNo = user.getPassportNo();
+
+            if(StringUtils.isBlank(nIdNo) && StringUtils.isBlank(passportNo)){
+                result.error500("身份证号码与护照号码不能全部为空");
+                return result;
+            }
+
 			sysUserService.addUserWithRole(user, selectedRoles);
             sysUserService.addUserWithDepart(user, selectedDeparts);
 
@@ -307,6 +315,15 @@ public class SysUserController {
 				result.error500("未找到对应实体");
 			}else {
 				SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
+
+                String nIdNo = user.getNIdNo();
+                String passportNo = user.getPassportNo();
+
+                if(StringUtils.isBlank(nIdNo) && StringUtils.isBlank(passportNo)){
+                    result.error500("身份证号码与护照号码不能全部为空");
+                    return result;
+                }
+
 				user.setUpdateTime(new Date());
 				//String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), sysUser.getSalt());
 				user.setPassword(sysUser.getPassword());

+ 9 - 4
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUser.java

@@ -130,7 +130,8 @@ public class SysUser implements Serializable {
 
 
     @TableField(exist = false)
-    private java.lang.String postName;//临时字段,存放职务名称
+    private java.lang.String postName;//临时字段,存放职务名称N
+
 
     /**
      * 家庭电话
@@ -293,9 +294,13 @@ public class SysUser implements Serializable {
     @Excel(name = "籍贯", width = 15)
     @ApiModelProperty(value = "籍贯")
     private java.lang.String nNativePlace;
-    /**身份证号码*/
-    @Excel(name = "身份证号码", width = 15)
-    @ApiModelProperty(value = "身份证号码")
+    /**证件类型*/
+    @Excel(name = "证件类型", width = 15)
+    @ApiModelProperty(value = "证件类型")
+    private java.lang.String passportNo;//
+    /**证件号码*/
+    @Excel(name = "证件号码", width = 15)
+    @ApiModelProperty(value = "证件号码")
     private java.lang.String nIdNo;
     /**家庭住址*/
     @Excel(name = "家庭住址", width = 15)