ysh 2 سال پیش
والد
کامیت
dd0a339e08
29فایلهای تغییر یافته به همراه1990 افزوده شده و 205 حذف شده
  1. 113 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
  2. 29 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  3. 95 92
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUser.java
  4. 8 8
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
  5. 55 45
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/WeixinUserImpl.java
  6. 46 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/ExcelItemListener.java
  7. 498 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/controller/BdSalaryDetailsController.java
  8. 543 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/controller/SalaryExcelController.java
  9. 26 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/controller/viewClockInController.java
  10. 284 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/entity/BdSalaryDetails.java
  11. 20 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/entity/SalaryDetail.java
  12. 35 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/entity/SalaryExcel.java
  13. 20 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/BdSalaryDetailsMapper.java
  14. 14 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/bdClockinMonthMapper.java
  15. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/viewClockInMapper.java
  16. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/xml/BdSalaryDetailsMapper.xml
  17. 68 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/xml/bdClockinMonthMapper.xml
  18. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/xml/viewClockInMapper.xml
  19. 17 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/IBdSalaryDetailsService.java
  20. 13 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/IbdClockinMonthService.java
  21. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/IviewClockInService.java
  22. 31 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/impl/BdSalaryDetailsServiceImpl.java
  23. 24 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/impl/bdClockinMonthServiceImpl.java
  24. 4 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/impl/viewClockInServiceImpl.java
  25. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/workOvertime/entity/workOvertime.java
  26. 8 4
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  27. 9 9
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  28. 8 8
      jeecg-boot-module-system/src/main/resources/application-test.yml
  29. 1 1
      jeecg-boot-module-system/src/main/resources/jeecg/jeecg_config.properties

+ 113 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java

@@ -6,10 +6,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.aliyuncs.exceptions.ClientException;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.util.PropertiesUtil;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.session.Session;
 import org.apache.shiro.session.mgt.eis.SessionDAO;
@@ -46,6 +47,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.*;
 
 /**
@@ -525,14 +527,36 @@ public class LoginController {
 		return result;
 	}
 
+
 	/**
-	 * app登录
+	 * app登录(自动区分生产或测试环境)
 	 * @param sysLoginModel
 	 * @return
 	 * @throws Exception
 	 */
 	@RequestMapping(value = "/mLogin", method = RequestMethod.POST)
 	public Result<JSONObject> mLogin(@RequestBody SysLoginModel sysLoginModel, HttpSession session,HttpServletRequest request) throws Exception {
+		String active = getProjectConfig("active");//获取配置信息 dev or prod
+		Result<JSONObject> result = new Result<JSONObject>();
+
+		if(StringUtils.isNotBlank(active) && active.equals("dev")){
+			result = mLogin2(sysLoginModel,session,request); //测试环境 可用账号密码进行h5页面登录
+		}else{
+			result = mLogin1(sysLoginModel,session,request); //生产环境 仅用微信授权进行h5页面登录
+		}
+
+		return result;
+	}
+
+
+	/**
+	 * app登录 (企业微信授权登录,发布时使用此方法)
+	 * @param sysLoginModel
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping(value = "/mLogin1", method = RequestMethod.POST)
+	public Result<JSONObject> mLogin1(@RequestBody SysLoginModel sysLoginModel, HttpSession session,HttpServletRequest request) throws Exception {
 		Result<JSONObject> result = new Result<JSONObject>();
 		String username = sysLoginModel.getUsername();
 //		System.out.println("============code= "+username+"=============");
@@ -595,6 +619,77 @@ public class LoginController {
 		return result;
 	}
 
+	/**
+	 * app登录(临时登录入口,仅用于本地测试时使用工号登录)
+	 * @param sysLoginModel
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping(value = "/mLogin2", method = RequestMethod.POST)
+	public Result<JSONObject> mLogin2(@RequestBody SysLoginModel sysLoginModel, HttpSession session,HttpServletRequest request) throws Exception {
+		Result<JSONObject> result = new Result<JSONObject>();
+		String username = sysLoginModel.getUsername();
+//		System.out.println("============code= "+username+"=============");
+		//	String auts = weixinUserService.auts(username,"1");
+		//	System.out.println(auts);
+//		SysUser sysUser=null;
+//		if (auts!=null){
+//			sysUser = sysUserService.getById(auts);
+//		}
+		String password = sysLoginModel.getPassword();
+//		//1. 校验用户是否有效
+		SysUser sysUser = sysUserService.getUserByName(username);
+		result = sysUserService.checkUserIsEffective(sysUser);
+		if(!result.isSuccess()) {
+			return result;
+		}
+
+		//2. 校验用户名或密码是否正确
+		String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
+		String syspassword = sysUser.getPassword();
+		if (!syspassword.equals(userpassword)) {
+			result.error500("用户名或密码错误");
+			return result;
+		}
+		if (sysUser.getEmploymentStatus()==null||sysUser.getEmploymentStatus().equals(30)){
+			result.error500("无法登录!");
+			return result;
+		}
+		String orgCode = sysUser.getOrgCode();
+		if(oConvertUtils.isEmpty(orgCode)) {
+			//如果当前用户无选择部门 查看部门关联信息
+			List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
+			if (departs == null || departs.size() == 0) {
+				result.error500("用户暂未归属部门,不可登录!");
+				return result;
+			}
+			orgCode = departs.get(0).getOrgCode();
+			sysUser.setOrgCode(orgCode);
+			this.sysUserService.updateUserDepart(username, orgCode);
+		}
+		JSONObject obj = new JSONObject();
+		//用户登录信息
+		obj.put("userInfo", sysUser);
+
+		// 生成token
+		String token = JwtUtil.sign(sysUser.getUsername(),sysUser.getPassword());
+		// 设置超时时间
+		redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
+		//redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000);
+
+		//token 信息
+		obj.put("token", token);
+		obj.put("sessionId",session.getId());
+		result.setResult(obj);
+		result.setSuccess(true);
+		result.setCode(200);
+		Map<String,Object>map=new HashMap<>();
+		List<TokenInfo>list=new ArrayList<>();
+		TokenInfo tokenInfo=new TokenInfo();
+		baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null);
+		return result;
+	}
+
 	/**
 	 * 图形验证码
 	 * @param sysLoginModel
@@ -722,4 +817,20 @@ public class LoginController {
 		return result;
 	}
 
+	/**
+	 * 获取固定文件配置信息
+	 * @param key
+	 * @return
+	 */
+	public static String getProjectConfig(String key) {
+		Properties pros = new Properties();
+		String value = "";
+		try {
+			pros.load(new InputStreamReader(PropertiesUtil.class.getResourceAsStream("/application.yml"), "UTF-8"));
+			value = pros.getProperty(key);
+		} catch (Exception e) {
+			return e.getMessage();
+		}
+		return value;
+	}
 }

+ 29 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -466,11 +466,11 @@ public class SysUserController {
             CodeVo codeVo=new CodeVo();
             codeVo.setSeqName("工号编码");
             sysUserMapper.getNextNo(codeVo);
-            if(user.getCategory().equals(105)||user.getCategory().equals(106)){
-                user.setWorkNo("WB"+String.valueOf(codeVo.getSeqNo()));
-            }else {
+//            if(user.getCategory().equals(105)||user.getCategory().equals(106)){
+//                user.setWorkNo("WB"+String.valueOf(codeVo.getSeqNo()));
+//            }else {
                 user.setWorkNo(String.valueOf(codeVo.getSeqNo()));
-            }
+//            }
             user.setCode(String.valueOf(codeVo.getSeqNo()));
             user.setId(String.valueOf(codeVo.getSeqNo()));
             user.setUsername(String.valueOf(codeVo.getSeqNo()));
@@ -608,7 +608,7 @@ public class SysUserController {
 		return result;
 	}
 
-
+    @AutoLog(value = "员工管理-入职")
     @RequestMapping(value = "/editState", method = RequestMethod.GET)
     public Result<SysUser> editState(String userids) {
         Result<SysUser> result = new Result<SysUser>();
@@ -628,6 +628,7 @@ public class SysUserController {
 	 * 删除用户
 	 */
 	//@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-删除用户")
 	@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
 	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
 		baseCommonService.addLog("删除用户,id: " +id ,CommonConstant.LOG_TYPE_2, 3);
@@ -663,6 +664,7 @@ public class SysUserController {
 	 * 批量删除用户
 	 */
 	//@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-删除用户(批量)")
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
 		baseCommonService.addLog("批量删除用户, ids: " +ids ,CommonConstant.LOG_TYPE_2, 3);
@@ -676,6 +678,7 @@ public class SysUserController {
 	 * @return
 	 */
 	//@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-冻结&解冻用户")
 	@RequestMapping(value = "/frozenBatch", method = RequestMethod.PUT)
 	public Result<SysUser> frozenBatch(@RequestBody JSONObject jsonObject) {
 		Result<SysUser> result = new Result<SysUser>();
@@ -782,6 +785,7 @@ public class SysUserController {
      * 修改密码
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-修改密码")
     @RequestMapping(value = "/changePassword", method = RequestMethod.PUT)
     public Result<?> changePassword(@RequestBody SysUser sysUser) {
         SysUser u = this.sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, sysUser.getUsername()));
@@ -881,6 +885,7 @@ public class SysUserController {
      * @param request
      * @param sysUser
      */
+    @AutoLog(value = "员工管理-导出excel")
     @RequestMapping(value = "/exportXls")
     public ModelAndView exportXls(SysUser sysUser,HttpServletRequest request,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
@@ -1094,6 +1099,7 @@ public class SysUserController {
      * @param
      * @param
      */
+    @AutoLog(value = "员工管理-导出excel员工年假调休")
     @RequestMapping(value = "/exportXlsts")
     public ModelAndView exportXlsts(SysUser sysUser,HttpServletRequest request,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
@@ -1224,6 +1230,7 @@ public class SysUserController {
      * @param request
      * @param sysUser
      */
+    @AutoLog(value = "排班-导出")
     @RequestMapping(value = "/exportXlsty")
     public ModelAndView exportXlsty(HttpServletRequest request,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, UserShift userShift,String name,String dept,String deptid,String usertid,String type,String ruleid) throws ParseException {
@@ -1381,6 +1388,7 @@ public class SysUserController {
      */
     //@RequiresRoles({"admin"})
     //@RequiresPermissions("user:import")
+    @AutoLog(value = "员工管理-导入")
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
@@ -1780,6 +1788,7 @@ public class SysUserController {
 	 * 首页用户重置密码
 	 */
 	//@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-重置密码")
 	@RequestMapping(value = "/updatePassword", method = RequestMethod.PUT)
 	public Result<?> changPassword(@RequestBody JSONObject json) {
 		String username = json.getString("username");
@@ -1813,6 +1822,7 @@ public class SysUserController {
      * @return
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-给指定角色添加用户")
     @RequestMapping(value = "/addSysUserRole", method = RequestMethod.POST)
     public Result<String> addSysUserRole(@RequestBody SysUserRoleVO sysUserRoleVO) {
         Result<String> result = new Result<String>();
@@ -1852,6 +1862,7 @@ public class SysUserController {
      * @return
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-删除指定角色的用户关系")
     @RequestMapping(value = "/deleteUserRole", method = RequestMethod.DELETE)
     public Result<SysUserRole> deleteUserRole(@RequestParam(name="roleId") String roleId,
                                                     @RequestParam(name="userId",required=true) String userId
@@ -1876,6 +1887,7 @@ public class SysUserController {
      * @return
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-批量删除指定角色的用户关系")
     @RequestMapping(value = "/deleteUserRoleBatch", method = RequestMethod.DELETE)
     public Result<SysUserRole> deleteUserRoleBatch(
             @RequestParam(name="roleId") String roleId,
@@ -2003,6 +2015,7 @@ public class SysUserController {
      * 给指定部门添加对应的用户
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-给指定部门添加对应的用户")
     @RequestMapping(value = "/editSysDepartWithUser", method = RequestMethod.POST)
     public Result<String> editSysDepartWithUser(@RequestBody SysDepartUsersVO sysDepartUsersVO) {
         Result<String> result = new Result<String>();
@@ -2032,6 +2045,7 @@ public class SysUserController {
      *   删除指定机构的用户关系
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-删除指定机构的用户关系")
     @RequestMapping(value = "/deleteUserInDepart", method = RequestMethod.DELETE)
     public Result<SysUserDepart> deleteUserInDepart(@RequestParam(name="depId") String depId,
                                                     @RequestParam(name="userId",required=true) String userId
@@ -2064,6 +2078,7 @@ public class SysUserController {
      * 批量删除指定机构的用户关系
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "员工管理-批量删除指定机构的用户关系")
     @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE)
     public Result<SysUserDepart> deleteUserInDepartBatch(
             @RequestParam(name="depId") String depId,
@@ -2117,6 +2132,7 @@ public class SysUserController {
 	 * @return
 	 */
 	@PostMapping("/register")
+    @AutoLog(value = "用户注册接口")
 	public Result<JSONObject> userRegister(@RequestBody JSONObject jsonObject, SysUser user) {
 		Result<JSONObject> result = new Result<JSONObject>();
 		String phone = jsonObject.getString("phone");
@@ -2254,6 +2270,7 @@ public class SysUserController {
 	 * 用户更改密码
 	 */
 	@GetMapping("/passwordChange")
+    @AutoLog(value = "用户管理-用户更改密码")
 	public Result<SysUser> passwordChange(@RequestParam(name="username")String username,
 										  @RequestParam(name="password")String password,
 			                              @RequestParam(name="smscode")String smscode,
@@ -2394,6 +2411,7 @@ public class SysUserController {
      * @param jsonObject
      * @return
      */
+    @AutoLog(value = "用户管理-还原被逻辑删除的用户")
     @RequestMapping(value = "/putRecycleBin", method = RequestMethod.PUT)
     public Result putRecycleBin(@RequestBody JSONObject jsonObject, HttpServletRequest request) {
         String userIds = jsonObject.getString("userIds");
@@ -2413,6 +2431,7 @@ public class SysUserController {
      * @return
      */
     //@RequiresRoles({"admin"})
+    @AutoLog(value = "用户管理-彻底删除用户")
     @RequestMapping(value = "/deleteRecycleBin", method = RequestMethod.DELETE)
     public Result deleteRecycleBin(@RequestParam("userIds") String userIds) {
         if (StringUtils.isNotBlank(userIds)) {
@@ -2427,6 +2446,7 @@ public class SysUserController {
      * @param jsonObject
      * @return
      */
+    @AutoLog(value = "用户管理-移动端修改用户信息")
     @RequestMapping(value = "/appEdit", method = RequestMethod.PUT)
     public Result<SysUser> appEdit(HttpServletRequest request,@RequestBody JSONObject jsonObject) {
         Result<SysUser> result = new Result<SysUser>();
@@ -2483,6 +2503,7 @@ public class SysUserController {
      * @param clientId
      * @return
      */
+    @AutoLog(value = "用户管理-移动端保存设备信息")
     @RequestMapping(value = "/saveClientId", method = RequestMethod.GET)
     public Result<SysUser> saveClientId(HttpServletRequest request,@RequestParam("clientId")String clientId) {
         Result<SysUser> result = new Result<SysUser>();
@@ -2573,6 +2594,7 @@ public class SysUserController {
      * @param json
      * @return
      */
+    @AutoLog(value = "用户管理-根据用户名修改手机号")
     @RequestMapping(value = "/updateMobile", method = RequestMethod.PUT)
     public Result<?> changMobile(@RequestBody JSONObject json,HttpServletRequest request) {
         String smscode = json.getString("smscode");
@@ -2664,6 +2686,7 @@ public class SysUserController {
     }
 
     //发邮件
+    @AutoLog(value = "发邮件")
     @RequestMapping(value = "/editUser", method = RequestMethod.GET)
     public  Result<SysUser> editUser(String id,String avatar) {
         Result<SysUser> result = new Result<SysUser>();
@@ -2764,6 +2787,7 @@ public class SysUserController {
         return Result.OK(maps);
     }
 
+
     @AutoLog(value = "排班-编辑排班")
     @GetMapping(value = "/queryMothByUsers")
     public Result<?> queryMothByUsers(HttpServletRequest req, UserShift userShift,String deptid,String usertid,String type) throws ParseException {

+ 95 - 92
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUser.java

@@ -57,22 +57,46 @@ public class SysUser implements Serializable {
     @Excel(name = "*真实姓名", width = 15)
     private String realname;
 
-    @Excel(name = "*身份证号码", width = 15)
-    private String sfzCode;
+    /**英文名**/
+    @Excel(name="*英文名",width = 15)
+    private  String egName;
 
-    /**
-     * 年龄
-     */
-    @Excel(name = "年龄", width = 15)
-    private Integer age;
+    /**用户所属组织**/
+    @Excel(name = "一级部门", width = 15)
+    private transient  String del2;
+
+    /**部门名称*/
+    @Excel(name = "*末级部门", width = 15)
+    private transient String orgCodeTxt;
+
+    @Excel(name = "职位", width = 15,dictTable ="sys_position",dicText = "name",dicCode = "code")
+    @Dict(dictTable ="sys_position",dicText = "name",dicCode = "code")
+    private String post;
 
+    /**入职日期**/
+    @Excel(name="*入职日期",width = 15,format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private  Date entryDate;
     /**
-     * 生日
+     * 试用结束时间
      */
-    @Excel(name = "生日", width = 15, format = "yyyy-MM-dd")
+    @Excel(name = "结束日期", width = 15,format = "yyyy-MM-dd")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date birthday;
+    private Date trialEndDate;
+
+    /**
+     * 基本工资一
+     */
+    @Excel(name = "*基本工资", width = 15)
+    private  String wagesOne;
+
+    /**
+     * 电话
+     */
+    @Excel(name = "*电话", width = 15)
+    private String phone;
 
     /**
      * 证件类型(1中国身份证,2其他身份证)
@@ -80,6 +104,17 @@ public class SysUser implements Serializable {
     @Excel(name = "*身份证类型", width = 15)
     private String sfzType;
 
+    @Excel(name = "*身份证号码", width = 15)
+    private String sfzCode;
+
+    /**
+     * 生日
+     */
+    @Excel(name = "生日", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date birthday;
+
     /**
      * 性别(1:男 2:女)
      */
@@ -87,20 +122,17 @@ public class SysUser implements Serializable {
     @Dict(dicCode = "sex")
     private Integer sex;
 
-
     /**
-     * 电话
+     * 社会工龄(按月)
      */
-    @Excel(name = "*电话", width = 15)
-    private String phone;
+    @Excel(name = "社会工龄(/月)", width = 15)
+    private String workMoth;
 
     /**
-     * 国籍
+     * 司龄(按月)
      */
-    @Excel(name = "国籍", width = 15,dicCode="nationality")
-    @Dict(dicCode = "nationality")
-    private String nationality;
-
+    @Excel(name = "司龄(/月)", width = 15)
+    private String divisionMoth;
 
     /**
      * 学历
@@ -115,70 +147,71 @@ public class SysUser implements Serializable {
     @Excel(name = "毕业学校", width = 15)
     private String school;
 
+    @Excel(name = "*银行卡号", width = 15)
+    @TableField(typeHandler = AESEncryptHandler.class)
+    private String bankCard;
+
+    @Excel(name = "开户行", width = 15)
+    private String bankAddr;
+
+    @Excel(name = "缴交基数", width = 15)
+    private  String wagesBase;
+
+    @Excel(name = "公积金账号", width = 15)
+    private String syFund;
 
     /**
-     * 分摊部门
+     * 电子邮件
      */
-    @Excel(name = "分摊部门", width = 15,dicCode="share_dept")
-    @Dict(dicCode = "share_dept")
-    private  String shareDept;
+    @Excel(name = "电子邮件", width = 15)
+    private String email;
+
+    /**备用虚拟字段**/
+    @Excel(name = "上班类型", width = 15,dicCode = "type")
+    @Dict(dicCode = "type")
+    private transient  String type;
+
+    /**紧急联系人**/
+    @Excel(name="紧急联系人",width = 15)
+    private  String urgentName;
+
+    /**紧急联系人电话**/
+    @Excel(name="紧急联系人电话",width = 15)
+    private  String urgentPhone;
+
     /**
      * 家庭住址
      */
     @Excel(name = "家庭住址", width = 15)
     private String addr;
 
-    /**入职日期**/
-    @Excel(name="*入职日期",width = 15,format = "yyyy-MM-dd")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private  Date entryDate;
-
     /**
-     * 试用时间(按月)
+     * 分摊部门
      */
-    @Excel(name = "*试用期(/月)", width = 15)
-    private String trialMoth;
+    @Excel(name = "分摊部门", width = 15,dicCode="share_dept")
+    @Dict(dicCode = "share_dept")
+    private  String shareDept;
 
     /**
-     * 试用结束时间
+     * 年龄
      */
-    @Excel(name = "结束日期", width = 15,format = "yyyy-MM-dd")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date trialEndDate;
+    @Excel(name = "年龄", width = 15)
+    private Integer age;
 
-    /**
-     * 社会工龄(按月)
-     */
-    @Excel(name = "社会工龄(/月)", width = 15)
-    private String workMoth;
 
     /**
-     * 司龄(按月)
+     * 国籍
      */
-    @Excel(name = "司龄(/月)", width = 15)
-    private String divisionMoth;
-
-    @Excel(name = "公积金账号", width = 15)
-    private String syFund;
-
-    @Excel(name = "*银行卡号", width = 15)
-    @TableField(typeHandler = AESEncryptHandler.class)
-    private String bankCard;
-
-
-    @Excel(name = "开户行", width = 15)
-    private String bankAddr;
+    @Excel(name = "国籍", width = 15,dicCode="nationality")
+    @Dict(dicCode = "nationality")
+    private String nationality;
 
     /**
-     * 基本工资一
+     * 试用时间(按月)
      */
-    @Excel(name = "*基本工资", width = 15)
-    private  String wagesOne;
+    @Excel(name = "*试用期(/月)", width = 15)
+    private String trialMoth;
 
-    @Excel(name = "缴交基数", width = 15)
-    private  String wagesBase;
     /**
      * 雇佣状态 10在职 20离退 30离职
      */
@@ -198,12 +231,6 @@ public class SysUser implements Serializable {
      */
     @Excel(name = "户口地址", width = 15)
     private String homeAddr;
-    /**紧急联系人**/
-    @Excel(name="紧急联系人",width = 15)
-    private  String urgentName;
-    /**紧急联系人电话**/
-    @Excel(name="紧急联系人电话",width = 15)
-    private  String urgentPhone;
 
 
     /**
@@ -212,41 +239,17 @@ public class SysUser implements Serializable {
     @Excel(name = "备注", width = 15)
     private String remarks;
 
-    /**备用虚拟字段**/
-    @Excel(name = "上班类型", width = 15,dicCode = "type")
-    @Dict(dicCode = "type")
-    private transient  String type;
-
     /**
      * 是否考勤 0是 1否
      */
     @Excel(name = "*是否打卡", width = 15)
     private String isAttendance;
 
-    /**用户所属组织**/
-    @Excel(name = "一级部门", width = 15)
-    private transient  String del2;
+
     /**用户所属组织**/
     @Excel(name = "二级部门", width = 15)
     private  transient String del3;
 
-    /**部门名称*/
-    @Excel(name = "*末级部门", width = 15)
-    private transient String orgCodeTxt;
-    @Excel(name = "职位", width = 15,dictTable ="sys_position",dicText = "name",dicCode = "code")
-    @Dict(dictTable ="sys_position",dicText = "name",dicCode = "code")
-    private String post;
-
-    /**英文名**/
-    @Excel(name="*英文名",width = 15)
-    private  String egName;
-
-
-    /**
-     * 电子邮件
-     */
-    @Excel(name = "电子邮件", width = 15)
-    private String email;
 
 
     /**

+ 8 - 8
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml

@@ -432,14 +432,14 @@ on a.depart_name=b.orgCodeTxt
 	and a.del_flag='0' and a.employment_status='10' order by create_time desc
 	</select>
     <select id="tpUser" resultType="org.jeecg.modules.system.entity.SysUser">
-		select *from sys_user where 1=1
-	<if test="state!=null and ''!=state">
-	and	info_sy in (#{state},'3')
-	</if>
-	and del_flag='0'
-	<if test="wxState!=null and ''!=wxState">
-		and sy_state='0'
-	</if>
+		select *from sys_user where 1=1 and employment_status ='10'
+		<if test="state!=null and ''!=state">
+		and	info_sy in (#{state},'3')
+		</if>
+		and del_flag='0'
+		<if test="wxState!=null and ''!=wxState">
+			and sy_state='0'
+		</if>
 		<if test="UState!=null and ''!=UState">
 			and u_state='0'
 		</if>

+ 55 - 45
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/WeixinUserImpl.java

@@ -441,45 +441,45 @@ public class WeixinUserImpl implements IWeixinUserService{
             List<String>idents=new ArrayList<>();
             if (list.size() > 0) {
                 for (SysUser ls : list) {
-           List<String> userDepart = sysUserDepartService.getUserDepart(ls.getId());
-            if (userDepart.size()>0){
-                for (String lst:userDepart){
-                    String userIdent = "0";
-                    if (!"".equals(ls.getUserIdentity())&&ls.getUserIdentity()!=null) {
-                        if (ls.getUserIdentity() == 2){
-                            userIdent = "1";
+                   List<String> userDepart = sysUserDepartService.getUserDepart(ls.getId());
+                    if (userDepart.size()>0){
+                        for (String lst:userDepart){
+                            String userIdent = "0";
+                            if (!"".equals(ls.getUserIdentity())&&ls.getUserIdentity()!=null) {
+                                if (ls.getUserIdentity() == 2){
+                                    userIdent = "1";
+                                }
+                            }
+                            idents.add(userIdent);
                         }
                     }
-                    idents.add(userIdent);
-                }
-            }
-            String postName = "";
-            if (ls.getPost() != null&&!ls.getPost().equals("")) {
-                postName = sysUserService.getPostName(ls.getPost());
-            }
-            params.put("userid", ls.getId());
-            params.put("name", ls.getRealname());
-            params.put("alias", ls.getEgName());
-            params.put("mobile", ls.getPhone());
-            params.put("department", userDepart);
-            params.put("position", postName);
-            params.put("gender", ls.getSex());
-            params.put("email", ls.getEmail());
-            params.put("biz_mail", ls.getEmail());
-            params.put("telephone", ls.getTelephone());
-            params.put("enable", ls.getStatus());
-            params.put("is_leader_in_dept", idents);
-            pm.put("value",ls.getWorkNo());
-            m.put("type",0);
-            m.put("name","工号");
-            m.put("text",pm);
-            m.put("value",ls.getWorkNo());
-            lstm.add(m);
-            ms.put("attrs",lstm);
-            params.put("extattr",ms);
-            String s = WeixinUser(params);
-            idents=new ArrayList<>();
-            sysUserService.updateTpUser(ls.getId());
+                    String postName = "";
+                    if (ls.getPost() != null&&!ls.getPost().equals("")) {
+                        postName = sysUserService.getPostName(ls.getPost());
+                    }
+                    params.put("userid", ls.getId());
+                    params.put("name", ls.getRealname());
+                    params.put("alias", ls.getEgName());
+                    params.put("mobile", ls.getPhone());
+                    params.put("department", userDepart);
+                    params.put("position", postName);
+                    params.put("gender", ls.getSex());
+                    params.put("email", ls.getEmail());
+                    params.put("biz_mail", ls.getEmail());
+                    params.put("telephone", ls.getTelephone());
+                    params.put("enable", ls.getStatus());
+                    params.put("is_leader_in_dept", idents);
+                    pm.put("value",ls.getWorkNo());
+                    m.put("type",0);
+                    m.put("name","工号");
+                    m.put("text",pm);
+                    m.put("value",ls.getWorkNo());
+                    lstm.add(m);
+                    ms.put("attrs",lstm);
+                    params.put("extattr",ms);
+                    String s = WeixinUser(params);
+                    idents=new ArrayList<>();
+                    sysUserService.updateTpUser(ls.getId());
                 }
             }
         }catch (Exception e){
@@ -719,7 +719,7 @@ public class WeixinUserImpl implements IWeixinUserService{
 
 
     public  int getYear(Date start,Date end,SysUser user){
-        int yearCount=0;
+        int yearCount=5;
         double seconds = Math.floor((end.getTime() - start.getTime()) / 1000);
         double minutes = Math.floor(seconds / 60);
         double hours = Math.floor(minutes / 60);
@@ -747,7 +747,9 @@ public class WeixinUserImpl implements IWeixinUserService{
 
 
     public  int getYearToWorkMoth(String workMoth){
-        int yearCount=0;
+
+        int yearCount=5;//默认5天年假
+
         int i = Integer.parseInt(workMoth);
         if (i>=12&&i<120){
             yearCount=5;
@@ -783,6 +785,14 @@ public class WeixinUserImpl implements IWeixinUserService{
                             BigDecimal bigDecimal = multiply.divide(new BigDecimal("365"),0, BigDecimal.ROUND_DOWN);
                             yearCounts+=Integer.parseInt(bigDecimal.toString());
                             yearCount+=Integer.parseInt(bigDecimal.toString());
+
+//                            if(yearCounts < 5){
+//                                yearCounts+=5;
+//                            }
+//                            if(yearCount < 5){
+//                                yearCount+=5;
+//                            }
+
                         }else {
                             yearCount += getYear(userByid.getEntryDate(), ls.getBeginDate(), userByid);
                             yearCounts += getYear(userByid.getEntryDate(), ls.getBeginDate(), userByid);
@@ -871,12 +881,12 @@ public class WeixinUserImpl implements IWeixinUserService{
             txCount=new  BigDecimal(stringObjectMap.get("count").toString()).subtract(new BigDecimal(stringObjectMap.get("sycount").toString())).toString();
 
         }
-        map.put("yearCount",yearCounts);
-        map.put("lsyYearCount",lsyYearCount);
-        map.put("syYearCount",syYearCount);
-        map.put("txCount",txCount);
-        map.put("vacationsBody",vacationsBody);
-        map.put("entry",userByid.getEntryDate());
+        map.put("yearCount",yearCounts);//当年年假总天数
+        map.put("lsyYearCount",lsyYearCount);//历年年假剩余天数
+        map.put("syYearCount",syYearCount);//剩余年假天数
+        map.put("txCount",txCount);//剩余可调休
+        map.put("vacationsBody",vacationsBody);//请假列表
+        map.put("entry",userByid.getEntryDate());//年度
         return map;
     }
 

+ 46 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/ExcelItemListener.java

@@ -0,0 +1,46 @@
+package org.jeecg.modules.viewClockIn;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.viewClockIn.entity.BdSalaryDetails;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class ExcelItemListener extends AnalysisEventListener<BdSalaryDetails> {
+
+    /**
+     * 批处理阈值
+     */
+    private static final int BATCH_COUNT = 5;
+    List<BdSalaryDetails> list = new ArrayList<>(BATCH_COUNT);
+
+    @Override
+    public void invoke(BdSalaryDetails excelItem, AnalysisContext analysisContext) {
+        log.info("解析到一条数据:{}", JSON.toJSONString(excelItem));
+        list.add(excelItem);
+        if (list.size() >= BATCH_COUNT) {
+            importItemInfo(list);
+            list.clear();
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        importItemInfo(list);
+        log.info("所有数据解析完成!");
+    }
+
+
+    public void importItemInfo(List<BdSalaryDetails> infoList) {
+        System.out.println(infoList);
+        //导入操作---新增公司和项目数据
+    }
+
+
+}

+ 498 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/controller/BdSalaryDetailsController.java

@@ -0,0 +1,498 @@
+package org.jeecg.modules.viewClockIn.controller;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import net.sf.json.JSONObject;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.geke.salary.mapper.SalaryCardMapper;
+import org.jeecg.modules.system.entity.SysPermissionDataRule;
+import org.jeecg.modules.viewClockIn.ExcelItemListener;
+import org.jeecg.modules.viewClockIn.entity.BdSalaryDetails;
+import org.jeecg.modules.viewClockIn.service.IBdSalaryDetailsService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 薪资明细
+ * @Author: jeecg-boot
+ * @Date:   2022-08-11
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="薪资明细")
+@RestController
+@RequestMapping("/viewClockIn/bdSalaryDetails")
+public class BdSalaryDetailsController extends JeecgController<BdSalaryDetails, IBdSalaryDetailsService> {
+	@Autowired
+	private IBdSalaryDetailsService bdSalaryDetailsService;
+	 @Autowired
+	 private SalaryCardMapper salaryCardMapper;
+
+	 @GetMapping(value = "/querySalary")
+	 public Map<String,Object>querySalary(String userId,String date){
+
+		 Map<String,Object>map=new HashMap<>();
+		 LambdaQueryWrapper<BdSalaryDetails> query = new LambdaQueryWrapper<BdSalaryDetails>();
+		 String userNo = salaryCardMapper.getUserNo(userId);
+		 query.eq(BdSalaryDetails::getPersonCode,userNo);
+		 query.eq(BdSalaryDetails::getMonth,date);
+		 List<BdSalaryDetails> list = bdSalaryDetailsService.list(query);
+		 map.put("data",list);
+
+		 return map;
+	 }
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param bdSalaryDetails
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "薪资明细-分页列表查询")
+	@ApiOperation(value="薪资明细-分页列表查询", notes="薪资明细-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(BdSalaryDetails bdSalaryDetails,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		if(bdSalaryDetails != null && StringUtils.isNotBlank(bdSalaryDetails.getHeadMonth())){
+			bdSalaryDetails.setMonth(bdSalaryDetails.getHeadMonth());
+		}else{
+			bdSalaryDetails.setMonth(DateUtils.getNYTime());
+		}
+		QueryWrapper<BdSalaryDetails> queryWrapper = QueryGenerator.initQueryWrapper(bdSalaryDetails, req.getParameterMap());
+		Page<BdSalaryDetails> page = new Page<BdSalaryDetails>(pageNo, pageSize);
+		IPage<BdSalaryDetails> pageList = bdSalaryDetailsService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 * 添加
+	 *
+	 * @param bdSalaryDetails
+	 * @return
+	 */
+	@AutoLog(value = "薪资明细-添加")
+	@ApiOperation(value="薪资明细-添加", notes="薪资明细-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody BdSalaryDetails bdSalaryDetails) {
+		bdSalaryDetailsService.save(bdSalaryDetails);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 * 编辑
+	 *
+	 * @param bdSalaryDetails
+	 * @return
+	 */
+	@AutoLog(value = "薪资明细-编辑")
+	@ApiOperation(value="薪资明细-编辑", notes="薪资明细-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody BdSalaryDetails bdSalaryDetails) {
+		bdSalaryDetailsService.updateById(bdSalaryDetails);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 * 通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "薪资明细-通过id删除")
+	@ApiOperation(value="薪资明细-通过id删除", notes="薪资明细-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		bdSalaryDetailsService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 * 批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "薪资明细-批量删除")
+	@ApiOperation(value="薪资明细-批量删除", notes="薪资明细-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.bdSalaryDetailsService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "薪资明细-通过id查询")
+	@ApiOperation(value="薪资明细-通过id查询", notes="薪资明细-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		BdSalaryDetails bdSalaryDetails = bdSalaryDetailsService.getById(id);
+		return Result.OK(bdSalaryDetails);
+	}
+
+  /**
+   * 导出excel
+   *
+   * @param request
+   * @param bdSalaryDetails
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, BdSalaryDetails bdSalaryDetails) {
+      return super.exportXls(request, bdSalaryDetails, BdSalaryDetails.class, "薪资明细");
+  }
+
+  /**
+   * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @AutoLog(value = "薪资管理-导入")
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+
+  	  String monthDate = "";
+	  MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+	  Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+	  for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+		  MultipartFile file = entity.getValue();// 获取上传文件对象
+		  try {
+			  ExcelReader reader = EasyExcel.read(file.getInputStream()).build();
+			  List<ReadSheet> sheets = reader.excelExecutor().sheetList();
+			  List<BdSalaryDetails> list = new ArrayList<>();
+			  for (int i = 0; i < sheets.size(); i++) {
+				  ReadSheet readSheet = sheets.get(i);
+
+				  System.out.println("表序号:" + readSheet.getSheetNo()+" =====  表名:" + readSheet.getSheetName());
+
+				  List<Object> objects = EasyExcel.read(file.getInputStream()).sheet(i).headRowNumber(0).doReadSync();
+//				  EasyExcel.read(file.getInputStream(),BdSalaryDetails.class,new ExcelItemListener()).sheet().doRead();
+				  if(readSheet.getSheetNo() == 0){
+					  Map<Integer,String> map1 = (Map<Integer, String>) objects.get(0);
+					  monthDate = map1.get(0);
+					  if(StringUtils.isBlank(monthDate)){
+						  return Result.error("文件导入失败:请填写薪资月份!");
+					  }else{
+						  SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+						  try {
+							  format.setLenient(false);
+							  format.parse(monthDate);
+						  }catch (Exception e){
+							  return Result.error("文件导入失败:请填写正确薪资月份!");
+						  }
+					  }
+				  }
+
+
+//				  System.out.println(objects);
+
+				  List<BdSalaryDetails> bdSalaryDetailsList = changeInfo(objects,monthDate,readSheet.getSheetNo(),readSheet.getSheetName());
+
+				  if(bdSalaryDetailsList.size() > 0){
+					  list.addAll(bdSalaryDetailsList);
+				  }
+//				  objects.forEach(System.out::println);
+			  }
+			  if(list.size() > 0){
+				  bdSalaryDetailsService.deleteDetails(list,monthDate);
+				  bdSalaryDetailsService.saveBatch(list);
+				  return Result.ok("文件导入成功!数据行数:" + list.size());
+			  }
+		  }catch (Exception e){
+			  System.out.println(e.getMessage());
+		  }
+
+	  }
+
+	  return Result.error("文件导入失败!");
+  }
+
+
+	 /**
+	  *
+	  * @param objects excel单sheet完整数据
+	  * @param monthDate 薪资月份
+	  * @param num sheet序号 0:正式工 1:天华外包 2:山人外包 3:仁联 4:安徽商曼
+	  * @return
+	  */
+  	public List<BdSalaryDetails> changeInfo(List<Object> objects,String monthDate,int num,String sheetName) {
+//		System.out.println(monthDate);
+	  	List<BdSalaryDetails> bdSalaryDetailsList = new ArrayList<>();
+		int i = 0;
+	  	for(Object o:objects){
+			i++;
+			if((num == 0 && i <= 3) || (num > 0 && i <= 1)){ // 过滤掉正式工的前三行,其他sheet第一行
+				continue;
+			}
+
+//			System.out.println("第"+num+"个sheet;第"+i+"行数据:");
+//			System.out.println(o);
+			Map<Integer,String> map1 = (Map<Integer, String>) o;
+			BdSalaryDetails bdSalaryDetails = new BdSalaryDetails();
+
+			if(map1 == null || StringUtils.isBlank(map1.get(0))){ //空行或者合计行过滤掉
+				continue;
+			}
+
+			if(num == 0){ //正式工
+				bdSalaryDetails = changeEntityZero(map1);
+			}else if(num == 1){//天华外包
+				bdSalaryDetails = changeEntityOne(map1);
+			}else if(num == 2){//山人外包
+				bdSalaryDetails = changeEntityTwo(map1);
+			}else if(num == 3){//仁联
+				bdSalaryDetails = changeEntityThree(map1);
+			}else if(num == 4){//安徽商曼
+				bdSalaryDetails = changeEntityFore(map1);
+			}else {
+				continue;
+			}
+			if(StringUtils.isBlank(map1.get(2))){
+				continue;
+			}
+			bdSalaryDetails.setMonth(monthDate);//月份
+			bdSalaryDetails.setType(sheetName);//类别
+			bdSalaryDetails.setPersonCode(map1.get(0));//工号
+			bdSalaryDetails.setPersonName(map1.get(1));//姓名
+			bdSalaryDetails.setWageBase(map1.get(2));//工资基数
+
+			bdSalaryDetailsList.add(bdSalaryDetails);
+		}
+
+  		return bdSalaryDetailsList;
+
+  	}
+
+	 /**
+	  * 正式工转换
+	  * @param map1
+	  * @return
+	  */
+  	public BdSalaryDetails changeEntityZero(Map<Integer,String> map1){
+
+		BdSalaryDetails bdSalaryDetails = new BdSalaryDetails();
+
+		bdSalaryDetails.setSocialBase(map1.get(3));//社保基数
+		bdSalaryDetails.setPensionGr(map1.get(4));//养老-个人
+		bdSalaryDetails.setMedicalGr(map1.get(5));//医疗-个人
+		bdSalaryDetails.setUnemploymentGr(map1.get(6));//失业-个人
+		bdSalaryDetails.setHousingGr(map1.get(7));//住房公积金-个人
+		bdSalaryDetails.setPensionGs(map1.get(8));//养老-公司
+		bdSalaryDetails.setMedicalGs(map1.get(9));//医疗-公司
+		bdSalaryDetails.setUnemploymentGs(map1.get(10));//失业-公司
+		bdSalaryDetails.setBirthGs(map1.get(11));//生育-公司
+		bdSalaryDetails.setInjuryGs(map1.get(12));//工伤-公司
+		bdSalaryDetails.setTotalGs(map1.get(13));//社保公司小计
+		bdSalaryDetails.setUnemployment(map1.get(14));//住房公积金
+		bdSalaryDetails.setWorkDay(map1.get(15));//本月考勤天数
+		bdSalaryDetails.setTemperature(map1.get(16));//高温费
+		bdSalaryDetails.setDuration(map1.get(17));//加班天数
+		bdSalaryDetails.setOvertimePay(map1.get(18));//加班费
+		bdSalaryDetails.setVacationThing(map1.get(19));//事假天数/旷工天数
+		bdSalaryDetails.setVacationThingPay(map1.get(20));//事假扣款/旷工扣款
+//		bdSalaryDetails.setVacationAway(map1.get(21));//旷工天数
+//		bdSalaryDetails.setVacationAwayPay(map1.get(22));//旷工扣款
+		bdSalaryDetails.setVacationSick(map1.get(21));//病假天数
+		bdSalaryDetails.setVacationSickPay(map1.get(22));//病假扣款
+		bdSalaryDetails.setMeritPay(map1.get(23));//绩效工资
+		bdSalaryDetails.setIncreaseBeforeTax(map1.get(24));//税前增项
+		bdSalaryDetails.setDeductionBeforeTax(map1.get(25));//税前减项
+		bdSalaryDetails.setRealWage(map1.get(26));//本月实际考勤工资
+		bdSalaryDetails.setPayableBeforeTax(map1.get(27));//税前应发
+		bdSalaryDetails.setIncomeTax(map1.get(28));//个税(起征点5K)
+		bdSalaryDetails.setPayableAfterTax(map1.get(29));//税后应发
+		bdSalaryDetails.setEnergySubsidy(map1.get(30));//税后补贴1(能源)
+		bdSalaryDetails.setRestaurantSubsidy(map1.get(31));//税后补贴2(餐饮)
+		bdSalaryDetails.setChildAllowance(map1.get(32));//独生子女津贴
+		bdSalaryDetails.setAfterTaxDeduction(map1.get(33));//税后扣款
+		bdSalaryDetails.setAfterTaxAdditions(map1.get(34));//税后增项
+		bdSalaryDetails.setAfterTaxReduce(map1.get(35));//税后减项
+		bdSalaryDetails.setActualOccurrence(map1.get(36));//实发
+		bdSalaryDetails.setIdentification(map1.get(37));//身份证
+		bdSalaryDetails.setCardNumber(map1.get(38));//身份证
+		bdSalaryDetails.setBank(map1.get(39));//开户行
+		bdSalaryDetails.setCellPhone(map1.get(40));//手机号
+		bdSalaryDetails.setSyFund(map1.get(41));//公积金账号
+		bdSalaryDetails.setEntryDate(map1.get(42));//入职日期
+
+		return bdSalaryDetails;
+	}
+
+	 /**
+	  * 天华外包转换
+	  * @param map1
+	  * @return
+	  */
+	 public BdSalaryDetails changeEntityOne(Map<Integer,String> map1) {
+
+		BdSalaryDetails bdSalaryDetails = new BdSalaryDetails();
+
+		bdSalaryDetails.setWorkDay(map1.get(3));//本月考勤天数
+		bdSalaryDetails.setDuration(map1.get(4));//加班天数
+		bdSalaryDetails.setOvertimePay(map1.get(5));//加班费
+		bdSalaryDetails.setVacationSick(map1.get(6));//病假天数、事假天数、旷工天数
+		bdSalaryDetails.setVacationSickPay(map1.get(7));//病假、事假、旷工扣款
+		bdSalaryDetails.setIncreaseBeforeTax(map1.get(8));//税前增项
+		bdSalaryDetails.setDeductionBeforeTax(map1.get(9));//税前减项
+		bdSalaryDetails.setMeritPay(map1.get(10));//绩效工资
+		bdSalaryDetails.setRealWage(map1.get(11));//本月实际考勤工资
+		bdSalaryDetails.setSocialSecurity(map1.get(12));//社保、残保、商保-外包
+		bdSalaryDetails.setServiceCharge(map1.get(13));//服务费14%-外包
+		bdSalaryDetails.setDormitoryExpenses(map1.get(14));//住宿费-外包
+		bdSalaryDetails.setActualOccurrence(map1.get(15));//实发
+		bdSalaryDetails.setTotalWb(map1.get(16));//合计-外包
+		bdSalaryDetails.setInvoiceTaxPoint(map1.get(17));//发票税点-外包
+		bdSalaryDetails.setTotalAll(map1.get(18));//总计-外包
+
+		return bdSalaryDetails;
+	 }
+
+
+	 /**
+	  * 山人外包转换
+	  * @param map1
+	  * @return
+	  */
+	 public BdSalaryDetails changeEntityTwo(Map<Integer,String> map1) {
+
+		 BdSalaryDetails bdSalaryDetails = new BdSalaryDetails();
+
+		 bdSalaryDetails.setWorkDay(map1.get(3));//本月考勤天数
+		 bdSalaryDetails.setDuration(map1.get(4));//加班天数
+		 bdSalaryDetails.setOvertimePay(map1.get(5));//加班费
+		 bdSalaryDetails.setVacationSick(map1.get(6));//病假天数、事假天数、旷工天数
+		 bdSalaryDetails.setVacationSickPay(map1.get(7));//病假、事假、旷工扣款
+		 bdSalaryDetails.setIncreaseBeforeTax(map1.get(8));//税前增项
+		 bdSalaryDetails.setDeductionBeforeTax(map1.get(9));//税前减项
+		 bdSalaryDetails.setMeritPay(map1.get(10));//绩效工资
+		 bdSalaryDetails.setRealWage(map1.get(11));//本月实际考勤工资
+		 bdSalaryDetails.setSocialSecurity(map1.get(12));//社保、残保、商保-外包
+		 bdSalaryDetails.setServiceCharge(map1.get(13));//服务费14%-外包
+		 bdSalaryDetails.setDormitoryExpenses(map1.get(14));//住宿费-外包
+		 bdSalaryDetails.setActualOccurrence(map1.get(15));//实发
+		 bdSalaryDetails.setTotalWb(map1.get(16));//合计-外包
+		 bdSalaryDetails.setInvoiceTaxPoint(map1.get(17));//发票税点-外包
+		 bdSalaryDetails.setTotalAll(map1.get(18));//总计-外包
+
+		 return bdSalaryDetails;
+	 }
+
+
+	 /**
+	  * 仁联外包转换
+	  * @param map1
+	  * @return
+	  */
+	 public BdSalaryDetails changeEntityThree(Map<Integer,String> map1) {
+
+		 BdSalaryDetails bdSalaryDetails = new BdSalaryDetails();
+
+		 bdSalaryDetails.setWorkDay(map1.get(3));//本月考勤天数
+		 bdSalaryDetails.setDuration(map1.get(4));//加班天数
+		 bdSalaryDetails.setOvertimePay(map1.get(5));//加班费
+		 bdSalaryDetails.setVacationSick(map1.get(6));//病假天数、事假天数、旷工天数
+		 bdSalaryDetails.setVacationSickPay(map1.get(7));//病假、事假、旷工扣款
+		 bdSalaryDetails.setIncreaseBeforeTax(map1.get(8));//税前增项
+		 bdSalaryDetails.setDeductionBeforeTax(map1.get(9));//税前减项
+		 bdSalaryDetails.setMeritPay(map1.get(10));//绩效工资
+		 bdSalaryDetails.setRealWage(map1.get(11));//本月实际考勤工资
+		 bdSalaryDetails.setServiceCharge(map1.get(12));//服务费(包含所有保险费用)
+		 bdSalaryDetails.setDormitoryExpenses(map1.get(13));//住宿费-外包
+		 bdSalaryDetails.setActualOccurrence(map1.get(14));//实发
+		 bdSalaryDetails.setTotalWb(map1.get(15));//合计-外包
+		 bdSalaryDetails.setInvoiceTaxPoint(map1.get(16));//发票税点-外包
+		 bdSalaryDetails.setTotalAll(map1.get(17));//总计-外包
+
+		 return bdSalaryDetails;
+	 }
+
+	 /**
+	  * 安徽商曼转换
+	  * @param map1
+	  * @return
+	  */
+	 public BdSalaryDetails changeEntityFore(Map<Integer,String> map1) {
+
+		 BdSalaryDetails bdSalaryDetails = new BdSalaryDetails();
+
+		 bdSalaryDetails.setWorkDay(map1.get(3));//本月考勤天数
+		 bdSalaryDetails.setDuration(map1.get(4));//加班天数
+		 bdSalaryDetails.setOvertimePay(map1.get(5));//加班费
+		 bdSalaryDetails.setVacationThing(map1.get(6));//事假天数、旷工天数
+		 bdSalaryDetails.setTemperature(map1.get(7));//高温费
+		 bdSalaryDetails.setVacationThingPay(map1.get(8));//事假、旷工扣款
+		 bdSalaryDetails.setVacationSick(map1.get(9));//病假天数
+		 bdSalaryDetails.setVacationSickPay(map1.get(10));//病假扣款
+		 bdSalaryDetails.setIncreaseBeforeTax(map1.get(11));//税前增项
+		 bdSalaryDetails.setDeductionBeforeTax(map1.get(12));//税前减项
+		 bdSalaryDetails.setDormitoryExpenses(map1.get(13));//住宿费-外包
+		 bdSalaryDetails.setActualOccurrence(map1.get(14));//实发
+		 bdSalaryDetails.setTaxation(map1.get(15));//税费-外包
+		 bdSalaryDetails.setSingleInjury(map1.get(16));//单工伤-外包
+		 bdSalaryDetails.setCommercialInsurance(map1.get(17));//商保-外包
+		 bdSalaryDetails.setServiceCharge(map1.get(18));//服务费
+		 bdSalaryDetails.setTotalWb(map1.get(19));//合计-外包
+
+		 return bdSalaryDetails;
+	 }
+
+	 public static void main(String[] args) {
+  		try {
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+			format.setLenient(false);
+			Date aa = format.parse("2022-16");
+			System.out.println(aa);
+		}catch (Exception e){
+			System.out.println("3242343");
+		}
+
+
+	 }
+}

+ 543 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/controller/SalaryExcelController.java

@@ -0,0 +1,543 @@
+package org.jeecg.modules.viewClockIn.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.metadata.data.CellData;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.write.handler.CellWriteHandler;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.util.PropertiesUtil;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.viewClockIn.entity.SalaryExcel;
+import org.jeecg.modules.viewClockIn.entity.SalaryDetail;
+import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+import org.jeecg.modules.viewClockIn.service.IbdClockinMonthService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.*;
+
+@Slf4j
+@Api(tags="薪资导出")
+@RestController
+@RequestMapping("/viewClockIn/salaryExcel")
+public class SalaryExcelController {
+
+    @Autowired
+    private IbdClockinMonthService bdClockinMonthService;
+
+    public int indexNum = 0;
+
+//
+//    public static TemplateExportParams getTemplateParams(String name){
+//        return new TemplateExportParams("D:\\"+name+".xlsx");
+//    }
+//
+//    public static Workbook putong() {
+//        TemplateExportParams params = getTemplateParams("test");
+//        Map<String, Object> map = new HashMap<String, Object>();
+//        map.put("title", "员工个人信息");
+//        map.put("name", "大熊");
+//        map.put("age", 22);
+//        map.put("company", "北京机器猫科技有限公司");
+//        map.put("date", "2020-07-13");
+//        Workbook workbook = ExcelExportUtil.exportExcel(params, map);
+//        return workbook;
+//    }
+//
+//    public static void main(String[] args) throws IOException {
+//        Workbook workbook = putong();
+//        File savefile = new File("D:\\");
+//        if (!savefile.exists()) {
+//            savefile.mkdirs();
+//        }
+//        FileOutputStream fos = new FileOutputStream("D:\\test1.xlsx");
+//        workbook.write(fos);
+//        fos.close();
+//    }
+
+    public static void main(String[] args) {
+
+        for (int i = 0; i < 10; i++) {
+
+            for (int j = 0; j < 5; j++) {
+                System.out.println("break");
+                break;
+
+            }
+            System.out.println(i);
+
+        }
+
+
+//        String result=getProjectConfig("name");
+//        String active=getProjectConfig("active");
+//        if(StringUtils.isNotBlank(active) && active.equals("dev")){
+//            System.out.println("123");
+//        }else{
+//            System.out.println("345");
+//        }
+//        System.out.println(result);
+//        System.out.println(active);
+    }
+    public static String getProjectConfig(String key) {
+        Properties pros = new Properties();
+        String value = "";
+        try {
+            pros.load(new InputStreamReader(PropertiesUtil.class.getResourceAsStream("/application.yml"), "UTF-8"));
+            value = pros.getProperty(key);
+        } catch (Exception e) {
+            return e.getMessage();
+        }
+        return value;
+    }
+
+    /**
+     * 导出
+     * @param response
+     * @param salaryExcel
+     * @throws IOException
+     */
+    @AutoLog(value = "薪资管理-薪资试算")
+    @RequestMapping(value = "/exportXls")
+    public void exportXls(HttpServletResponse response, SalaryExcel salaryExcel) throws IOException {
+        if(salaryExcel == null || StringUtils.isBlank(salaryExcel.getHeadMonth())){
+            salaryExcel.setHeadMonth(DateUtils.getNYTime());
+        }
+        indexNum = 0;
+        //这是我想要的数据集合
+        List<SalaryExcel> voList = bdClockinMonthService.selectSalaryExcel(salaryExcel);
+        List<SalaryDetail> voListb = bdClockinMonthService.selectSalaryDetail(salaryExcel);
+
+        List<SalaryDetail> voTh = new ArrayList<>();//天华
+        List<SalaryDetail> voSr = new ArrayList<>();//山人
+        List<SalaryDetail> voRl = new ArrayList<>();//仁联
+        List<SalaryDetail> voSm = new ArrayList<>();//安徽商曼
+
+        for(SalaryDetail o:voListb){
+            String epibolyType = o.getEpibolyType();
+            if(StringUtils.isBlank(epibolyType)){
+                continue;
+            }
+            if(epibolyType.equals("天华")){
+                voTh.add(o);
+            }
+            if(epibolyType.equals("山人")){
+                voSr.add(o);
+            }
+            if(epibolyType.equals("仁联")){
+                voRl.add(o);
+            }
+            if(epibolyType.equals("安徽商曼")){
+                voSm.add(o);
+            }
+        }
+
+        List<SalaryExcel> voListNew = new ArrayList<>();
+        String oldDept = "";
+
+        //正式工数据处理
+        for(SalaryExcel o:voList){
+
+            String shareDept = o.getShareDept();
+
+            if(StringUtils.isNotBlank(oldDept) && !oldDept.equals(shareDept)){
+                SalaryExcel entity = new SalaryExcel();
+                entity.setPersonName(shareDept);
+                voListNew.add(entity);
+            }
+            oldDept = shareDept;
+            voListNew.add(o);
+
+        }
+
+        //获取模板输入流
+        InputStream inStream = new FileInputStream("D:\\工资单明细.xlsx");
+        //这里就是模板的sheet索引
+        int cloneIndex = 1;
+        //通过poi创建表对象
+        XSSFWorkbook workbook = new XSSFWorkbook(inStream);
+        //遍历复制sheet
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        //给复制的sheet命名,这里取的就是map中的key
+        workbook.cloneSheet(cloneIndex, "天华外包");
+        //移除原始模板sheet
+        workbook.removeSheetAt(cloneIndex);
+        //给复制的sheet命名,这里取的就是map中的key
+        workbook.cloneSheet(cloneIndex, "山人外包");
+        //移除原始模板sheet
+        workbook.removeSheetAt(cloneIndex);
+        //给复制的sheet命名,这里取的就是map中的key
+        workbook.cloneSheet(cloneIndex, "仁联");
+        //移除原始模板sheet
+        workbook.removeSheetAt(cloneIndex);
+        //给复制的sheet命名,这里取的就是map中的key
+        workbook.cloneSheet(cloneIndex, "安徽商曼");
+        //移除原始模板sheet
+        workbook.removeSheetAt(cloneIndex);
+
+        XSSFSheet sheetS0 = (XSSFSheet) workbook.getSheet("正式工");
+        refreshSheet(sheetS0,salaryExcel.getHeadMonth());
+        XSSFSheet sheetS1 = (XSSFSheet) workbook.getSheet("天华外包");
+        refreshSheet(sheetS1,voTh,false);
+        XSSFSheet sheetS2 = (XSSFSheet) workbook.getSheet("山人外包");
+        refreshSheet(sheetS2,voSr,false);
+        XSSFSheet sheetS3 = (XSSFSheet) workbook.getSheet("仁联");
+        refreshSheet(sheetS3,voRl,false);
+        XSSFSheet sheetS4 = (XSSFSheet) workbook.getSheet("安徽商曼");
+        refreshSheet(sheetS4,voSm,true);
+
+        workbook.setForceFormulaRecalculation(true);// 执行公式(刷新公式)
+
+        //写到流
+        workbook.write(bos);
+        ServletOutputStream outputStream = response.getOutputStream();
+        //输出文件名
+        String filename ="D:\\工资单明细2.xlsx";
+        //创建模板输入流
+        ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());
+        //构造表格
+//        ExcelWriter excelWriter = EasyExcel.write(filename).withTemplate(is).build();
+        ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(is).build();
+        //填充配置, 这里的意义是给模板中的集合数据添加新行, 保证导出不会错乱
+        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
+
+        //填充汇总数据
+//      WriteSheet writeSheet1 = EasyExcel.writerSheet("正式工").build();
+        WriteSheet writeSheet1 = EasyExcel.writerSheet("正式工").registerWriteHandler(new CustomCellWriteHandler()).build();
+        excelWriter.fill(voListNew, fillConfig, writeSheet1).finish();
+
+        //获取sheet
+        WriteSheet writeSheet_th = EasyExcel.writerSheet("天华外包").build();
+        //填充集合数据 需要放集合
+        excelWriter.fill(voList, fillConfig, writeSheet_th);
+
+        //获取sheet
+        WriteSheet writeSheet_sr = EasyExcel.writerSheet("山人外包").build();
+        //填充集合数据 需要放集合
+        excelWriter.fill(voList, fillConfig, writeSheet_sr);
+
+        //获取sheet
+        WriteSheet writeSheet_rl = EasyExcel.writerSheet("仁联").build();
+        //填充集合数据 需要放集合
+        excelWriter.fill(voList, fillConfig, writeSheet_rl);
+
+        //获取sheet
+        WriteSheet writeSheet_ah = EasyExcel.writerSheet("安徽商曼").build();
+        //填充集合数据 需要放集合
+        excelWriter.fill(voList, fillConfig, writeSheet_ah);
+
+        //关流
+        excelWriter.finish();
+
+    }
+
+    // 获取准确的文件行数
+    public Sheet getAccuracyContextNum(Sheet sheet) {
+        // 删除空行
+        for (int i = 0; i <= sheet.getLastRowNum(); i++) {
+            Row row = sheet.getRow(i);
+            // 删除空行
+            if (this.isRowEmpty(row)) {
+                int lastRowNum = sheet.getLastRowNum();
+                if (i >= 0 && i < lastRowNum) {
+                    System.out.println("删除行:"+i);
+                    sheet.shiftRows(i, lastRowNum, -1);// 将行号为i+1一直到行号为lastRowNum的单元格全部上移一行,以便删除i行
+                }
+                if (i == lastRowNum) {
+                    if (row != null) {
+                        sheet.removeRow(row);
+                    }
+                }
+                i--;
+            }
+        }
+        return sheet;
+    }
+
+    // 判断行是否为空
+    public static boolean isRowEmpty(Row row) {
+        Cell cell = row.getCell(2);
+        if (cell != null && cell.getCellType() != CellType.BLANK) {  //此处判断得根据poi版本来修改相应判断
+             return false;
+        }
+        return true;
+//        for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
+//            Cell cell = row.getCell(1);
+//            if (cell != null && cell.getCellType() != CellType.BLANK) {  //此处判断得根据poi版本来修改相应判断
+//                return false;
+//            }
+//        }
+//        return true;
+    }
+
+
+    /**
+     * sheet1日期赋值
+     * @param sheet
+     */
+    protected static void refreshSheet(Sheet sheet,String headMonth) {
+        Row row = sheet.getRow(0);
+        Cell cell = row.getCell(0, Row.MissingCellPolicy.RETURN_NULL_AND_BLANK);
+        cell.setCellValue(headMonth);
+    }
+    /**
+     * sheet1刷新
+     * @param sheet
+     */
+    protected static void refreshSheet(Sheet sheet, List<SalaryDetail> vo,boolean bj) {
+
+//      List<Integer> delRow = new ArrayList<>();
+        for (int i = sheet.getFirstRowNum(), end = sheet.getLastRowNum(); i <= end; i++) {
+            if(i == 0){
+                continue;
+            }
+            String workNo = "";
+            SalaryDetail detail = new SalaryDetail();
+
+            Row row = sheet.getRow(i);
+
+            if (row != null) {
+//                for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
+                for (int j = row.getFirstCellNum(); j < 10; j++) { //第8列后的无需操作
+
+                    Cell cell = row.getCell(j, Row.MissingCellPolicy.RETURN_NULL_AND_BLANK);
+//                    System.out.println("进入第" + i + "行,第" + j + "列数据...");
+
+                    if(j == 0 && cell != null){
+                        workNo = cell.toString();
+                        for(SalaryDetail o:vo){
+                            String workNo1 = o.getPersonCode();
+                            if(workNo1.equals(workNo)){
+                                detail = o ;
+                                break;
+                            }
+                        }
+                    }
+
+                    if(StringUtils.isBlank(workNo) || detail == null || StringUtils.isBlank(detail.getPersonCode())){
+                        continue;
+                    }
+
+                    if(j == 2){
+                        cell.setCellValue(Double.valueOf(detail.getBasePay()));//基本工资
+                    }
+
+                    if(j == 3){
+                        cell.setCellValue(Double.valueOf(detail.getWorkDayReal()));//考勤天数
+                    }
+                    if(j == 4){
+                        cell.setCellValue(Double.valueOf(detail.getDuration()));//本月加班天数
+                    }
+                    if(!bj && j == 6){
+                        cell.setCellValue(Double.valueOf(detail.getHolidayTime()));//病假+事假+旷工天数(除安徽商曼外)
+                    }
+                    if(bj && j == 6){
+                        cell.setCellValue(Double.valueOf(detail.getHolidayTimeSj()));//事假+旷工天数(安徽商曼独有病假字段)
+                    }
+                    if(bj && j == 9){
+                        cell.setCellValue(Double.valueOf(detail.getHolidayTimeBj()));//病假(安徽商曼独有病假字段)
+                    }
+
+//                    if (cell != null && cell.toString().equals("植军发")) {
+//                        cell.setCellValue("11111");
+//
+//                    }
+//                    if (cell != null && cell.getCellTypeEnum() == CellType.FORMULA) {
+//                        row.getCell(j).setCellFormula(row.getCell(j).getCellFormula());
+//                        cell.setCellFormula(cell.getCellFormula());
+//                    }
+                }
+
+                if(StringUtils.isNotBlank(workNo) && (detail == null || StringUtils.isBlank(detail.getPersonCode()))){
+//                    delRow.add(i);
+                    Row row1 = sheet.getRow(i);
+                    for (int j = row1.getFirstCellNum()+2; j < row1.getLastCellNum(); j++) {
+                        Cell cell = row1.getCell(j);
+                        if(cell != null){
+//                            System.out.println(row1.getLastCellNum()+"======"+j);
+                            cell.removeFormula();
+                            cell.setCellValue("");//
+                        }
+                    }
+                    row1.setHeight((short)0);
+                }
+            }
+
+
+        }
+
+//        for (int i = 0; i < delRow.size(); i++) {
+//            Integer integer = delRow.get(i);
+//            Row row = sheetS1.getRow(integer);
+//            for (int j = row.getFirstCellNum()+2; j < row.getLastCellNum()-2; j++) {
+//                Cell cell = row.getCell(j);
+//                System.out.println(row.getLastCellNum()+"======"+j);
+//                cell.removeFormula();
+//                cell.setCellValue("");//
+//            }
+//            row.setHeight((short)0);
+//        }
+
+    }
+
+    //put键值对, 同时防止重名
+    public static void putIfContainsKey(Map sheetMap, String sheetName, Object data) {
+        if(sheetMap.containsKey(sheetName)){
+            putIfContainsKey(sheetMap, sheetName + "(1)", data);
+        }else {
+            sheetMap.put(sheetName, data);
+        }
+    }
+
+
+    class CustomCellWriteHandler implements CellWriteHandler
+    {
+
+        @Override
+        public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
+                                     Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead)
+        {
+
+        }
+
+        @Override
+        public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
+                                    Head head, Integer relativeRowIndex, Boolean isHead)
+        {
+
+        }
+
+        public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean)
+        {
+
+        }
+
+        @Override
+        public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
+                                     List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead)
+        {
+            int actualCellRowNum = cell.getRowIndex() + 1;
+            int columnIndex = cell.getColumnIndex() + 1;
+            // 这里可以对cell进行任何操作
+            if(cell.getRowIndex() >= 3){
+//                System.out.println("进入第" + actualCellRowNum + "行,第" + columnIndex + "列数据...");
+                if(cell.getCellType() == CellType.BLANK && columnIndex == 1){//空结束执行(分摊部门)
+                    indexNum = actualCellRowNum;
+                    return;
+                }
+                if(actualCellRowNum == indexNum){
+                    return;
+                }
+//                Workbook workbook = cell.getSheet().getWorkbook();
+//                CellStyle cellStyle = workbook.createCellStyle();
+//                cellStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.GREEN.getIndex());
+//                cellStyle.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.GREEN.getIndex());
+//                cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+//                cell.setCellStyle(cellStyle);
+                String info = changeInfo(actualCellRowNum,columnIndex);
+                if(StringUtils.isNotBlank(info)){
+                    cell.setCellFormula(info);
+                }
+
+            }
+
+        }
+    }
+
+    /**
+     * 转换类
+     * @param rowIndex 行数
+     * @param columnIndex 列数
+     * @return
+     */
+    public static String changeInfo(int rowIndex, int columnIndex){
+
+        String info = null;// 公式
+
+        switch (columnIndex) {//以第3行数据为例:
+            case 5:
+                info = "ROUND(D" + rowIndex +"*8%,1)";//社保(个人承担)养老 =ROUND(D3*8%,1)
+                break;
+            case 6:
+                info = "ROUND(D" + rowIndex +"*2%,1)";//社保(个人承担)医疗 =ROUND(D3*2%,1)
+                break;
+            case 7:
+                info = "ROUND(D" + rowIndex +"*0.5%,1)";//社保(个人承担)失业 =ROUND(D3*0.5%,1)
+                break;
+            case 8:
+                info = "ROUND(D" + rowIndex +"*5%,0)";//社保(个人承担)住房公积金 =ROUND(D3*5%,0)
+                break;
+            case 9:
+                info = "ROUND(D" + rowIndex +"*16%,1)";//社保(公司承担)养老 =ROUND(D3*16%,1)
+                break;
+            case 10:
+                info = "ROUND(D" + rowIndex +"*9.5%,1)";//社保(公司承担)医疗 =ROUND(D3*9.5%,1)
+                break;
+            case 11:
+                info = "ROUND(D" + rowIndex +"*0.5%,1)";//社保(公司承担)失业 =ROUND(D3*0.5%,1)
+                break;
+            case 12:
+                info = "ROUND(D" + rowIndex +"*1%,1)";//社保(公司承担)生育 =ROUND(D3*1%,1)
+                break;
+            case 13:
+                info = "ROUND(D" + rowIndex +"*0.16%,1)";//社保(公司承担)工伤 =ROUND(D3*0.16%,1)
+                break;
+            case 14:
+                info = "SUM(I" + rowIndex + ":M" + rowIndex + ")";//社保公司小计 =SUM(I3:M3)
+                break;
+            case 15:
+                info = "ROUND(D" + rowIndex +"*5%,0)";//住房公积金 =ROUND(D3*5%,0)
+                break;
+            case 17:
+                info = "300/21.75*P" + rowIndex;//高温费 =300/21.75*P3
+                break;
+            case 19:
+//                info = "C" + rowIndex + "/21.75*R" + rowIndex + "*2";//加班费 =C3/21.75*R3*2
+                info = "C" + rowIndex + "/21.75*R" + rowIndex;//加班费 =C3/21.75*R3
+                break;
+            case 21:
+                info = "C" + rowIndex + "/21.75*T" + rowIndex;//事假/旷工扣款 =C3/21.75*T3
+                break;
+            case 23:    //病假扣款 =(C3/21.75)*V3*(1-LOOKUP(DATEDIF(AQ3,TODAY()+1,"y"),{0;2;4;6;8},{0.6;0.7;0.8;0.9;1}))
+                info = "(C" + rowIndex + "/21.75)*V" + rowIndex + "*(1-LOOKUP(DATEDIF(AQ"+ rowIndex +",TODAY()+1,\"y\"),{0;2;4;6;8},{0.6;0.7;0.8;0.9;1}))";
+                break;
+            case 27:    //本月实际考勤工资 =ROUND(C3/21.75*P3-U3-W3+S3+X3+Q3,2)
+                info = "ROUND(C" + rowIndex + "/21.75*P" + rowIndex + "-U" + rowIndex + "-W" + rowIndex + "+S" + rowIndex + "+X" + rowIndex + "+Q" + rowIndex + ",2)";
+                break;
+            case 28:    //税前应发 =AA3-E3-F3-G3-H3
+                info = "AA" + rowIndex + "-E" + rowIndex + "-F" + rowIndex + "-G" + rowIndex + "-H" + rowIndex;
+                break;
+           case 30:    //税后应发 =ROUND(AA3-SUM(E3:H3)-AC3,2)
+                info = "ROUND(AA" + rowIndex + "-SUM(E" + rowIndex + ":H" + rowIndex + ")-AC" + rowIndex + ",2)";
+                break;
+           case 37:    //实发 =ROUND(AD3+AE3+AF3-AH3+AG3,2)
+                info = "ROUND(AD" + rowIndex + "+AE" + rowIndex + "+AF" + rowIndex + "-AH" + rowIndex + "+AG" + rowIndex + ",2)";
+                break;
+
+        }
+
+        return info;
+
+    }
+
+
+}

+ 26 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/controller/viewClockInController.java

@@ -97,6 +97,8 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 		String viewDates = jsonObject.getString("viewDate");
 		String username = jsonObject.getString("username");
 		String st = jsonObject.getString("st");
+		String reason = "";//忽略原因(仅忽略操作时使用)
+
 		String[] viewDateArr = viewDates.split(",");
 		if(StringUtil.isNullOrEmpty(viewDates)){
 			return Result.error("您没有选择任何数据");
@@ -110,7 +112,22 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 		if(!bdClockinMonthService.ifClose(viewDateArr[0])){
 			return Result.error("当前月份已关账,无法此操作");
 		}
-		SysUser sysUser = iSysUserService.getUserByName(username);
+		 if(st.equals("1")){
+			 st = "付薪";
+		 }else if(st.equals("2")){
+			 st = "累计调休";
+		 }else{
+			 st = "忽略";
+			 multiple = null;
+			 if(jsonObject.get("reason") != null){
+				 reason = jsonObject.getString("reason");
+			 }
+		 }
+		 LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		 for(String a:viewDateArr){
+			 viewClockInService.fuXinInfo(multiple,st,username,a,user.getUsername(),reason);
+		 }
+		/*SysUser sysUser = iSysUserService.getUserByName(username);
 		 if(sysUser != null){
 			 //正式工 101 实习生 103 劳务工	104 劳务外包5+2 105  劳务外包6+1 106  顾问 102
 			 //员工为正式,实习,劳务加班付薪时,如果没匹配到工资倍数,则默认两倍;匹配到工资倍数则按照倍数算薪;其他员工除非能匹配到工资倍数,否则不能付薪只能调休
@@ -150,7 +167,7 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 
 			 }
 
-		 }
+		 }*/
 
 		 return Result.OK("OK");
 	 }
@@ -170,6 +187,7 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 		 String st = jsonObject.get("st").toString();
 		 String w = jsonObject.get("w").toString();
 		 String userId = jsonObject.get("userId").toString();
+		 String reason = "";//忽略原因(仅忽略操作时使用)
 //		 SysUser sysUser = iSysUserService.getUserByName(userId);
 //		 if(sysUser != null){
 //			//正式工 101 实习生 103 劳务工	104 劳务外包5+2 105  劳务外包6+1 106  顾问 102
@@ -202,7 +220,11 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 		 }else if(st.equals("2")){
 			 st = "累计调休";
 		 }else{
+			 multiple = null;
 			 st = "忽略";
+			 if(jsonObject.get("reason") != null){
+				 reason = jsonObject.getString("reason");
+			 }
 		 }
 
 		 if(w.equals("1")){
@@ -213,7 +235,7 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 			 if(!bdClockinMonthService.ifClose(viewDate1)){
 				 return Result.error("当前月份已关账,无法此操作");
 			 }
-			 viewClockInService.updateOvertime(multiple,st,pkId,user.getUsername());
+			 viewClockInService.updateOvertime(multiple,st,pkId,user.getUsername(),reason);
 		 }else{
 
 			 String viewDate = jsonObject.get("viewDate").toString();
@@ -222,7 +244,7 @@ public class viewClockInController extends JeecgController<ViewClockIn, IviewClo
 			 if(!bdClockinMonthService.ifClose(viewDate)){
 				 return Result.error("当前月份已关账,无法此操作");
 			 }
-			 viewClockInService.fuXinInfo(multiple,st,userId,viewDate,user.getUsername());
+			 viewClockInService.fuXinInfo(multiple,st,userId,viewDate,user.getUsername(),reason);
 		 }
 
 		 return Result.OK("true");

+ 284 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/entity/BdSalaryDetails.java

@@ -0,0 +1,284 @@
+package org.jeecg.modules.viewClockIn.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: 薪资明细
+ * @Author: jeecg-boot
+ * @Date:   2022-08-11
+ * @Version: V1.0
+ */
+@Data
+@TableName("bd_salary_details")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="bd_salary_details对象", description="薪资明细")
+public class BdSalaryDetails {
+	@TableField(exist = false)
+	private String headMonth;//前台传入月份用于查询
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+	private String id;
+	/**类别*/
+	@Excel(name = "月份", width = 15)
+    @ApiModelProperty(value = "月份")
+	private String month;
+	/**类别*/
+	@Excel(name = "类别", width = 15)
+    @ApiModelProperty(value = "类别")
+	private String type;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @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;
+	/**修改人*/
+	@Excel(name = "修改人", width = 15)
+    @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;
+	/**人员id*/
+	@Excel(name = "人员id", width = 15)
+    @ApiModelProperty(value = "人员id")
+	private String personId;
+	/**人员姓名*/
+	@Excel(name = "人员姓名", width = 15)
+    @ApiModelProperty(value = "人员姓名")
+	private String personName;
+	/**人员工号*/
+	@Excel(name = "人员工号", width = 15)
+    @ApiModelProperty(value = "人员工号")
+	private String personCode;
+	/**工资基数*/
+	@Excel(name = "工资基数", width = 15)
+    @ApiModelProperty(value = "工资基数")
+	private String wageBase;
+	/**社保基数*/
+	@Excel(name = "社保基数", width = 15)
+    @ApiModelProperty(value = "社保基数")
+	private String socialBase;
+	/**养老-个人*/
+	@Excel(name = "养老-个人", width = 15)
+    @ApiModelProperty(value = "养老-个人")
+	private String pensionGr;
+	/**医疗-个人*/
+	@Excel(name = "医疗-个人", width = 15)
+    @ApiModelProperty(value = "医疗-个人")
+	private String medicalGr;
+	/**失业-个人*/
+	@Excel(name = "失业-个人", width = 15)
+    @ApiModelProperty(value = "失业-个人")
+	private String unemploymentGr;
+	/**住房公积金-个人*/
+	@Excel(name = "住房公积金-个人", width = 15)
+    @ApiModelProperty(value = "住房公积金-个人")
+	private String housingGr;
+	/**养老-公司*/
+	@Excel(name = "养老-公司", width = 15)
+    @ApiModelProperty(value = "养老-公司")
+	private String pensionGs;
+	/**医疗-公司*/
+	@Excel(name = "医疗-公司", width = 15)
+    @ApiModelProperty(value = "医疗-公司")
+	private String medicalGs;
+	/**失业-公司*/
+	@Excel(name = "失业-公司", width = 15)
+    @ApiModelProperty(value = "失业-公司")
+	private String unemploymentGs;
+	/**生育-公司*/
+	@Excel(name = "生育-公司", width = 15)
+    @ApiModelProperty(value = "生育-公司")
+	private String birthGs;
+	/**工伤-公司*/
+	@Excel(name = "工伤-公司", width = 15)
+    @ApiModelProperty(value = "工伤-公司")
+	private String injuryGs;
+	/**社保公司小计*/
+	@Excel(name = "社保公司小计", width = 15)
+    @ApiModelProperty(value = "社保公司小计")
+	private String totalGs;
+	/**住房公积金*/
+	@Excel(name = "住房公积金", width = 15)
+    @ApiModelProperty(value = "住房公积金")
+	private String unemployment;
+	/**本月考勤天数*/
+	@Excel(name = "本月考勤天数", width = 15)
+    @ApiModelProperty(value = "本月考勤天数")
+	private java.lang.String workDay;
+	/**高温费*/
+	@Excel(name = "高温费", width = 15)
+    @ApiModelProperty(value = "高温费")
+	private java.lang.String temperature;
+	/**加班天数*/
+	@Excel(name = "加班天数", width = 15)
+    @ApiModelProperty(value = "加班天数")
+	private java.lang.String duration;
+	/**加班费*/
+	@Excel(name = "加班费", width = 15)
+    @ApiModelProperty(value = "加班费")
+	private java.lang.String overtimePay;
+	/**事假天数*/
+	@Excel(name = "事假天数", width = 15)
+    @ApiModelProperty(value = "事假天数")
+	private java.lang.String vacationThing;
+	/**事假扣款*/
+	@Excel(name = "事假扣款", width = 15)
+    @ApiModelProperty(value = "事假扣款")
+	private java.lang.String vacationThingPay;
+	/**旷工天数*/
+	@Excel(name = "旷工天数", width = 15)
+    @ApiModelProperty(value = "旷工天数")
+	private java.lang.String vacationAway;
+	/**旷工扣款*/
+	@Excel(name = "旷工扣款", width = 15)
+    @ApiModelProperty(value = "旷工扣款")
+	private java.lang.String vacationAwayPay;
+	/**病假天数*/
+	@Excel(name = "病假天数", width = 15)
+    @ApiModelProperty(value = "病假天数")
+	private java.lang.String vacationSick;
+	/**病假扣款*/
+	@Excel(name = "病假扣款", width = 15)
+    @ApiModelProperty(value = "病假扣款")
+	private java.lang.String vacationSickPay;
+	/**绩效工资*/
+	@Excel(name = "绩效工资", width = 15)
+    @ApiModelProperty(value = "绩效工资")
+	private java.lang.String meritPay;
+	/**税前增项*/
+	@Excel(name = "税前增项", width = 15)
+    @ApiModelProperty(value = "税前增项")
+	private java.lang.String increaseBeforeTax;
+	/**税前减项*/
+	@Excel(name = "税前减项", width = 15)
+    @ApiModelProperty(value = "税前减项")
+	private java.lang.String deductionBeforeTax;
+	/**本月实际考勤工资*/
+	@Excel(name = "本月实际考勤工资", width = 15)
+    @ApiModelProperty(value = "本月实际考勤工资")
+	private java.lang.String realWage;
+	/**税前应发*/
+	@Excel(name = "税前应发", width = 15)
+    @ApiModelProperty(value = "税前应发")
+	private java.lang.String payableBeforeTax;
+	/**个税(起征点5K)*/
+	@Excel(name = "个税(起征点5K)", width = 15)
+    @ApiModelProperty(value = "个税(起征点5K)")
+	private java.lang.String incomeTax;
+	/**税后应发*/
+	@Excel(name = "税后应发", width = 15)
+    @ApiModelProperty(value = "税后应发")
+	private java.lang.String payableAfterTax;
+	/**税后补贴1(能源)*/
+	@Excel(name = "税后补贴1(能源)", width = 15)
+    @ApiModelProperty(value = "税后补贴1(能源)")
+	private java.lang.String energySubsidy;
+	/**税后补贴2(餐饮)*/
+	@Excel(name = "税后补贴2(餐饮)", width = 15)
+    @ApiModelProperty(value = "税后补贴2(餐饮)")
+	private java.lang.String restaurantSubsidy;
+	/**独生子女津贴*/
+	@Excel(name = "独生子女津贴", width = 15)
+    @ApiModelProperty(value = "独生子女津贴")
+	private java.lang.String childAllowance;
+	/**税后扣款*/
+	@Excel(name = "税后扣款", width = 15)
+    @ApiModelProperty(value = "税后扣款")
+	private java.lang.String afterTaxDeduction;
+	/**税后增项*/
+	@Excel(name = "税后增项", width = 15)
+    @ApiModelProperty(value = "税后增项")
+	private java.lang.String afterTaxAdditions;
+	/**税后减项*/
+	@Excel(name = "税后减项", width = 15)
+    @ApiModelProperty(value = "税后减项")
+	private java.lang.String afterTaxReduce;
+	/**实发*/
+	@Excel(name = "实发", width = 15)
+    @ApiModelProperty(value = "实发")
+	private java.lang.String actualOccurrence;
+	/**身份证*/
+	@Excel(name = "身份证", width = 15)
+    @ApiModelProperty(value = "身份证")
+	private java.lang.String identification;
+	/**卡号*/
+	@Excel(name = "卡号", width = 15)
+    @ApiModelProperty(value = "卡号")
+	private java.lang.String cardNumber;
+	/**开户行*/
+	@Excel(name = "开户行", width = 15)
+    @ApiModelProperty(value = "开户行")
+	private java.lang.String bank;
+	/**手机号*/
+	@Excel(name = "手机号", width = 15)
+    @ApiModelProperty(value = "手机号")
+	private java.lang.String cellPhone;
+	/**公积金账号*/
+	@Excel(name = "公积金账号", width = 15)
+    @ApiModelProperty(value = "公积金账号")
+	private java.lang.String syFund;
+	/**入职日期*/
+	@Excel(name = "入职日期", width = 15)
+    @ApiModelProperty(value = "入职日期")
+	private java.lang.String entryDate;
+	/**社保、残保、商保-外包*/
+	@Excel(name = "社保、残保、商保-外包", width = 15)
+    @ApiModelProperty(value = "社保、残保、商保-外包")
+	private java.lang.String socialSecurity;
+	/**服务费-外包*/
+	@Excel(name = "服务费-外包", width = 15)
+    @ApiModelProperty(value = "服务费-外包")
+	private java.lang.String serviceCharge;
+	/**住宿费-外包*/
+	@Excel(name = "住宿费-外包", width = 15)
+    @ApiModelProperty(value = "住宿费-外包")
+	private java.lang.String dormitoryExpenses;
+	/**合计-外包*/
+	@Excel(name = "合计-外包", width = 15)
+    @ApiModelProperty(value = "合计-外包")
+	private java.lang.String totalWb;
+	/**发票税点-外包*/
+	@Excel(name = "发票税点-外包", width = 15)
+    @ApiModelProperty(value = "发票税点-外包")
+	private java.lang.String invoiceTaxPoint;
+	/**总计-外包*/
+	@Excel(name = "总计-外包", width = 15)
+    @ApiModelProperty(value = "总计-外包")
+	private java.lang.String totalAll;
+	/**税费-外包*/
+	@Excel(name = "税费-外包", width = 15)
+    @ApiModelProperty(value = "税费-外包")
+	private java.lang.String taxation;
+	/**单工伤-外包*/
+	@Excel(name = "单工伤-外包", width = 15)
+    @ApiModelProperty(value = "单工伤-外包")
+	private java.lang.String singleInjury;
+	/**商保-外包*/
+	@Excel(name = "商保-外包", width = 15)
+    @ApiModelProperty(value = "商保-外包")
+	private java.lang.String commercialInsurance;
+}

+ 20 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/entity/SalaryDetail.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.viewClockIn.entity;
+
+import lombok.Data;
+
+@Data
+public class SalaryDetail {
+
+    private String personCode;//工号
+    private String personName;//姓名
+    private String deptName;//分摊部门
+    private String epibolyType;//外包类型
+    private String basePay;//基本工资
+    private String workDayReal;//本月考勤天数
+    private String duration;//本月加班天数
+    private String holidayTime;//病假/事假/旷工天数
+    private String holidayTimeSj;//事假/旷工天数
+    private String holidayTimeBj;//病假
+    private String shareDept;//分摊部门
+
+}

+ 35 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/entity/SalaryExcel.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.viewClockIn.entity;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class SalaryExcel {
+
+    private String headMonth;//月份(导出参数)
+    private String personCode;//工号
+    private String personName;//姓名
+    private String category;//外包5+2 105  外包6+1 106
+    private String deptName;//分摊部门
+    private String epibolyType;//外包类型
+    private String basePay;//基本工资
+    private String wagesBase;//社保基数
+    private String workDayReal;//本月考勤天数
+    private String duration;//本月加班天数
+    private String holidayTimeSj;//事假/旷工天数
+    private String holidayTimeBj;//病假天数
+    private String identityCode;//身份证号
+    private String cardNo;//卡号
+    private String bank;//开户行
+    private String cellPhone;//手机号
+    private String syFund;//公积金账号
+    private String entryDate;//入职日期
+    private String shareDept;//分摊部门
+
+    private String testPay;//个人养老金
+    private String testDate;//
+
+    private List<SalaryDetail> DetailList = Lists.newArrayList();
+
+}

+ 20 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/BdSalaryDetailsMapper.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.viewClockIn.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.viewClockIn.entity.BdSalaryDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+
+/**
+ * @Description: 薪资明细
+ * @Author: jeecg-boot
+ * @Date:   2022-08-11
+ * @Version: V1.0
+ */
+public interface BdSalaryDetailsMapper extends BaseMapper<BdSalaryDetails> {
+
+    int deleteDetails(@Param("list") List<BdSalaryDetails> list,@Param("month")String month);
+
+}

+ 14 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/bdClockinMonthMapper.java

@@ -9,9 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.geke.statutoryleave.entity.StatutoryLeave;
 import org.jeecg.modules.system.entity.SysUser;
-import org.jeecg.modules.viewClockIn.entity.BdClose;
-import org.jeecg.modules.viewClockIn.entity.ViewClockIn;
-import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+import org.jeecg.modules.viewClockIn.entity.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -141,4 +139,17 @@ public interface bdClockinMonthMapper extends BaseMapper<bdClockinMonth> {
      * @return
      */
     List<StatutoryLeave> getStatutoryLeave(String date);
+
+   /**
+     * 获取信息导出信息(非外包)
+     * @return
+     */
+    List<SalaryExcel> selectSalaryExcel(SalaryExcel date);
+
+   /**
+     * 获取信息导出信息(外包)
+     * @return
+     */
+    List<SalaryDetail> selectSalaryDetail(SalaryExcel date);
+
 }

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/viewClockInMapper.java

@@ -23,9 +23,9 @@ public interface viewClockInMapper extends BaseMapper<ViewClockIn> {
     public List<ViewClockIn> selectByPage(Page<ViewClockIn> page, @Param("map")Map<String,String> map);
 
     int fuXinInfo(@Param("multiple")String multiple,@Param("st")String st,@Param("userId")String userId,
-                  @Param("viewDate")String viewDate,@Param("username")String username);
+                  @Param("viewDate")String viewDate,@Param("username")String username,@Param("reason")String reason);
 
-    int updateOvertime(@Param("multiple")String multiple,@Param("st")String st,@Param("id")String id,@Param("username")String username);
+    int updateOvertime(@Param("multiple")String multiple,@Param("st")String st,@Param("id")String id,@Param("username")String username,@Param("reason")String reason);
 
     List<Map<String,Object>> selectByOvertime(@Param("monthTime") String monthTime,@Param("userList")List<String> userList);
 

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/xml/BdSalaryDetailsMapper.xml

@@ -0,0 +1,14 @@
+<?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.jeecg.modules.viewClockIn.mapper.BdSalaryDetailsMapper">
+
+    <update id="deleteDetails" parameterType="java.util.List">
+
+        delete from bd_salary_details where month =#{month} and person_code in(
+        <foreach collection="list" item="item" index="index" separator=",">
+            #{item.personCode}
+        </foreach>
+        )
+    </update>
+
+</mapper>

+ 68 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/mapper/xml/bdClockinMonthMapper.xml

@@ -11,20 +11,30 @@
                 else null
             end syInfo,
             a.*
-        from bd_clockin_month a
-        right join sys_user b on b.id = a.person_id
+        from sys_user b
+        left join bd_clockin_month a on b.id = a.person_id
+        <if test="map.months != null and map.months != ''">
+            and (a.month_time = #{map.months} or a.month_time is null)
+        </if>
+
         where b.del_flag='0'
+        and (b.employment_status = 10 or date_format(b.term_date,'%Y-%m') >= #{map.months} or b.term_date is null )
+        and (date_format(b.entry_date,'%Y-%m') &lt;= #{map.months} or b.entry_date is null )
+
         <if test="map.personName != null and map.personName != ''">
             and b.realname like concat('%',#{map.personName},'%')
         </if>
-        <if test="map.months != null and map.months != ''">
-            and (a.month_time = #{map.months} or a.month_time is null)
-        </if>
+
         <if test="map.personId != null and map.personId != ''">
             and b.username = #{map.personId}
         </if>
         <if test="map.syU8 != null and map.syU8 != ''">
-            and a.sy_u8 = #{map.syU8}
+            <if test="map.syU8 == '0'.toString()">
+                and a.sy_u8 = #{map.syU8}
+            </if>
+            <if test="map.syU8 == '1'.toString()">
+                and a.sy_u8 is null
+            </if>
         </if>
     </select>
 
@@ -39,8 +49,8 @@
                 #{item}
             </foreach>
             )
-        GROUP BY user_id,holiday_type
         </if>
+        GROUP BY user_id,holiday_type
     </select>
 
     <select id="selectOvertime" parameterType="java.util.List" resultType="Map">
@@ -384,4 +394,55 @@
         </if>
     </select>
 
+    <resultMap id="userMap" type="org.jeecg.modules.viewClockIn.entity.SalaryExcel">
+        <result column="bank_card" property="cardNo" typeHandler="org.jeecg.modules.system.util.AESEncryptHandler" />
+    </resultMap>
+
+    <select id="selectSalaryExcel" resultMap="userMap">
+
+        select a.person_code
+             ,a.person_name
+             ,a.base_pay
+             ,a.wages_base
+            <!-- ,a.work_day workDayReal-->
+             ,a.work_day_real workDayReal
+             ,a.duration/8 duration
+             ,a.holiday_time_bj
+             ,a.holiday_time_sj+missing_num holiday_time_sj
+             ,a.missing_num
+             ,b.sfz_code identityCode
+             ,b.bank_card
+             ,b.bank_addr bank
+             ,b.phone cellPhone
+             ,b.sy_fund syFund
+             ,DATE_FORMAT(b.entry_date,'%Y-%m-%d') entryDate
+             ,IFNULL(c.item_text,'无分摊部门') shareDept
+        from bd_clockin_month a
+        left join sys_user b on a.person_id = b.id
+        left join sys_dict_item c on a.depart_id = c.item_value and dict_id='1499344839838302210'
+        where b.del_flag='0' and a.category not in('105','106') and a.month_time = #{headMonth}
+        order by depart_id
+    </select>
+
+    <select id="selectSalaryDetail" resultType="org.jeecg.modules.viewClockIn.entity.SalaryDetail">
+        select a.person_code
+             ,a.person_name
+             ,b.category
+             ,b.epiboly_type
+             ,a.depart_id deptName
+             ,a.base_pay
+             ,a.work_day workDayReal
+             ,a.duration/8 duration
+             ,a.holiday_time_sj + missing_num + holiday_time_bj holiday_time
+             ,a.holiday_time_bj
+             ,a.holiday_time_sj + missing_num holiday_time_sj
+             ,a.missing_num
+             ,IFNULL(c.item_text,'无分摊部门') shareDept
+        from bd_clockin_month a
+        left join sys_user b on a.person_id = b.id
+        left join sys_dict_item c on a.depart_id = c.item_value and dict_id='1499344839838302210'
+        where b.del_flag='0' and a.category in('105','106') and a.month_time = #{headMonth}
+
+    </select>
+
 </mapper>

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

@@ -209,12 +209,12 @@
        <!-- update geke_attendance set set_info = #{st}
         where user_id =#{userId} and date_format( user_date, '%Y-%m-%d' ) = #{viewDate} -->
 
-        update bd_work_overtime set multiple = #{multiple},set_info = #{st},update_name = #{username},update_date = NOW()
+        update bd_work_overtime set reason = #{reason}, multiple = #{multiple},set_info = #{st},update_name = #{username},update_date = NOW()
         where person =#{userId} and date_format( begin_date, '%Y-%m-%d' ) = #{viewDate}
     </update>
 
     <update id="updateOvertime">
-        update bd_work_overtime set multiple = #{multiple}, set_info = #{st},update_name = #{username},update_date = NOW()
+        update bd_work_overtime set multiple = #{multiple}, reason = #{reason}, set_info = #{st},update_name = #{username},update_date = NOW()
         where id =#{id}
     </update>
 

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/IBdSalaryDetailsService.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.viewClockIn.service;
+
+import org.jeecg.modules.viewClockIn.entity.BdSalaryDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+
+import java.util.List;
+
+/**
+ * @Description: 薪资明细
+ * @Author: jeecg-boot
+ * @Date:   2022-08-11
+ * @Version: V1.0
+ */
+public interface IBdSalaryDetailsService extends IService<BdSalaryDetails> {
+    int deleteDetails(List<BdSalaryDetails> list,String month);
+}

+ 13 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/IbdClockinMonthService.java

@@ -4,9 +4,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.viewClockIn.entity.BdClose;
-import org.jeecg.modules.viewClockIn.entity.ViewClockIn;
-import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+import org.jeecg.modules.viewClockIn.entity.*;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
@@ -63,6 +61,18 @@ public interface IbdClockinMonthService extends IService<bdClockinMonth> {
      */
     public List<BdClose> selectClose();
 
+    /**
+     * 获取信息导出信息(非外包)
+     * @return
+     */
+    public List<SalaryExcel> selectSalaryExcel(SalaryExcel date);
+
+    /**
+     * 获取信息导出信息(外包)
+     * @return
+     */
+    public List<SalaryDetail> selectSalaryDetail(SalaryExcel date);
+
     /**
      * 是否已关账
      * @param viewDate

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/IviewClockInService.java

@@ -26,8 +26,8 @@ public interface IviewClockInService extends IService<ViewClockIn> {
      */
     Page<ViewClockIn> selectByPage(Page<ViewClockIn> page, Map<String,String> map);
 
-    public int fuXinInfo(String multiple, String st, String userId, String viewDate,String username);
-    public int updateOvertime(String multiple,String st,String id,String username);
+    public int fuXinInfo(String multiple, String st, String userId, String viewDate,String username,String reason);
+    public int updateOvertime(String multiple,String st,String id,String username,String reason);
     public Page<ViewClockIn> selectPage(Page<ViewClockIn> page);
     public List<ExportClockInfo> exportErrotInfo(String realname , String headMonth, String userType);
     public List<ExcelOvertime> exportAllOvertime(Map<String,String> map);

+ 31 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/impl/BdSalaryDetailsServiceImpl.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.viewClockIn.service.impl;
+
+import org.jeecg.modules.viewClockIn.entity.BdSalaryDetails;
+import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+import org.jeecg.modules.viewClockIn.mapper.BdSalaryDetailsMapper;
+import org.jeecg.modules.viewClockIn.mapper.bdClockinMonthMapper;
+import org.jeecg.modules.viewClockIn.service.IBdSalaryDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.List;
+
+/**
+ * @Description: 薪资明细
+ * @Author: jeecg-boot
+ * @Date:   2022-08-11
+ * @Version: V1.0
+ */
+@Service
+public class BdSalaryDetailsServiceImpl extends ServiceImpl<BdSalaryDetailsMapper, BdSalaryDetails> implements IBdSalaryDetailsService {
+
+    @Autowired
+    private BdSalaryDetailsMapper bdSalaryDetailsMapper;
+
+    public int deleteDetails(List<BdSalaryDetails> list,String month){
+        return bdSalaryDetailsMapper.deleteDetails(list,month);
+    }
+
+}

+ 24 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/impl/bdClockinMonthServiceImpl.java

@@ -9,9 +9,7 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.util.UUIDGenerator;
 import org.jeecg.modules.geke.statutoryleave.entity.StatutoryLeave;
 import org.jeecg.modules.system.entity.SysUser;
-import org.jeecg.modules.viewClockIn.entity.BdClose;
-import org.jeecg.modules.viewClockIn.entity.ViewClockIn;
-import org.jeecg.modules.viewClockIn.entity.bdClockinMonth;
+import org.jeecg.modules.viewClockIn.entity.*;
 import org.jeecg.modules.viewClockIn.mapper.bdClockinMonthMapper;
 import org.jeecg.modules.viewClockIn.mapper.viewClockInMapper;
 import org.jeecg.modules.viewClockIn.service.IbdClockinMonthService;
@@ -136,8 +134,14 @@ public class bdClockinMonthServiceImpl extends ServiceImpl<bdClockinMonthMapper,
                 days = new BigDecimal("26");
             }
 
+            //实际考勤天数(小于0时给与0)
             BigDecimal b = days.subtract(new BigDecimal(String.valueOf(allNum)));
-            o.setWorkDayReal(b.toString());
+            if(b.compareTo(BigDecimal.ZERO) < 0){
+                o.setWorkDayReal("0");
+            }else{
+                o.setWorkDayReal(b.toString());
+            }
+
             String[] date = nowDate.split("-");
             o.setMonthTime(nowDate);
             o.setYears(date[0]);
@@ -295,6 +299,22 @@ public class bdClockinMonthServiceImpl extends ServiceImpl<bdClockinMonthMapper,
         return clockinMonthMapper.selectClose();
     }
 
+    /**
+     * 获取信息导出信息(非外包)
+     * @return
+     */
+    public List<SalaryExcel> selectSalaryExcel(SalaryExcel date){
+        return clockinMonthMapper.selectSalaryExcel(date);
+    }
+
+    /**
+     * 获取信息导出信息(外包)
+     * @return
+     */
+    public List<SalaryDetail> selectSalaryDetail(SalaryExcel date){
+        return clockinMonthMapper.selectSalaryDetail(date);
+    }
+
     /**
      * 定时任务,同步月报至u8
      * @param nowDate

+ 4 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/viewClockIn/service/impl/viewClockInServiceImpl.java

@@ -36,12 +36,12 @@ public class viewClockInServiceImpl extends ServiceImpl<viewClockInMapper, ViewC
         return viewClockInMapper1.selectByOvertime(monthTime,userList);
     }
 
-    public int fuXinInfo(String multiple,String st,String userId,String viewDate,String username) {
-        return viewClockInMapper1.fuXinInfo(multiple,st,userId,viewDate,username);
+    public int fuXinInfo(String multiple,String st,String userId,String viewDate,String username,String reason) {
+        return viewClockInMapper1.fuXinInfo(multiple,st,userId,viewDate,username,reason);
     }
 
-    public int updateOvertime(String multiple,String st,String id,String username) {
-        return viewClockInMapper1.updateOvertime(multiple,st,id,username);
+    public int updateOvertime(String multiple,String st,String id,String username,String reason) {
+        return viewClockInMapper1.updateOvertime(multiple,st,id,username,reason);
     }
 
 //    @Override

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/workOvertime/entity/workOvertime.java

@@ -96,6 +96,7 @@ public class workOvertime {
 	private String setInfo;//薪资处理方式
 	private String updateName;//薪资处理人
 	private String multiple;//倍数
+	private String reason;//忽略原因
 
 	/**备用虚拟字段**/
 	private transient  String deptCode;

+ 8 - 4
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -144,10 +144,14 @@ spring:
           password: 123@qaz
           # 多数据源配置
           #multi-datasource1:
-          url: jdbc:mysql://127.0.0.1:3306/geke?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: root
-          driver-class-name: com.mysql.cj.jdbc.Driver
+#          url: jdbc:mysql://127.0.0.1:3306/geke?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
+#          username: root
+#          password: root
+#          driver-class-name: com.mysql.cj.jdbc.Driver
+          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+          url: jdbc:sqlserver://106.15.32.1:1433;SelectMethod=cursor;DatabaseName=UFDATA
+          username: cuidian
+          password: cuidianUFdata
   #redis 配置
   redis:
     database: 0

+ 9 - 9
jeecg-boot-module-system/src/main/resources/application-prod.yml

@@ -118,7 +118,7 @@ spring:
         timeBetweenEvictionRunsMillis: 60000
         # 配置一个连接在池中最小生存的时间,单位是毫秒
         minEvictableIdleTimeMillis: 300000
-        validationQuery: SELECT 1 FROM DUAL
+        validationQuery: SELECT 1
         testWhileIdle: true
         testOnBorrow: false
         testOnReturn: false
@@ -136,11 +136,11 @@ spring:
           password: 123456
           driver-class-name: com.mysql.cj.jdbc.Driver
           # 多数据源配置
-        multi-datasource1:
-          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-          url: jdbc:sqlserver://192.168.8.243:1433;SelectMethod=cursor;DatabaseName=UFDATA_997_2022
-          username: sa
-          password: QAZWSXqazwsx123
+#        multi-datasource1:
+#          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+#          url: jdbc:sqlserver://192.168.8.243:1433;SelectMethod=cursor;DatabaseName=UFDATA_997_2022
+#          username: sa
+#          password: QAZWSXqazwsx123
   #redis 配置
   redis:
     database: 0
@@ -173,12 +173,12 @@ mybatis-plus:
 #jeecg专用配置
 jeecg :
   # 本地:local\Minio:minio\阿里云:alioss
-  uploadType: alioss
+  uploadType: local
   path :
     #文件上传根目录 设置
-    upload: /opt/jeecg-boot/upload
+    upload: D://opt//upFiles
     #webapp文件路径
-    webapp: /opt/jeecg-boot/webapp
+    webapp: D://opt//webapp
   shiro:
      excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**
   #阿里云oss存储配置

+ 8 - 8
jeecg-boot-module-system/src/main/resources/application-test.yml

@@ -118,7 +118,7 @@ spring:
         timeBetweenEvictionRunsMillis: 60000
         # 配置一个连接在池中最小生存的时间,单位是毫秒
         minEvictableIdleTimeMillis: 300000
-        validationQuery: SELECT 1 FROM DUAL
+        validationQuery: SELECT 1
         testWhileIdle: true
         testOnBorrow: false
         testOnReturn: false
@@ -131,20 +131,20 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
           master:
-            url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
+            url: jdbc:mysql://10.187.201.33:3306/geke_test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
             username: root
             password: root
             driver-class-name: com.mysql.cj.jdbc.Driver
           # 多数据源配置
-          #multi-datasource1:
-            #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
-            #username: root
-            #password: root
-            #driver-class-name: com.mysql.cj.jdbc.Driver
+#          multi-datasource1:
+#            driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+#            url: jdbc:sqlserver://192.168.8.243:1433;SelectMethod=cursor;DatabaseName=UFDATA_997_2022
+#            username: sa
+#            password: QAZWSXqazwsx123
   #redis 配置
   redis:
      database: 0
-     host: 192.168.1.199
+     host: 127.0.0.1
      lettuce:
        pool:
          max-active: 8   #最大连接数据库连接数,设 0 为没有限制

+ 1 - 1
jeecg-boot-module-system/src/main/resources/jeecg/jeecg_config.properties

@@ -1,7 +1,7 @@
 #code_generate_project_path
 project_path=E:\\GEKE_SERVICE\\jeecg-boot-module-demo
 #bussi_package[User defined]
-bussi_package=org.jeecg.modules.geke
+bussi_package=org.jeecg.modules
 
 
 #default code path