工人导入,排序, 报名列表排序,拿出小程序配置到配置文件

This commit is contained in:
mx 2024-11-13 11:24:27 +08:00
parent d897c32a8f
commit 76f68055a9
19 changed files with 482 additions and 45 deletions

View File

@ -1,5 +1,6 @@
package com.staffing.web.controller.custom; package com.staffing.web.controller.custom;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -8,6 +9,7 @@ import javax.servlet.http.HttpServletResponse;
import com.staffing.common.core.domain.entity.SysUser; import com.staffing.common.core.domain.entity.SysUser;
import com.staffing.common.core.redis.RedisCache; import com.staffing.common.core.redis.RedisCache;
import com.staffing.common.utils.SecurityUtils; import com.staffing.common.utils.SecurityUtils;
import com.staffing.custom.domain.StEmployeeFundRecord;
import com.staffing.custom.domain.StTask; import com.staffing.custom.domain.StTask;
import com.staffing.custom.domain.StTaskSign; import com.staffing.custom.domain.StTaskSign;
import com.staffing.custom.mapper.StTaskMapper; import com.staffing.custom.mapper.StTaskMapper;
@ -31,6 +33,7 @@ import com.staffing.custom.domain.StEmployee;
import com.staffing.custom.service.IStEmployeeService; import com.staffing.custom.service.IStEmployeeService;
import com.staffing.common.utils.poi.ExcelUtil; import com.staffing.common.utils.poi.ExcelUtil;
import com.staffing.common.core.page.TableDataInfo; import com.staffing.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import static com.staffing.common.constant.Constants.DELETED_USER_KEY; import static com.staffing.common.constant.Constants.DELETED_USER_KEY;
import static com.staffing.common.utils.PageUtils.startPage; import static com.staffing.common.utils.PageUtils.startPage;
@ -75,9 +78,80 @@ public class StEmployeeController extends BaseController
public void export(HttpServletResponse response, StEmployee stEmployee) public void export(HttpServletResponse response, StEmployee stEmployee)
{ {
List<StEmployee> list = stEmployeeService.selectStEmployeeList(stEmployee); List<StEmployee> list = stEmployeeService.selectStEmployeeList(stEmployee);
for (StEmployee employee : list) {
employee.setEmployeeTypeStr(employee.getEmployeeType() == 0 ? "灵活用工" : "固定长期用工");
if (employee.getSex() == null){
employee.setSexStr("未知");
}else{
if (employee.getSex() == 0){
employee.setSexStr("");
}else if (employee.getSex() == 1){
employee.setSexStr("");
}else if (employee.getSex() == 2){
employee.setSexStr("未知");
}
}
}
ExcelUtil<StEmployee> util = new ExcelUtil<StEmployee>(StEmployee.class); ExcelUtil<StEmployee> util = new ExcelUtil<StEmployee>(StEmployee.class);
util.exportExcel(response, list, "员工数据"); util.exportExcel(response, list, "员工数据");
} }
/**
* 导出员工列表
*/
@PreAuthorize("@ss.hasPermi('employee:export')")
@Log(title = "员工", businessType = BusinessType.EXPORT)
@PostMapping("/exportMoudle")
public void exportMoudle(HttpServletResponse response, StEmployee stEmployee)
{
List<StEmployee> list = new ArrayList<>();
StEmployee stEmployee1 = new StEmployee();
stEmployee1.setSexStr("");
stEmployee1.setRealName("张三");
stEmployee1.setPhone("1313131313");
stEmployee1.setIdCard("11011001111111111");
stEmployee1.setNation("");
stEmployee1.setAge(18);
stEmployee1.setUseUnit("xxx单位");
stEmployee1.setInterviewDate(new Date());
stEmployee1.setEntryDate(new Date());
stEmployee1.setSupplier("xxx供应商");
stEmployee1.setEmployeePrice("10");
stEmployee1.setSupplierPrice("20");
stEmployee1.setEmployeeTypeStr("灵活用工");
StEmployee stEmployee2 = new StEmployee();
stEmployee2.setSexStr("");
stEmployee2.setRealName("张三");
stEmployee2.setPhone("1313131313");
stEmployee2.setIdCard("11011001111111111");
stEmployee2.setNation("");
stEmployee2.setAge(18);
stEmployee2.setUseUnit("xxx单位");
stEmployee2.setInterviewDate(new Date());
stEmployee2.setEntryDate(new Date());
stEmployee2.setSupplier("xxx供应商");
stEmployee2.setEmployeePrice("10");
stEmployee2.setSupplierPrice("20");
stEmployee2.setEmployeeTypeStr("固定长期用工");
list.add(stEmployee1);
list.add(stEmployee2);
ExcelUtil<StEmployee> util = new ExcelUtil<StEmployee>(StEmployee.class);
util.exportExcel(response, list, "员工数据");
}
@Log(title = "员工导入", businessType = BusinessType.IMPORT)
@PreAuthorize("@ss.hasPermi('employee:export')")
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file) throws Exception
{
ExcelUtil<StEmployee> util = new ExcelUtil<>(StEmployee.class);
List<StEmployee> records = util.importExcel(file.getInputStream());
String message = stEmployeeService.importStEmployee(records);
return success(message);
}
/** /**
* 获取员工详细信息 * 获取员工详细信息
@ -102,6 +176,7 @@ public class StEmployeeController extends BaseController
return error("手机号已存在"); return error("手机号已存在");
} }
stEmployee.setUpdateTime(new Date()); stEmployee.setUpdateTime(new Date());
stEmployee.setCreateTime(new Date());
return toAjax(stEmployeeService.insertStEmployee(stEmployee)); return toAjax(stEmployeeService.insertStEmployee(stEmployee));
} }

View File

@ -6,6 +6,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.staffing.common.config.EnvConfig;
import com.staffing.common.utils.MinioUtil; import com.staffing.common.utils.MinioUtil;
import com.staffing.common.utils.QRCodeGenerator; import com.staffing.common.utils.QRCodeGenerator;
import com.staffing.custom.domain.StTaskSign; import com.staffing.custom.domain.StTaskSign;
@ -38,6 +39,9 @@ public class StTaskController extends BaseController
@Autowired @Autowired
private MinioUtil minioUtil; private MinioUtil minioUtil;
@Autowired
EnvConfig envConfig;
/** /**
* 查询任务列表 * 查询任务列表
*/ */
@ -52,7 +56,7 @@ public class StTaskController extends BaseController
continue; continue;
} }
task.setCodePic("https://www.tulkj.cn/file/yonggong/" + task.getCodePic()); task.setCodePic(envConfig.getPicPrefix() + task.getCodePic());
// task.setCodePic(minioUtil.getObjectURL( "yonggong", task.getCodePic())); // task.setCodePic(minioUtil.getObjectURL( "yonggong", task.getCodePic()));
} }
return getDataTable(list); return getDataTable(list);
@ -95,19 +99,7 @@ public class StTaskController extends BaseController
stTask.setCreateTime(new Date()); stTask.setCreateTime(new Date());
stTask.setUpdateTime(new Date()); stTask.setUpdateTime(new Date());
stTaskService.insertStTask(stTask); stTaskService.insertStTask(stTask);
stTaskService.generatePrCode(stTask);
String url = "http://www.tulkj.cn:81/index.html?id=" + stTask.getId();
InputStream inputStream = QRCodeGenerator.generateQRCodeImage(url, 500, 500);
String fileName = System.currentTimeMillis() + stTask.getId() + ".png";
try {
ObjectWriteResponse objectWriteResponse = minioUtil.putObject("yonggong"
, fileName, inputStream, inputStream.available(), "image/png");
} catch (Exception e) {
logger.error("minioUtil.putObject error", e);
}
stTask.setCodePic(fileName);
return toAjax(stTaskService.updateStTask(stTask)); return toAjax(stTaskService.updateStTask(stTask));
} }

View File

@ -169,3 +169,14 @@ minio:
port: 9000 port: 9000
access-key: root access-key: root
secret-key: root_6688 secret-key: root_6688
env:
genPicCodeUrl: http://yg.pusonggroup.com:81/index.html?id=
picPrefix: https://www.tulkj.cn/file/yonggong/
appId: wx7bc7df6eb945a84f
secret: 60dc8f7e8c850dfbe0170acefa48070a
#env:
# genPicCodeUrl: http://www.tulkj.cn:81/index.html?id=
# picPrefix: https://www.tulkj.cn/file/yonggong/
# appId: wx26e952dad7a8aae5
# secret: 60a85e94d921a385ce52faaaed4a103b

View File

@ -0,0 +1,65 @@
package com.staffing.common.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 读取项目相关配置
*
* @author staffing
*/
@Component
@ConfigurationProperties(prefix = "env")
public class EnvConfig {
/**
* 二维码 地址内容
*/
private String genPicCodeUrl;
/**
* minio 文件前缀
*/
private String picPrefix;
/**
* 小程序
*/
private String appId;
/**
* 小程序
*/
private String secret;
public String getGenPicCodeUrl() {
return genPicCodeUrl;
}
public void setGenPicCodeUrl(String genPicCodeUrl) {
this.genPicCodeUrl = genPicCodeUrl;
}
public String getPicPrefix() {
return picPrefix;
}
public void setPicPrefix(String picPrefix) {
this.picPrefix = picPrefix;
}
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
}

View File

@ -30,6 +30,52 @@ public class StaffingConfig
/** 验证码类型 */ /** 验证码类型 */
private static String captchaType; private static String captchaType;
/** 二维码 地址内容 */
private String genPicCodeUrl;
/** minio 文件前缀 */
private static String picPrefix;
/** 小程序 */
private static boolean appId;
/** 小程序 */
private static String secret;
public String getGenPicCodeUrl() {
return genPicCodeUrl;
}
public void setGenPicCodeUrl(String genPicCodeUrl) {
this.genPicCodeUrl = genPicCodeUrl;
}
public static String getPicPrefix() {
return picPrefix;
}
public static void setPicPrefix(String picPrefix) {
StaffingConfig.picPrefix = picPrefix;
}
public static boolean isAppId() {
return appId;
}
public static void setAppId(boolean appId) {
StaffingConfig.appId = appId;
}
public static String getSecret() {
return secret;
}
public static void setSecret(String secret) {
StaffingConfig.secret = secret;
}
public String getName() public String getName()
{ {
return name; return name;

View File

@ -1,28 +1,34 @@
package com.staffing.common.utils; package com.staffing.common.utils;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.staffing.common.config.EnvConfig;
import com.staffing.common.core.domain.WxLogin; import com.staffing.common.core.domain.WxLogin;
import com.staffing.common.core.domain.WxPhone; import com.staffing.common.core.domain.WxPhone;
import com.staffing.common.core.domain.WxToken; import com.staffing.common.core.domain.WxToken;
import com.staffing.common.utils.http.HttpUtils; import com.staffing.common.utils.http.HttpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Component
public class WxUtil { public class WxUtil {
// public final static String appId = "wx7bc7df6eb945a84f";//ps // public final static String appId = "wx7bc7df6eb945a84f";//ps
// public final static String secret = "60dc8f7e8c850dfbe0170acefa48070a";//ps // public final static String secret = "60dc8f7e8c850dfbe0170acefa48070a";//ps
public final static String appId = "wx26e952dad7a8aae5"; // public final static String appId = "wx26e952dad7a8aae5";
public final static String secret = "60a85e94d921a385ce52faaaed4a103b"; // public final static String secret = "60a85e94d921a385ce52faaaed4a103b";
private static WxToken wxToken = null; private WxToken wxToken = null;
@Autowired
EnvConfig envConfig;
public static synchronized WxToken getAccessToken(){ public synchronized WxToken getAccessToken(){
if (wxToken == null || System.currentTimeMillis() > wxToken.getExpiresTime() - 60000){ if (wxToken == null || System.currentTimeMillis() > wxToken.getExpiresTime() - 60000){
Map<String, String > getParam = new HashMap<>(); Map<String, String > getParam = new HashMap<>();
getParam.put("grant_type", "client_credential"); getParam.put("grant_type", "client_credential");
getParam.put("appid", appId); getParam.put("appid", envConfig.getAppId());
getParam.put("secret", secret); getParam.put("secret", envConfig.getSecret());
String resJson = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token", HttpUtils.getParam(getParam)); String resJson = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token", HttpUtils.getParam(getParam));
wxToken = JSONObject.parseObject(resJson, WxToken.class); wxToken = JSONObject.parseObject(resJson, WxToken.class);
wxToken.setExpiresTime(wxToken.getExpires_in() * 1000 + System.currentTimeMillis()); wxToken.setExpiresTime(wxToken.getExpires_in() * 1000 + System.currentTimeMillis());
@ -36,7 +42,7 @@ public class WxUtil {
* @param openId 微信用户唯一表示 * @param openId 微信用户唯一表示
* @return * @return
*/ */
public static WxPhone getPhoneNumber(String code, String openId){ public WxPhone getPhoneNumber(String code, String openId){
Map<String, String > getParam = new HashMap<>(); Map<String, String > getParam = new HashMap<>();
getParam.put("code", code); getParam.put("code", code);
getParam.put("openid", openId); getParam.put("openid", openId);
@ -50,11 +56,11 @@ public class WxUtil {
* wx 登录 获取openId * wx 登录 获取openId
* @return * @return
*/ */
public static WxLogin login(String code){ public WxLogin login(String code){
Map<String, String > getParam = new HashMap<>(); Map<String, String > getParam = new HashMap<>();
getParam.put("grant_type", "authorization_code"); getParam.put("grant_type", "authorization_code");
getParam.put("appid", appId); getParam.put("appid", envConfig.getAppId());
getParam.put("secret", secret); getParam.put("secret", envConfig.getSecret());
getParam.put("js_code", code); getParam.put("js_code", code);
String url = "https://api.weixin.qq.com/sns/jscode2session"; String url = "https://api.weixin.qq.com/sns/jscode2session";
String resJson = HttpUtils.sendGet(url, HttpUtils.getParam(getParam)); String resJson = HttpUtils.sendGet(url, HttpUtils.getParam(getParam));

View File

@ -39,6 +39,7 @@ import com.staffing.system.service.ISysConfigService;
import com.staffing.system.service.ISysUserService; import com.staffing.system.service.ISysUserService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
/** /**
@ -67,6 +68,9 @@ public class SysLoginService
private IStEmployeeService stEmployeeService; private IStEmployeeService stEmployeeService;
@Autowired @Autowired
private SysPermissionService permissionService; private SysPermissionService permissionService;
@Autowired
private WxUtil wxUtil;
/** /**
* 登录验证 * 登录验证
* *
@ -142,8 +146,8 @@ public class SysLoginService
LoginUser loginUser = null; LoginUser loginUser = null;
try try
{ {
WxLogin login = WxUtil.login(loginCode); WxLogin login = wxUtil.login(loginCode);
WxPhone wxPhone = WxUtil.getPhoneNumber(phoneCode, login.getOpenid()); WxPhone wxPhone = wxUtil.getPhoneNumber(phoneCode, login.getOpenid());
String phoneNumber = wxPhone.getPhoneNumber(); String phoneNumber = wxPhone.getPhoneNumber();
StEmployee stEmployee = stEmployeeService.selectStEmployeeByPhone(phoneNumber); StEmployee stEmployee = stEmployeeService.selectStEmployeeByPhone(phoneNumber);
@ -152,6 +156,8 @@ public class SysLoginService
stEmployee.setPhone(phoneNumber); stEmployee.setPhone(phoneNumber);
stEmployee.setOpenId(login.getOpenid()); stEmployee.setOpenId(login.getOpenid());
stEmployee.setRealName("微信用户"); stEmployee.setRealName("微信用户");
stEmployee.setCreateTime(new Date());
stEmployee.setUpdateTime(new Date());
stEmployeeService.insertStEmployee(stEmployee); stEmployeeService.insertStEmployee(stEmployee);
} }
if (stEmployee.getOpenId() == null){ if (stEmployee.getOpenId() == null){
@ -192,8 +198,8 @@ public class SysLoginService
LoginUser loginUser = null; LoginUser loginUser = null;
try try
{ {
WxLogin login = WxUtil.login(loginCode); WxLogin login = wxUtil.login(loginCode);
WxPhone wxPhone = WxUtil.getPhoneNumber(phoneCode, login.getOpenid()); WxPhone wxPhone = wxUtil.getPhoneNumber(phoneCode, login.getOpenid());
String phoneNumber = wxPhone.getPhoneNumber(); String phoneNumber = wxPhone.getPhoneNumber();
SysUser user = userService.selectUserByPhone(phoneNumber); SysUser user = userService.selectUserByPhone(phoneNumber);

View File

@ -34,6 +34,8 @@ public class StEmployee extends BaseEntity
/** 性别 */ /** 性别 */
@Excel(name = "性别") @Excel(name = "性别")
private String sexStr;
private Integer sex; private Integer sex;
/** 民族 */ /** 民族 */
@ -42,7 +44,7 @@ public class StEmployee extends BaseEntity
/** 年龄 */ /** 年龄 */
@Excel(name = "年龄") @Excel(name = "年龄")
private Long age; private Integer age;
/** 用工单位 */ /** 用工单位 */
@Excel(name = "用工单位") @Excel(name = "用工单位")
@ -70,12 +72,31 @@ public class StEmployee extends BaseEntity
@Excel(name = "供应商单价") @Excel(name = "供应商单价")
private String supplierPrice; private String supplierPrice;
/** 用工类型 */
private Integer employeeType;
/** 用工类型 */ /** 用工类型 */
@Excel(name = "用工类型") @Excel(name = "用工类型")
private Long employeeType; private String employeeTypeStr;
private String openId; private String openId;
public String getSexStr() {
return sexStr;
}
public void setSexStr(String sexStr) {
this.sexStr = sexStr;
}
public String getEmployeeTypeStr() {
return employeeTypeStr;
}
public void setEmployeeTypeStr(String employeeTypeStr) {
this.employeeTypeStr = employeeTypeStr;
}
public String getOpenId() { public String getOpenId() {
return openId; return openId;
} }
@ -138,12 +159,12 @@ public class StEmployee extends BaseEntity
{ {
return nation; return nation;
} }
public void setAge(Long age) public void setAge(Integer age)
{ {
this.age = age; this.age = age;
} }
public Long getAge() public Integer getAge()
{ {
return age; return age;
} }
@ -201,12 +222,12 @@ public class StEmployee extends BaseEntity
{ {
return supplierPrice; return supplierPrice;
} }
public void setEmployeeType(Long employeeType) public void setEmployeeType(Integer employeeType)
{ {
this.employeeType = employeeType; this.employeeType = employeeType;
} }
public Long getEmployeeType() public Integer getEmployeeType()
{ {
return employeeType; return employeeType;
} }

View File

@ -40,6 +40,8 @@ public interface StEmployeeMapper
*/ */
public int insertStEmployee(StEmployee stEmployee); public int insertStEmployee(StEmployee stEmployee);
public int save(StEmployee stEmployee);
/** /**
* 修改员工 * 修改员工
* *

View File

@ -61,4 +61,6 @@ public interface IStEmployeeService
* @return 结果 * @return 结果
*/ */
public int deleteStEmployeeById(Long id); public int deleteStEmployeeById(Long id);
String importStEmployee(List<StEmployee> stEmployees);
} }

View File

@ -61,6 +61,8 @@ public interface IStTaskService
*/ */
public int updateStTask(StTask stTask); public int updateStTask(StTask stTask);
public int updateStTask(StTask stTask, boolean syncRelationsTabel); public int updateStTask(StTask stTask, boolean syncRelationsTabel);
void generatePrCode(StTask stTask);
/** /**
* 批量删除任务 * 批量删除任务
* *

View File

@ -1,15 +1,21 @@
package com.staffing.custom.service.impl; package com.staffing.custom.service.impl;
import java.util.Date;
import java.util.List; import java.util.List;
import com.staffing.common.core.domain.entity.SysUser; import com.staffing.common.core.domain.entity.SysUser;
import com.staffing.common.exception.ServiceException;
import com.staffing.common.utils.DateUtils; import com.staffing.common.utils.DateUtils;
import com.staffing.common.utils.SecurityUtils; import com.staffing.common.utils.SecurityUtils;
import com.staffing.common.utils.StringUtils;
import com.staffing.custom.domain.StEmployeeFundRecord; import com.staffing.custom.domain.StEmployeeFundRecord;
import com.staffing.custom.domain.StTaskSign; import com.staffing.custom.domain.StTaskSign;
import com.staffing.custom.mapper.StEmployeeFundRecordMapper; import com.staffing.custom.mapper.StEmployeeFundRecordMapper;
import com.staffing.custom.mapper.StTaskSignMapper; import com.staffing.custom.mapper.StTaskSignMapper;
import com.staffing.custom.service.IStTaskService; import com.staffing.custom.service.IStTaskService;
import com.staffing.system.service.impl.SysUserServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -37,6 +43,9 @@ public class StEmployeeServiceImpl implements IStEmployeeService
@Autowired @Autowired
private IStTaskService stTaskService; private IStTaskService stTaskService;
private static final Logger log = LoggerFactory.getLogger(StEmployeeServiceImpl.class);
/** /**
* 查询员工 * 查询员工
* *
@ -126,4 +135,55 @@ public class StEmployeeServiceImpl implements IStEmployeeService
{ {
return stEmployeeMapper.deleteStEmployeeById(id); return stEmployeeMapper.deleteStEmployeeById(id);
} }
@Override
public String importStEmployee(List<StEmployee> stEmployees)
{
if (StringUtils.isNull(stEmployees) || stEmployees.size() == 0)
{
throw new ServiceException("导入数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
for (StEmployee record : stEmployees)
{
try
{
record.setCreateTime(new Date());
record.setEmployeeType("灵活用工".equals(record.getEmployeeTypeStr()) ? 0 : 1);
if ("".equals(record.getSexStr())){
record.setSex(0);
}else if ("".equals(record.getSexStr())) {
record.setSex(1);
}else{
record.setSex(2);
}
int i = stEmployeeMapper.save(record);
if (i > 0){
successNum++;
successMsg.append("<br/>" + successNum + "、数据导入修改成功");
}
}
catch (Exception e)
{
failureNum++;
String msg = "<br/>" + failureNum + "、数据导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0)
{
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
}
else
{
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
} }

View File

@ -8,6 +8,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.staffing.common.config.EnvConfig;
import com.staffing.common.utils.DateUtils; import com.staffing.common.utils.DateUtils;
import com.staffing.common.utils.MinioUtil; import com.staffing.common.utils.MinioUtil;
import com.staffing.common.utils.QRCodeGenerator; import com.staffing.common.utils.QRCodeGenerator;
@ -52,6 +53,9 @@ public class StTaskServiceImpl implements IStTaskService
@Autowired @Autowired
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Autowired
EnvConfig envConfig;
protected final Logger logger = LoggerFactory.getLogger(StTaskServiceImpl.class); protected final Logger logger = LoggerFactory.getLogger(StTaskServiceImpl.class);
@Override @Override
@ -128,6 +132,7 @@ public class StTaskServiceImpl implements IStTaskService
for (StTask task : stTasks) { for (StTask task : stTasks) {
if (task.getCodePic() == null){ if (task.getCodePic() == null){
generatePrCode(task); generatePrCode(task);
updateStTask(stTask);
} }
} }
@ -355,8 +360,9 @@ public class StTaskServiceImpl implements IStTaskService
} }
} }
public int generatePrCode(StTask stTask){ public void generatePrCode(StTask stTask){
String url = "http://www.tulkj.cn:81/index.html?id=" + stTask.getId(); String url = envConfig.getGenPicCodeUrl() + stTask.getId();
// String url = "http://www.tulkj.cn:81/index.html?id=" + stTask.getId();
InputStream inputStream = QRCodeGenerator.generateQRCodeImage(url, 500, 500); InputStream inputStream = QRCodeGenerator.generateQRCodeImage(url, 500, 500);
String fileName = System.currentTimeMillis() + stTask.getId() + ".png"; String fileName = System.currentTimeMillis() + stTask.getId() + ".png";
try { try {
@ -367,8 +373,6 @@ public class StTaskServiceImpl implements IStTaskService
} }
stTask.setCodePic(fileName); stTask.setCodePic(fileName);
return updateStTask(stTask);
} }
/** /**

View File

@ -95,6 +95,7 @@ public class StTaskSignServiceImpl implements IStTaskSignService
taskSign.setDayPrice(stTask.getDayPrice()); taskSign.setDayPrice(stTask.getDayPrice());
taskSign.setEmployeeName(taskSign.getEmployeeName()); taskSign.setEmployeeName(taskSign.getEmployeeName());
taskSign.setStatus(-1);//未点名 taskSign.setStatus(-1);//未点名
taskSign.setCreateTime(new Date());
return AjaxResult.success(insertStTaskSign(taskSign)); return AjaxResult.success(insertStTaskSign(taskSign));
}finally { }finally {
// 锁被持有 // 锁被持有

View File

@ -36,6 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="idCard != null and idCard != ''"> and id_card like concat('%', #{idCard}, '%')</if> <if test="idCard != null and idCard != ''"> and id_card like concat('%', #{idCard}, '%')</if>
<if test="employeeType != null "> and employee_type = #{employeeType}</if> <if test="employeeType != null "> and employee_type = #{employeeType}</if>
</where> </where>
order by create_time desc , update_time desc
</select> </select>
<select id="selectStEmployeeById" parameterType="Long" resultMap="StEmployeeResult"> <select id="selectStEmployeeById" parameterType="Long" resultMap="StEmployeeResult">
@ -102,6 +103,63 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</trim> </trim>
</insert> </insert>
<insert id="save" parameterType="StEmployee" useGeneratedKeys="true" keyProperty="id">
insert into st_employee
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="realName != null and realName != ''">real_name,</if>
<if test="phone != null and phone != ''">phone,</if>
<if test="idCard != null and idCard != ''">id_card,</if>
<if test="sex != null">sex,</if>
<if test="nation != null">nation,</if>
<if test="age != null">age,</if>
<if test="useUnit != null">use_unit,</if>
<if test="interviewDate != null">interview_date,</if>
<if test="entryDate != null">entry_date,</if>
<if test="supplier != null">supplier,</if>
<if test="employeePrice != null">employee_price,</if>
<if test="supplierPrice != null">supplier_price,</if>
<if test="employeeType != null">employee_type,</if>
<if test="updateTime != null">update_time,</if>
<if test="createTime != null">create_time,</if>
<if test="openId != null">open_id,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="realName != null and realName != ''">#{realName},</if>
<if test="phone != null and phone != ''">#{phone},</if>
<if test="idCard != null and idCard != ''">#{idCard},</if>
<if test="sex != null">#{sex},</if>
<if test="nation != null">#{nation},</if>
<if test="age != null">#{age},</if>
<if test="useUnit != null">#{useUnit},</if>
<if test="interviewDate != null">#{interviewDate},</if>
<if test="entryDate != null">#{entryDate},</if>
<if test="supplier != null">#{supplier},</if>
<if test="employeePrice != null">#{employeePrice},</if>
<if test="supplierPrice != null">#{supplierPrice},</if>
<if test="employeeType != null">#{employeeType},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="createTime != null">#{createTime},</if>
<if test="openId != null">#{openId},</if>
</trim>
ON DUPLICATE KEY UPDATE
<trim prefix="" suffixOverrides=",">
<if test="realName != null and realName != ''">real_name = #{realName},</if>
<if test="idCard != null and idCard != ''">id_card = #{idCard},</if>
<if test="sex != null">sex = #{sex},</if>
nation = #{nation},
age = #{age},
interview_date = #{interviewDate},
entry_date = #{entryDate},
use_unit = #{useUnit},
supplier = #{supplier},
employee_price = #{employeePrice},
supplier_price = #{supplierPrice},
<if test="employeeType != null">employee_type = #{employeeType},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
</insert>
<update id="updateStEmployeeOrNull" parameterType="StEmployee"> <update id="updateStEmployeeOrNull" parameterType="StEmployee">
update st_employee update st_employee
<trim prefix="SET" suffixOverrides=","> <trim prefix="SET" suffixOverrides=",">

View File

@ -29,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="employeeId != null "> and employee_id = #{employeeId}</if> <if test="employeeId != null "> and employee_id = #{employeeId}</if>
<if test="status != null "> and status = #{status}</if> <if test="status != null "> and status = #{status}</if>
</where> </where>
order by create_time desc
</select> </select>
<select id="selectStTaskSignById" parameterType="Long" resultMap="StTaskSignResult"> <select id="selectStTaskSignById" parameterType="Long" resultMap="StTaskSignResult">
@ -68,6 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="idCard != null">id_card,</if> <if test="idCard != null">id_card,</if>
<if test="status != null">status,</if> <if test="status != null">status,</if>
<if test="remark != null">remark,</if> <if test="remark != null">remark,</if>
<if test="createTime != null">create_time,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="taskId != null">#{taskId},</if> <if test="taskId != null">#{taskId},</if>
@ -80,6 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="idCard != null">#{idCard},</if> <if test="idCard != null">#{idCard},</if>
<if test="status != null">#{status},</if> <if test="status != null">#{status},</if>
<if test="remark != null">#{remark},</if> <if test="remark != null">#{remark},</if>
<if test="createTime != null">#{createTime},</if>
</trim> </trim>
</insert> </insert>

View File

@ -1,11 +1,11 @@
<template> <template>
<div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> <div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<transition name="sidebarLogoFade"> <transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="">
<img v-if="logo" :src="logo" class="sidebar-logo" /> <img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
</router-link> </router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/"> <router-link v-else key="expand" class="sidebar-logo-link" to="">
<!-- <img v-if="logo" :src="logo" class="sidebar-logo" />--> <!-- <img v-if="logo" :src="logo" class="sidebar-logo" />-->
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
</router-link> </router-link>

View File

@ -84,6 +84,16 @@
<!-- v-hasPermi="['employee:employee:export']"--> <!-- v-hasPermi="['employee:employee:export']"-->
<!-- >导出</el-button>--> <!-- >导出</el-button>-->
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-upload"
size="mini"
@click="handleImport"
v-hasPermi="['fund:fund:import']"
>导入</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -227,12 +237,43 @@
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<!-- <div class="el-upload__tip" slot="tip">-->
<!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的流水数据-->
<!-- </div>-->
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="handleExportMoudle">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { listEmployee, getEmployee, delEmployee, addEmployee, updateEmployee } from "@/api/employee/employee"; import { listEmployee, getEmployee, delEmployee, addEmployee, updateEmployee } from "@/api/employee/employee";
import { getToken } from "@/utils/auth";
export default { export default {
name: "Employee", name: "Employee",
dicts: ['use_type', 'sys_user_sex'], dicts: ['use_type', 'sys_user_sex'],
@ -265,6 +306,7 @@ export default {
idCard: null, idCard: null,
employeeType: null, employeeType: null,
}, },
phoneInputDisable: true,
// //
form: {}, form: {},
// //
@ -281,8 +323,23 @@ export default {
employeeType: [ employeeType: [
{ required: true, message: "用工类型不能为空", trigger: "change" } { required: true, message: "用工类型不能为空", trigger: "change" }
], ],
phoneInputDisable: true,
} },
//
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/employee/employee/importData"
},
}; };
}, },
created() { created() {
@ -401,6 +458,32 @@ export default {
this.download('employee/employee/export', { this.download('employee/employee/export', {
...this.queryParams ...this.queryParams
}, `employee_${new Date().getTime()}.xlsx`) }, `employee_${new Date().getTime()}.xlsx`)
},
handleExportMoudle() {
this.download('employee/employee/exportMoudle', {
...this.queryParams
}, `employee_${new Date().getTime()}.xlsx`)
},
handleImport() {
this.upload.title = "用户导入";
this.upload.open = true;
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
} }
} }
}; };

View File

@ -285,7 +285,7 @@
<!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的流水数据--> <!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的流水数据-->
<!-- </div>--> <!-- </div>-->
<span>仅允许导入xlsxlsx格式文件</span> <span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link> <!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>-->
</div> </div>
</el-upload> </el-upload>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">