提交代码

dev_xd
姜玉琦 2024-12-20 20:24:08 +08:00
parent 26a1acb114
commit 497177d521
54 changed files with 2094 additions and 1136 deletions

102
pom.xml
View File

@ -42,9 +42,10 @@
<hutool.version>5.8.20</hutool.version>
<aspectjweaver.version>1.9.1</aspectjweaver.version>
<lowagie.version>2.1.7</lowagie.version>
<poi-tl.version>1.6.0-beta1</poi-tl.version>
<poi-tl.version>1.12.0</poi-tl.version>
<lowagie.iTextAsian.version>1.0</lowagie.iTextAsian.version>
<itextpdf.version>5.5.13</itextpdf.version>
<aspose.words.version>15.8.0</aspose.words.version>
</properties>
<!-- 依赖声明 -->
@ -125,6 +126,57 @@
<version>${poi.version}</version>
</dependency>
<!-- 生成pdf-->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>${lowagie.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>${lowagie.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>iTextAsian</artifactId>
<version>${lowagie.iTextAsian.version}</version>
</dependency>
<!--根据word模板生成word文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>${poi-tl.version}</version>
</dependency>
<!--word文件转化为PDF文件-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>${aspose.words.version}</version>
</dependency>
<!-- 代码生成使用模板 -->
<dependency>
<groupId>org.apache.velocity</groupId>
@ -230,54 +282,6 @@
<version>${yanzhu.version}</version>
</dependency>
<!--根据word模板生成word文件 开始-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>${lowagie.version}</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>${lowagie.version}</version>
</dependency>
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>${poi-tl.version}</version>
</dependency>
<!--根据word模板生成word文件 结束-->
<!--word文件转化为PDF文件 开始-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>15.8.0</version>
</dependency>
<!--word文件转化为PDF文件 结束-->
<!--pdf签名使用工具类-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<!--pdf签名使用工具类-->
<dependency>
<groupId>net.sf.mpxj</groupId>
<artifactId>mpxj</artifactId>

View File

@ -7,6 +7,7 @@ package com.yanzhu.common.core.enums;
*/
public enum UseStateEnums {
AW("0", "待入场"),
IN("1", "进场"),
OUT("2", "离场");

View File

@ -11,6 +11,11 @@ import java.io.Serializable;
@Data
public class FlowSaveXmlVo implements Serializable {
/**
*
*/
private String proId;
/**
*
*/

View File

@ -1,8 +1,11 @@
package com.yanzhu.flowable.mapper;
import com.yanzhu.flowable.domain.dto.FlowProcDefDto;
import com.yanzhu.flowable.domain.my.FlowDeptVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
*
@ -15,8 +18,39 @@ public interface FlowDeployMapper {
/**
*
* @param name
* @param name
* @param category
* @param comId
* @param proId
* @param proName
* @return
*/
List<FlowProcDefDto> selectDeployList(String name);
List<FlowProcDefDto> selectDeployList(@Param("name") String name, @Param("category") String category,@Param("comId") Long comId, @Param("proId") Long proId, @Param("proName") String proName);
/**
*
*
* @param proId
* @param type
* @return
*/
List<Map<String,Object>> selectProcdefDeptByParam(@Param("proId") Long proId, @Param("type") String type);
/**
*
*
* @param defId
* @param proId
* @param type
* @return
*/
int deleteProcdefDeptByParam(@Param("defId") String defId, @Param("proId") String proId, @Param("type") String type);
/**
*
*
* @param flowDeptVo
* @return
*/
void saveProcdefDeptByParam(FlowDeptVo flowDeptVo);
}

View File

@ -115,6 +115,8 @@ public class ProProjectInfoSubdepts extends BaseEntity
private String leaderCardImgInv;
/** 委托人半身照片 */
private String leaderUserPicture;
/** 委托代理人学历 */
private String leaderDegreeGrade;
/**
*
@ -354,6 +356,14 @@ public class ProProjectInfoSubdepts extends BaseEntity
this.proProjectInfoSubdeptsUsers = proProjectInfoSubdeptsUsers;
}
public String getLeaderDegreeGrade() {
return leaderDegreeGrade;
}
public void setLeaderDegreeGrade(String leaderDegreeGrade) {
this.leaderDegreeGrade = leaderDegreeGrade;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -28,6 +28,9 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
/** 主键 */
private Long id;
/** 上级主键 */
private Long parId;
@Excel(name = "姓名")
private String userName;
@Excel(name = "身份证")
@ -140,6 +143,10 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
*
*/
private String userPost;
/**
*
*/
private String qrCode;
public String getEnterState() {
return enterState;
@ -237,6 +244,15 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
{
return id;
}
public Long getParId() {
return parId;
}
public void setParId(Long parId) {
this.parId = parId;
}
public void setComId(Long comId)
{
this.comId = comId;
@ -459,6 +475,14 @@ public class ProProjectInfoSubdeptsUsers extends BaseEntity
this.userPost = userPost;
}
public String getQrCode() {
return qrCode;
}
public void setQrCode(String qrCode) {
this.qrCode = qrCode;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -58,4 +58,5 @@ public interface ProProjectInfoSubdeptsGroupMapper
* @return
*/
public int deleteProProjectInfoSubdeptsGroupByIds(Long[] ids);
}

View File

@ -15,17 +15,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
rp.key_ as flowKey,
rp.version_ as version,
rp.suspension_state_ as suspensionState,
rd.deploy_time_ as deploymentTime
rd.deploy_time_ as deploymentTime,
sd.dept_id as deptId,
sd.dept_name as deptName,
pi.id as projectId,
pi.project_name as projectName
FROM
act_re_procdef rp
LEFT JOIN act_re_deployment rd ON rp.deployment_id_ = rd.id_
LEFT JOIN act_re_procdef_dept rpd ON rpd.PROCDEF_ID_ = rp.ID_
LEFT JOIN pro_project_info pi on pi.id = rpd.PROJ_ID_
LEFT JOIN sys_dept sd on sd.dept_id = pi.com_id
<where>
<if test="name != null and name != ''">
and rd.name_ like concat('%', #{name}, '%')
</if>
<if test="category != null and category != ''">
and rd.category_ = #{category}
</if>
<if test="comId != null">
and rpd.DEPT_ID_ = #{comId}
</if>
<if test="proId != null">
and rpd.PROJ_ID_ = #{proId}
</if>
<if test="proName != null and proName != ''">
and pi.project_name like concat('%', #{proName}, '%')
</if>
</where>
order by rd.deploy_time_ desc
</select>
<select id="selectProcdefDeptByParam" resultType="Map">
select * from where PROJ_ID_ = #{proId} and TYPE_ = #{type}
</select>
<delete id="deleteProcdefDeptByParam">
delete from act_re_procdef_dept where PROCDEF_ID_ = #{defId} and PROJ_ID_ = #{proId} and TYPE_ = #{type}
</delete>
<insert id="saveProcdefDeptByParam" parameterType="com.yanzhu.flowable.domain.my.FlowDeptVo">
insert into act_re_procdef_dept
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="procdefId != null">PROCDEF_ID_,</if>
<if test="prtype != null">TYPE_,</if>
<if test="deptId != null">DEPT_ID_,</if>
<if test="projId != null">PROJ_ID_,</if>
<if test="sort != null">SORT_,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="procdefId != null">#{procdefId},</if>
<if test="prtype != null">#{prtype},</if>
<if test="deptId != null">#{deptId},</if>
<if test="projId != null">#{projId},</if>
<if test="sort != null">#{sort},</if>
</trim>
</insert>
</mapper>

View File

@ -41,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectProProjectInfoSubdeptsGroupList" parameterType="ProProjectInfoSubdeptsGroup" resultMap="ProProjectInfoSubdeptsGroupResult">
<include refid="selectProProjectInfoSubdeptsGroupVo"/>
<where>
psg.is_del = 0
psg.is_del != 2
<if test="comId != null "> and psg.com_id = #{comId}</if>
<if test="projectId != null "> and psg.project_id = #{projectId}</if>
<if test="activeComId != null "> and psg.com_id = #{activeComId}</if>
@ -51,11 +51,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="subDeptType != null and subDeptType != ''"> and psg.sub_dept_type = #{subDeptType}</if>
<if test="subDeptName != null and subDeptName != ''"> and psg.sub_dept_name like concat('%', #{subDeptName}, '%')</if>
<if test="subDeptCode != null and subDeptCode != ''"> and psg.sub_dept_code = #{subDeptCode}</if>
<if test="groupLeaderPhone != null and groupLeaderPhone != ''"> and psg.group_leader_phone = #{groupLeaderPhone}</if>
<if test="groupName != null and groupName != ''"> and psg.group_name like concat('%', #{groupName}, '%')</if>
<if test="craftType != null and craftType != ''"> and psg.craft_type = #{craftType}</if>
<if test="craftPost != null and craftPost != ''"> and psg.craft_post = #{craftPost}</if>
</where>
order by id desc
order by psg.id desc
</select>
<select id="selectProProjectInfoSubdeptsGroupById" parameterType="Long" resultMap="ProProjectInfoSubdeptsGroupResult">

View File

@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="ProProjectInfoSubdeptsUsers" id="ProProjectInfoSubdeptsUsersResult">
<result property="id" column="id" />
<result property="parId" column="par_id" />
<result property="comId" column="com_id" />
<result property="comName" column="comName"/>
<result property="projectId" column="project_id" />
@ -17,6 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="userId" column="user_id" />
<result property="subDeptGroup" column="sub_dept_group" />
<result property="subDeptGroupName" column="sub_dept_group_name" />
<result property="userPost" column="user_post" />
<result property="craftType" column="craft_type" />
<result property="craftPost" column="craft_post" />
<result property="eduStatus" column="edu_status" />
@ -25,6 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="eduDate" column="edu_date" />
<result property="approveStatus" column="approve_status" />
<result property="useStatus" column="use_status" />
<result property="qrCode" column="qr_code" />
<result property="subStep" column="sub_step" />
<result property="illnessStatus" column="illness_status" />
<result property="supIllnessStatus" column="sup_illness_status" />
@ -64,9 +67,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="loginDate" column="login_date" />
</resultMap>
<sql id="selectProProjectInfoSubdeptsUsersVo">
SELECT pi.project_name, psu.id, psu.com_id, psu.project_id, psu.sub_dept_id, psu.sub_dept_type, psu.sub_dept_name, psu.sub_dept_power_path, psu.user_id, psu.sub_dept_group,
psu.sub_dept_group_name, psu.craft_type, psu.craft_post, psu.edu_status, psu.edu_file_path, psu.edu_sign_path, psu.edu_date, psu.approve_status,
psu.use_status, psu.sub_step, psu.illness_status, psu.sup_illness_status, psu.is_del, psu.create_by, psu.create_time, psu.update_by, psu.update_time,
SELECT psu.id, psu.par_id, psu.com_id, psu.project_id, pi.project_name, psu.sub_dept_id, psu.sub_dept_type, psu.sub_dept_name, psu.sub_dept_power_path, psu.user_id, psu.sub_dept_group,
psu.sub_dept_group_name, psu.user_post, psu.craft_type, psu.craft_post, psu.edu_status, psu.edu_file_path, psu.edu_sign_path, psu.edu_date, psu.approve_status,
psu.use_status, psu.qr_code, psu.sub_step, psu.illness_status, psu.sup_illness_status, psu.is_del, psu.create_by, psu.create_time, psu.update_by, psu.update_time,
psu.remark, psu.degree_grade, su.`user_name`,su.`nick_name`,su.`user_type`,su.`card_type`,su.`card_code`,su.admitGuid,su.admitGuid usAdmitGuid,
dic1.dict_label craft_type_name,dic2.dict_label craft_post_name,psu.enter_state,sd.dept_name comName,
su.`user_picture`, su.`card_img_inv`,su.`card_img_pos`,su.`user_infos`,su.`email`,su.`phonenumber`,su.`sex`,su.`avatar`,su.`login_ip`,su.`login_date`
@ -82,6 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectProProjectInfoSubdeptsUsersVo"/>
<where>
<if test="comId != null "> and psu.com_id = #{comId}</if>
<if test="parId != null "> and psu.par_id = #{parId}</if>
<if test="projectId != null "> and psu.project_id = #{projectId}</if>
<if test="subDeptId != null "> and psu.sub_dept_id = #{subDeptId}</if>
<if test="subDeptType != null and subDeptType != ''"> and psu.sub_dept_type = #{subDeptType}</if>
@ -89,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null "> and psu.user_id = #{userId}</if>
<if test="subDeptGroup != null "> and psu.sub_dept_group = #{subDeptGroup}</if>
<if test="subDeptGroupName != null and subDeptGroupName != ''"> and psu.sub_dept_group_name like concat('%', #{subDeptGroupName}, '%')</if>
<if test="userPost != null and userPost != ''"> and psu.user_post = #{userPost}</if>
<if test="craftType != null and craftType != ''"> and psu.craft_type = #{craftType}</if>
<if test="craftPost != null and craftPost != ''"> and psu.craft_post = #{craftPost}</if>
<if test="eduStatus != null and eduStatus != ''"> and psu.edu_status = #{eduStatus}</if>
@ -122,6 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<insert id="insertProProjectInfoSubdeptsUsers" parameterType="ProProjectInfoSubdeptsUsers" useGeneratedKeys="true" keyProperty="id">
insert into pro_project_info_subdepts_users
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="parId != null">par_id,</if>
<if test="comId != null">com_id,</if>
<if test="projectId != null">project_id,</if>
<if test="subDeptId != null">sub_dept_id,</if>
@ -131,6 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null">user_id,</if>
<if test="subDeptGroup != null">sub_dept_group,</if>
<if test="subDeptGroupName != null">sub_dept_group_name,</if>
<if test="userPost != null">user_post,</if>
<if test="craftType != null">craft_type,</if>
<if test="craftPost != null">craft_post,</if>
<if test="eduStatus != null">edu_status,</if>
@ -139,6 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="eduDate != null">edu_date,</if>
<if test="approveStatus != null">approve_status,</if>
<if test="useStatus != null">use_status,</if>
<if test="qrCode != null">qr_code,</if>
<if test="subStep != null">sub_step,</if>
<if test="illnessStatus != null">illness_status,</if>
<if test="supIllnessStatus != null">sup_illness_status,</if>
@ -152,6 +160,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="degreeGrade != null">degree_grade,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="parId != null">#{parId},</if>
<if test="comId != null">#{comId},</if>
<if test="projectId != null">#{projectId},</if>
<if test="subDeptId != null">#{subDeptId},</if>
@ -161,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null">#{userId},</if>
<if test="subDeptGroup != null">#{subDeptGroup},</if>
<if test="subDeptGroupName != null">#{subDeptGroupName},</if>
<if test="userPost != null">#{userPost},</if>
<if test="craftType != null">#{craftType},</if>
<if test="craftPost != null">#{craftPost},</if>
<if test="eduStatus != null">#{eduStatus},</if>
@ -169,6 +179,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="eduDate != null">#{eduDate},</if>
<if test="approveStatus != null">#{approveStatus},</if>
<if test="useStatus != null">#{useStatus},</if>
<if test="qrCode != null">#{qrCode},</if>
<if test="subStep != null">#{subStep},</if>
<if test="illnessStatus != null">#{illnessStatus},</if>
<if test="supIllnessStatus != null">#{supIllnessStatus},</if>
@ -186,6 +197,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updateProProjectInfoSubdeptsUsers" parameterType="ProProjectInfoSubdeptsUsers">
update pro_project_info_subdepts_users
<trim prefix="SET" suffixOverrides=",">
<if test="parId != null">par_id = #{parId},</if>
<if test="comId != null">com_id = #{comId},</if>
<if test="projectId != null">project_id = #{projectId},</if>
<if test="subDeptId != null">sub_dept_id = #{subDeptId},</if>
@ -195,6 +207,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null">user_id = #{userId},</if>
<if test="subDeptGroup != null">sub_dept_group = #{subDeptGroup},</if>
<if test="subDeptGroupName != null">sub_dept_group_name = #{subDeptGroupName},</if>
<if test="userPost != null">user_post = #{userPost},</if>
<if test="craftType != null">craft_type = #{craftType},</if>
<if test="craftPost != null">craft_post = #{craftPost},</if>
<if test="eduStatus != null">edu_status = #{eduStatus},</if>
@ -203,6 +216,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="eduDate != null">edu_date = #{eduDate},</if>
<if test="approveStatus != null">approve_status = #{approveStatus},</if>
<if test="useStatus != null">use_status = #{useStatus},</if>
<if test="qrCode != null">qr_code = #{qrCode},</if>
<if test="subStep != null">sub_step = #{subStep},</if>
<if test="illnessStatus != null">illness_status = #{illnessStatus},</if>
<if test="supIllnessStatus != null">sup_illness_status = #{supIllnessStatus},</if>
@ -291,7 +305,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="findActReProcdefDept" resultType="Map">
select * from act_re_procdef_dept where PROJ_ID_ = #{proId} and TYPE_ = #{defType} order by SORT_
select * from act_re_procdef_dept where PROJ_ID_ = #{proId} and TYPE_ = #{defType} order by SORT_ desc
</select>
</mapper>

View File

@ -57,6 +57,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="deptId != null and deptId != 0">
AND rd.dept_id = #{deptId}
</if>
<if test="projectId != null and projectId != 0">
AND (d.dept_id = #{projectId} or find_in_set(#{projectId},d.ancestors))
</if>
<if test="roleName != null and roleName != ''">
AND r.role_name like concat('%', #{roleName}, '%')
</if>

View File

@ -73,6 +73,28 @@ public class SysFileController
}
}
/**
*
*/
@PostMapping("/NoSecurity/signUpload")
public R<SysFile> noSecuritySignUpload(MultipartFile file)
{
try
{
// 上传并返回访问地址
String url = sysFileService.uploadSignetFile(file);
SysFile sysFile = new SysFile();
sysFile.setName(FileUtils.getName(url));
sysFile.setUrl(url);
return R.ok(sysFile);
}
catch (Exception e)
{
log.error("上传文件失败", e);
return R.fail(e.getMessage());
}
}
/**
*
*/
@ -120,4 +142,30 @@ public class SysFileController
log.error("下载文件失败", e);
}
}
/**
* ...
* @param fileName
* @param response
*/
@GetMapping("/NoSecurity/download")
public void noSecurityDownloadFile(String fileName, HttpServletResponse response) {
try
{
if (!FileUtils.checkAllowDownload(fileName))
{
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = sysFileService.findFilePath(fileName);
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, realFileName);
FileUtils.writeBytes(filePath, response.getOutputStream());
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
}

View File

@ -1,12 +1,12 @@
package com.yanzhu.file.service;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.yanzhu.common.core.utils.file.FileTypeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.yanzhu.common.core.utils.file.FileTypeUtils;
/**
* FastDFS
@ -40,6 +40,20 @@ public class FastDfsSysFileServiceImpl implements ISysFileService
return domain + "/" + storePath.getFullPath();
}
/**
*
*
* @param file
* @return 访
* @throws Exception
*/
public String uploadSignetFile(MultipartFile file) throws Exception
{
StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
FileTypeUtils.getExtension(file), null);
return domain + "/" + storePath.getFullPath();
}
/**
* ...
*

View File

@ -18,6 +18,15 @@ public interface ISysFileService
*/
public String uploadFile(MultipartFile file) throws Exception;
/**
*
*
* @param file
* @return 访
* @throws Exception
*/
public String uploadSignetFile(MultipartFile file) throws Exception;
/**
* ...
*

View File

@ -47,6 +47,19 @@ public class LocalSysFileServiceImpl implements ISysFileService
return localFilePrefix + name;
}
/**
*
*
* @param file
* @return 访
* @throws Exception
*/
public String uploadSignetFile(MultipartFile file) throws Exception
{
String name = FileUploadUtils.signetUpload(localFilePath, file);
return localFilePrefix + name;
}
/**
* ...
*

View File

@ -2,11 +2,11 @@ package com.yanzhu.file.service;
import com.yanzhu.file.config.MinioConfig;
import com.yanzhu.file.utils.FileUploadUtils;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
/**
* Minio
@ -43,6 +43,26 @@ public class MinioSysFileServiceImpl implements ISysFileService
return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
}
/**
*
*
* @param file
* @return 访
* @throws Exception
*/
public String uploadSignetFile(MultipartFile file) throws Exception
{
String fileName = FileUploadUtils.extractFilename(file);
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
client.putObject(args);
return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
}
/**
* ...
*

View File

@ -1,5 +1,7 @@
package com.yanzhu.file.utils;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
@ -9,7 +11,6 @@ import java.util.Objects;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import com.yanzhu.common.core.utils.file.FileUtils;
import com.yanzhu.common.core.utils.file.ImageUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import com.yanzhu.common.core.exception.file.FileNameLengthLimitExceededException;
@ -21,6 +22,8 @@ import com.yanzhu.common.core.utils.file.FileTypeUtils;
import com.yanzhu.common.core.utils.file.MimeTypeUtils;
import com.yanzhu.common.core.utils.uuid.Seq;
import javax.imageio.ImageIO;
/**
*
*
@ -58,6 +61,26 @@ public class FileUploadUtils
}
}
/**
*
*
* @param baseDir
* @param file
* @return
* @throws IOException
*/
public static final String signetUpload(String baseDir, MultipartFile file) throws IOException
{
try
{
return signetUpload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
}
catch (Exception e)
{
throw new IOException(e.getMessage(), e);
}
}
/**
*
*
@ -91,6 +114,39 @@ public class FileUploadUtils
return getPathFileName(fileName);
}
/**
*
*
* @param baseDir
* @param file
* @param allowedExtension
* @return
* @throws FileSizeLimitExceededException
* @throws FileNameLengthLimitExceededException
* @throws IOException
* @throws InvalidExtensionException
*/
public static final String signetUpload(String baseDir, MultipartFile file, String[] allowedExtension)
throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
InvalidExtensionException
{
int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
{
throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
}
assertAllowed(file, allowedExtension);
String fileName = extractFilename(file);
String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
file.transferTo(Paths.get(absPath));
// 压缩图片
makeSignImage(absPath);
return getPathFileName(fileName);
}
/**
* xx.min.jpg
* @param absPath
@ -115,6 +171,89 @@ public class FileUploadUtils
}
}
/**
*
* @param absPath
*/
private static void makeSignImage(String absPath) {
try {
String ext = FileUtils.getFileExt(absPath).toLowerCase();
String exts = Arrays.toString(new String[]{"jpg", "jpeg", "png", "bmp"});
if (exts.contains(ext)) {
if (new File(absPath).exists()) {
BufferedImage bufferedImage = ImageIO.read(org.apache.commons.io.FileUtils.getFile(absPath));
// 这里裁剪图片可能报错,报错用原图
int[] array = bufferedImageToIntArray(bufferedImage,bufferedImage.getWidth(),bufferedImage.getHeight());
// blank是作为四周边距留白
int blank = 30;
boolean cutResult = false;
try {
// 图片裁剪
ImgUtil.cut(FileUtil.file(absPath),
FileUtil.file(absPath + ".v1.png"), new Rectangle(array[0]-blank,array[1]-blank,array[2]+blank*2, array[3]+blank*2));
ImgUtil.rotate(FileUtil.file(absPath+".v1.png"),270,FileUtil.file(absPath + ".sign.png"));
cutResult = true;
}catch (Exception ex){
ex.printStackTrace();
}
absPath = cutResult?(absPath+".sign.png"):absPath;
int w = ImgUtil.read(FileUtil.file(absPath)).getWidth()/20;
ImgUtil.scale(FileUtil.file(absPath),
FileUtil.file(absPath + ".min.png"), w);
}
}
}catch (Exception ex){
ex.printStackTrace();
}
}
/**
*
* @param image
* @return
*/
public static int[] bufferedImageToIntArray(BufferedImage image, int width, int height) {
try {
int rgb = 0;
int x1 = width;
int y1 = height;
int x2 = 0;
int y2 = 0;
int temp1 = 0;
int temp2 = 0;
// 方式一通过getRGB()方式获得像素数组
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
rgb = image.getRGB(i, j);
if (rgb == -16777216) {
temp1 = i;
temp2 = j;
// 计算最左侧
if (x1 >= temp1) {
x1 = temp1;
}
// 计算最右侧
if (x2 <= temp1) {
x2 = temp1;
}
// 计算最下方
if (y2 <= temp2) {
y2 = temp2;
}
// 计算最上方
if (y1 >= temp2) {
y1 = temp2;
}
}
}
}
return new int[] {x1, y1, x2 - x1, y2 - y1};
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
*
*/

View File

@ -1,5 +1,6 @@
package com.yanzhu.flowable.controller;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.core.web.controller.BaseController;
import com.yanzhu.common.core.web.domain.AjaxResult;
@ -61,9 +62,11 @@ public class FlowDefinitionController extends BaseController {
@GetMapping(value = "/list")
@ApiOperation(value = "流程定义列表", response = FlowProcDefDto.class)
public TableDataInfo list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name) {
public TableDataInfo list(@ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name,
@ApiParam(value = "流程分类", required = false) @RequestParam(required = false) String category,
@ApiParam(value = "项目单位", required = false) @RequestParam(required = false) String proName) {
startPage();
List<FlowProcDefDto> list = flowDefinitionService.list(name);
List<FlowProcDefDto> list = flowDefinitionService.list(name,category,proName);
return getDataTable(list);
}
@ -139,11 +142,10 @@ public class FlowDefinitionController extends BaseController {
InputStream in = null;
try {
String xml = vo.getXml();
//将xml数据进行base64解码
xml = StringUtils.utf8Str(xml);
//in = new ByteArrayInputStream(vo.getXml().getBytes(StandardCharsets.UTF_8));
in = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
flowDefinitionService.importFile(vo.getName(), vo.getCategory(), in);
// 将xml数据进行base64解码
byte[] xmlBytes = Base64.getDecoder().decode(xml);
in = new ByteArrayInputStream(xmlBytes);
flowDefinitionService.importFile(Convert.toLong(vo.getProId()), vo.getName(), vo.getCategory(), in);
} catch (Exception e) {
log.error("导入失败:", e);
return AjaxResult.error(e.getMessage());

View File

@ -18,10 +18,12 @@ public interface IFlowDefinitionService {
/**
*
*
* @param name
* @param category
* @param proName
* @return
*/
List<FlowProcDefDto> list(String name);
List<FlowProcDefDto> list(String name, String category, String proName);
/**
*
@ -33,6 +35,17 @@ public interface IFlowDefinitionService {
*/
void importFile(String name, String category, InputStream in);
/**
*
* key1使key
* key1key
* @param proId
* @param name
* @param category
* @param in
*/
void importFile(Long proId, String name, String category, InputStream in);
/**
* xml
* @param deployId

View File

@ -1,16 +1,20 @@
package com.yanzhu.flowable.service.impl;
import com.yanzhu.common.core.constant.CacheConstants;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.common.redis.service.RedisService;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.flowable.common.constant.ProcessConstants;
import com.yanzhu.flowable.common.enums.FlowComment;
import com.yanzhu.flowable.domain.SysForm;
import com.yanzhu.flowable.domain.dto.FlowProcDefDto;
import com.yanzhu.flowable.domain.my.FlowDeptVo;
import com.yanzhu.flowable.factory.FlowServiceFactory;
import com.yanzhu.flowable.mapper.FlowDeployMapper;
import com.yanzhu.flowable.service.IFlowDefinitionService;
import com.yanzhu.flowable.service.ISysDeployFormService;
import com.yanzhu.manage.domain.ProProjectInfo;
import com.yanzhu.system.api.domain.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
@ -21,6 +25,7 @@ import org.flowable.engine.repository.ProcessDefinitionQuery;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.image.impl.DefaultProcessDiagramGenerator;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -42,12 +47,15 @@ import java.util.Objects;
@Slf4j
public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFlowDefinitionService {
@Resource
private ISysDeployFormService sysDeployFormService;
@Autowired
private RedisService redisService;
@Resource
private FlowDeployMapper flowDeployMapper;
@Resource
private ISysDeployFormService sysDeployFormService;
private static final String BPMN_FILE_SUFFIX = ".bpmn";
@Override
@ -58,24 +66,24 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl
return count > 0 ? true : false;
}
/**
*
*
* @param name
* @param category
* @param proName
* @return
*/
@Override
public List<FlowProcDefDto> list(String name) {
final List<FlowProcDefDto> dataList = flowDeployMapper.selectDeployList(name);
public List<FlowProcDefDto> list(String name, String category, String proName) {
final List<FlowProcDefDto> dataList = flowDeployMapper.selectDeployList(name,category,SecurityUtils.getLoginUser().getProjectDeptId(),SecurityUtils.getLoginUser().getProjectId(),proName);
// 加载挂表单
for (FlowProcDefDto procDef : dataList) {
/**for (FlowProcDefDto procDef : dataList) {
SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(procDef.getDeploymentId());
if (Objects.nonNull(sysForm)) {
procDef.setFormName(sysForm.getFormName());
procDef.setFormId(sysForm.getFormId());
}
}
}*/
return dataList;
}
@ -119,6 +127,33 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl
}
/**
*
* key1使key
* key1key
* @param proId
* @param name
* @param category
* @param in
*/
@Override
public void importFile(Long proId, String name, String category, InputStream in){
// 获取项目缓存信息
ProProjectInfo info = redisService.getCacheObject(CacheConstants.PRO_PROJECT+proId);
Deployment deploy = repositoryService.createDeployment().addInputStream(name + BPMN_FILE_SUFFIX, in).name(name).category(category).deploy();
ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
repositoryService.setProcessDefinitionCategory(definition.getId(), category);
// 修改项目单位和流程关系...
FlowDeptVo flowDeptVo = new FlowDeptVo();
flowDeptVo.setProcdefId(definition.getId());
flowDeptVo.setPrtype(category);
flowDeptVo.setDeptId(info.getComId());
flowDeptVo.setProjId(proId);
flowDeptVo.setSort(Convert.toStr(definition.getVersion(),"0"));
flowDeployMapper.saveProcdefDeptByParam(flowDeptVo);
}
/**
* xml
*

View File

@ -97,6 +97,17 @@
<artifactId>poi</artifactId>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
@ -110,9 +121,6 @@
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>iTextAsian</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}\libs\iTextAsian-1.0.0.jar</systemPath>
</dependency>
<dependency>
@ -130,9 +138,6 @@
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>15.8.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}\libs\aspose-words-15.8.0-jdk16.jar</systemPath>
</dependency>
<!--word文件转化为PDF文件 结束-->
@ -140,6 +145,7 @@
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<!--pdf签名使用工具类-->

View File

@ -2,8 +2,10 @@ package com.yanzhu.manage.controller.wechat;
import com.yanzhu.common.core.web.controller.BaseController;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.common.security.utils.DictUtils;
import com.yanzhu.manage.domain.BusExamUser;
import com.yanzhu.manage.domain.ProProjectInfoSubdepts;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.domain.SignetFileVo;
import com.yanzhu.manage.service.*;
import org.springframework.beans.factory.annotation.Autowired;
@ -39,6 +41,15 @@ public class WxController extends BaseController {
@Autowired
private IProProjectInfoSubdeptsUsersService proProjectInfoSubdeptsUsersService;
/**
*
*/
@GetMapping("/findDictCache/{type}")
public AjaxResult findDictCache(@PathVariable("type") String type)
{
return success(DictUtils.getDictCache(type));
}
/**
*
*/
@ -54,13 +65,24 @@ public class WxController extends BaseController {
@PostMapping("/registerSubDepts")
public AjaxResult registerSubDepts(@RequestBody ProProjectInfoSubdepts proProjectInfoSubdepts)
{
int res;
if(Objects.isNull(proProjectInfoSubdepts.getId())){
res = proProjectInfoSubdeptsService.insertProProjectInfoSubdepts(proProjectInfoSubdepts);
return success(proProjectInfoSubdeptsService.insertProProjectInfoSubdeptsWX(proProjectInfoSubdepts));
}else{
res = proProjectInfoSubdeptsService.updateProProjectInfoSubdepts(proProjectInfoSubdepts);
return success(proProjectInfoSubdeptsService.updateProProjectInfoSubdeptsWX(proProjectInfoSubdepts));
}
}
/**
*
*/
@PostMapping("/registerSubDeptsUsers")
public AjaxResult registerSubDeptsUsers(@RequestBody ProProjectInfoSubdeptsUsers ProProjectInfoSubdeptsUsers)
{
if(Objects.isNull(ProProjectInfoSubdeptsUsers.getId())){
return success(proProjectInfoSubdeptsUsersService.insertProProjectInfoSubdeptsUsersWX(ProProjectInfoSubdeptsUsers));
}else{
return success(proProjectInfoSubdeptsUsersService.updateProProjectInfoSubdeptsUsersWX(ProProjectInfoSubdeptsUsers));
}
return toAjax(res);
}
/**
@ -74,6 +96,16 @@ public class WxController extends BaseController {
return success(proProjectInfoSubdeptsService.findProSubDeptsInfo(proId,phoneNumber));
}
/**
*
* @param id
*/
@GetMapping("/findProSubDeptsUser/{id}")
public AjaxResult findProSubDeptsUserById(@PathVariable("id")Long id)
{
return success(proProjectInfoSubdeptsUsersService.selectProProjectInfoSubdeptsUsersById(id));
}
/**
*
* @param proId
@ -154,7 +186,6 @@ public class WxController extends BaseController {
@PostMapping("/submitUserSignets")
public AjaxResult submitUserSignets(@RequestBody SignetFileVo signetFileVo)
{
proProjectInfoSubdeptsUsersService.submitUserSignets(signetFileVo);
return success();
return success(proProjectInfoSubdeptsUsersService.submitUserSignets(signetFileVo));
}
}

View File

@ -6,7 +6,7 @@ package com.yanzhu.manage.enums;
public enum CraftPostEnums {
WTDL("1022", "委托代理人"),
XMJL("1023", "委托代理人");
XMJL("1023", "项目经理");
private final String code;
private final String info;

View File

@ -37,6 +37,14 @@ public interface IProProjectInfoSubdeptsService
*/
public int insertProProjectInfoSubdepts(ProProjectInfoSubdepts proProjectInfoSubdepts);
/**
*
*
* @param proProjectInfoSubdepts
* @return
*/
public ProProjectInfoSubdepts insertProProjectInfoSubdeptsWX(ProProjectInfoSubdepts proProjectInfoSubdepts);
/**
*
*
@ -45,6 +53,14 @@ public interface IProProjectInfoSubdeptsService
*/
public int updateProProjectInfoSubdepts(ProProjectInfoSubdepts proProjectInfoSubdepts);
/**
*
*
* @param proProjectInfoSubdepts
* @return
*/
public ProProjectInfoSubdepts updateProProjectInfoSubdeptsWX(ProProjectInfoSubdepts proProjectInfoSubdepts);
/**
*
*

View File

@ -38,6 +38,14 @@ public interface IProProjectInfoSubdeptsUsersService
*/
public int insertProProjectInfoSubdeptsUsers(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers);
/**
*
*
* @param proProjectInfoSubdeptsUsers
* @return
*/
public ProProjectInfoSubdeptsUsers insertProProjectInfoSubdeptsUsersWX(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers);
/**
*
*
@ -46,6 +54,14 @@ public interface IProProjectInfoSubdeptsUsersService
*/
public int updateProProjectInfoSubdeptsUsers(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers);
/**
*
*
* @param proProjectInfoSubdeptsUsers
* @return
*/
public ProProjectInfoSubdeptsUsers updateProProjectInfoSubdeptsUsersWX(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers);
/**
*
*
@ -75,7 +91,7 @@ public interface IProProjectInfoSubdeptsUsersService
*
* @param signetFileVo
*/
public void submitUserSignets(SignetFileVo signetFileVo);
public ProProjectInfoSubdeptsUsers submitUserSignets(SignetFileVo signetFileVo);
/**
* --

View File

@ -1,8 +1,6 @@
package com.yanzhu.manage.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
@ -11,9 +9,10 @@ import java.util.Map;
*
*/
public interface IUniService {
/**
*
* @param data
* @param projectId
* @return
*/
public Map<String,String> auth(long projectId) throws NoSuchAlgorithmException;
@ -53,7 +52,6 @@ public interface IUniService {
*/
public JSONObject admitPage(JSONObject data);
/**
* -
* @param data
@ -61,8 +59,6 @@ public interface IUniService {
*/
public JSONObject faceRegister(JSONObject data);
/**
* -
* @param data
@ -119,7 +115,6 @@ public interface IUniService {
*/
public JSONObject authDeviceUpdate(JSONObject data);
/**
* -
* @param data
@ -127,7 +122,6 @@ public interface IUniService {
*/
public String authDeviceRevoke(JSONObject data);
/**
*
* @param userId
@ -151,6 +145,11 @@ public interface IUniService {
*/
public Long syncUniDeviceUser(Long deviceId,Long projectId);
/**
*
* @param ids
* @return
*/
public long syncUniDeviceDelete(Long[] ids);
/**

View File

@ -141,16 +141,6 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
proDept.setLeader(proProjectInfo.getProjectPerson());
proDept.setPhone(proProjectInfo.getProjectPersonPhone());
proDept.setCreateBy(SecurityUtils.getUsername());
try {
String accessToken = wxMaService.getAccessToken();
String imgPath = profileConfig.getPath()+"/"+System.currentTimeMillis()+".png";
log.info("accessToken...{}",accessToken);
WxQrCodeUtils.generateQrCode(imgPath, "pages/index/index", "aa=108&bb=2&cc=3", accessToken);
// TODO:生成二维码
proProjectInfo.setProjectQrCode(imgPath);
}catch (Exception e){
log.error(e.getMessage());
}
int res = proProjectInfoMapper.insertDept(proDept);
if(res>0){
proProjectInfo.setId(proDept.getDeptId());
@ -158,6 +148,19 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
proProjectInfo.setProjectPackage(projectPackage(proProjectInfo.getProjectName(),proDept.getDeptId()));
proProjectInfo.setCreateTime(DateUtils.getNowDate());
res = proProjectInfoMapper.insertProProjectInfo(proProjectInfo);
try {
// 生成二维码
String accessToken = wxMaService.getAccessToken();
String filePath = DateUtils.datePath()+"/"+System.currentTimeMillis()+".png";
String savePath = ProfileConfig.profilePath+"/"+filePath;
String profilePath = ProfileConfig.profile+"/"+filePath;
log.info("accessToken...{}",accessToken);
WxQrCodeUtils.generateQrCode(savePath, "pages/project_qr/index", "SIGID=1&QRPID="+proProjectInfo.getId(), accessToken);
proProjectInfo.setProjectQrCode(profilePath);
proProjectInfoMapper.updateProProjectInfo(proProjectInfo);
}catch (Exception e){
log.error(e.getMessage());
}
loadingProjectsCache();
return res;
}else{

View File

@ -16,9 +16,12 @@ import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.enums.CraftTypeEnums;
import com.yanzhu.manage.enums.SubDeptsEnums;
import com.yanzhu.manage.enums.CraftPostEnums;
import com.yanzhu.manage.enums.UserPostEnums;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.manage.service.IProProjectInfoSubdeptsService;
import com.yanzhu.manage.service.IUniService;
import com.yanzhu.manage.utils.WxQrCodeUtils;
import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import me.chanjar.weixin.mp.api.WxMpService;
@ -40,15 +43,15 @@ import java.util.Objects;
@Service
public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdeptsService
{
@Autowired
private IUniService uniService;
@Autowired
private WxMpService wxMpService;
@Autowired
private RedisService redisService;
@Autowired
private ProfileConfig profileConfig;
@Autowired
private RemoteUserService remoteUserService;
@ -115,11 +118,7 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
sysUser.setCreateBy(SecurityUtils.getUsername());
}else{
sysUser.setCreateBy(DataSourceEnuns.APP.getInfo());
}
sysUser.setCreateBy(SecurityUtils.getUsername());
sysUser.setCreateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
@ -131,13 +130,8 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
}
}
}
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
proProjectInfoSubdepts.setCreateBy(SecurityUtils.getUsername());
proProjectInfoSubdepts.setApproveStatus(ApproveStatus.passed.getCode());
}else{
proProjectInfoSubdepts.setCreateBy(DataSourceEnuns.APP.getInfo());
proProjectInfoSubdepts.setApproveStatus(ApproveStatus.await.getCode());
}
proProjectInfoSubdepts.setCreateBy(SecurityUtils.getUsername());
proProjectInfoSubdepts.setApproveStatus(ApproveStatus.passed.getCode());
proProjectInfoSubdepts.setCreateTime(DateUtils.getNowDate());
int res = proProjectInfoSubdeptsMapper.insertProProjectInfoSubdepts(proProjectInfoSubdepts);
// 将人员信息同步至单位人员表
@ -151,25 +145,108 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
subdeptsUser.setSubDeptType(proProjectInfoSubdepts.getSubDeptType());
subdeptsUser.setSubDeptPowerPath(proProjectInfoSubdepts.getSubDeptLeaderPowerPath());
subdeptsUser.setUserId(proProjectInfoSubdepts.getSubDeptLeaderId());
subdeptsUser.setUserPost(UserPostEnums.WTDL.getCode());
subdeptsUser.setCraftType(CraftTypeEnums.GLRY.getCode());
subdeptsUser.setCraftPost(CraftPostEnums.WTDL.getCode());
subdeptsUser.setDegreeGrade("");
subdeptsUser.setDegreeGrade(proProjectInfoSubdepts.getLeaderDegreeGrade());
subdeptsUser.setEduStatus(ShiFouEnums.FOU.getCodeStr());
subdeptsUser.setSubStep(1L);
subdeptsUser.setCreateBy(SecurityUtils.getUsername());
subdeptsUser.setApproveStatus(ApproveStatus.passed.getCode());
subdeptsUser.setCreateTime(DateUtils.getNowDate());
int r = proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(subdeptsUser);
// 系统添加的人员默认增加入场信息
uniService.syncUniUser(subdeptsUser.getUserId(),subdeptsUser.getProjectId());
try {
if(r>0){
String accessToken = wxMpService.getAccessToken();
String filePath = DateUtils.datePath()+"/"+System.currentTimeMillis()+".png";
String savePath = ProfileConfig.profilePath+"/"+filePath;
String profilePath = ProfileConfig.profile+"/"+filePath;
log.info("accessToken...{}",accessToken);
// 生成二维码
WxQrCodeUtils.generateQrCode(savePath, "pages/project_qr/index", "SIGID=2&QRPID="+subdeptsUser.getProjectId()+"&PARID="+subdeptsUser.getId(), accessToken);
subdeptsUser.setQrCode(profilePath);
proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(subdeptsUser);
}
}catch (Exception e){
log.error(e.getMessage());
}
}
return res;
}
/**
*
*
* @param proProjectInfoSubdepts
* @return
*/
@Override
@Transactional
public ProProjectInfoSubdepts insertProProjectInfoSubdeptsWX(ProProjectInfoSubdepts proProjectInfoSubdepts)
{
ProProjectInfo info = redisService.getCacheObject(CacheConstants.PRO_PROJECT+proProjectInfoSubdepts.getProjectId());
if(Objects.isNull(info)){
throw new ServiceException("项目信息异常...");
}
proProjectInfoSubdepts.setComId(info.getComId());
if(Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),SubDeptsEnums.LWFB.getCode())){
// 单位委托人信息
if(StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderName()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderCode()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderPhone())){
SysUser sysUser = new SysUser();
sysUser.setUserName(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setNickName(proProjectInfoSubdepts.getSubDeptLeaderName());
sysUser.setUserType(UserTypeEnums.FBDL.getCode());
sysUser.setPhonenumber(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setCardType(CardTypeEnums.SFZ.getCode());
sysUser.setCardCode(proProjectInfoSubdepts.getSubDeptLeaderCode());
sysUser.setUserPicture(proProjectInfoSubdepts.getLeaderUserPicture());
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
sysUser.setCreateBy(DataSourceEnuns.APP.getInfo());
sysUser.setCreateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
R<Long> userResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
proProjectInfoSubdepts.setSubDeptLeaderId(userResult.getData());
}catch (Exception e){
// 已注册账号!!忽略异常...
e.printStackTrace();
}
}
}
proProjectInfoSubdepts.setCreateBy(DataSourceEnuns.APP.getInfo());
proProjectInfoSubdepts.setApproveStatus(ApproveStatus.await.getCode());
proProjectInfoSubdepts.setCreateTime(DateUtils.getNowDate());
int res = proProjectInfoSubdeptsMapper.insertProProjectInfoSubdepts(proProjectInfoSubdepts);
// 将人员信息同步至单位人员表
if(res>0 && (Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),SubDeptsEnums.LWFB.getCode()))){
// 保存单位人员信息
ProProjectInfoSubdeptsUsers subdeptsUser = new ProProjectInfoSubdeptsUsers();
subdeptsUser.setComId(info.getComId());
subdeptsUser.setProjectId(info.getId());
subdeptsUser.setSubDeptId(proProjectInfoSubdepts.getId());
subdeptsUser.setSubDeptName(proProjectInfoSubdepts.getSubDeptName());
subdeptsUser.setSubDeptType(proProjectInfoSubdepts.getSubDeptType());
subdeptsUser.setSubDeptPowerPath(proProjectInfoSubdepts.getSubDeptLeaderPowerPath());
subdeptsUser.setUserId(proProjectInfoSubdepts.getSubDeptLeaderId());
subdeptsUser.setUserPost(UserPostEnums.WTDL.getCode());
subdeptsUser.setCraftType(CraftTypeEnums.GLRY.getCode());
subdeptsUser.setCraftPost(CraftPostEnums.WTDL.getCode());
subdeptsUser.setDegreeGrade(proProjectInfoSubdepts.getLeaderDegreeGrade());
subdeptsUser.setEduStatus(ShiFouEnums.FOU.getCodeStr());
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
if(Objects.isNull(subdeptsUser.getSubStep()) || subdeptsUser.getSubStep()<1){
subdeptsUser.setSubStep(1L);
}
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
subdeptsUser.setCreateBy(SecurityUtils.getUsername());
subdeptsUser.setApproveStatus(ApproveStatus.passed.getCode());
}else{
subdeptsUser.setCreateBy(DataSourceEnuns.APP.getInfo());
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
}
subdeptsUser.setCreateBy(DataSourceEnuns.APP.getInfo());
subdeptsUser.setCreateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(subdeptsUser);
}
return res;
return proProjectInfoSubdepts;
}
/**
@ -200,29 +277,17 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
sysUser.setUpdateBy(SecurityUtils.getUsername());
}else{
sysUser.setUpdateBy(DataSourceEnuns.APP.getInfo());
}
sysUser.setUpdateBy(SecurityUtils.getUsername());
sysUser.setUpdateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
R<Long> userResult = remoteUserService.updateUserInfo(sysUser, SecurityConstants.INNER);
proProjectInfoSubdepts.setSubDeptLeaderId(userResult.getData());
remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
}catch (Exception e){
// 已注册账号!!忽略异常...
e.printStackTrace();
}
// TODO:实名制接入
}
}
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
proProjectInfoSubdepts.setUpdateBy(SecurityUtils.getUsername());
}else{
proProjectInfoSubdepts.setUpdateBy(DataSourceEnuns.APP.getInfo());
}
proProjectInfoSubdepts.setUpdateBy(SecurityUtils.getUsername());
proProjectInfoSubdepts.setUpdateTime(DateUtils.getNowDate());
int res = proProjectInfoSubdeptsMapper.updateProProjectInfoSubdepts(proProjectInfoSubdepts);
// 将人员信息同步至单位人员表
@ -241,17 +306,15 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
subdeptsUser.setUserId(proProjectInfoSubdepts.getSubDeptLeaderId());
subdeptsUser.setCraftType(CraftTypeEnums.GLRY.getCode());
subdeptsUser.setCraftPost(CraftPostEnums.WTDL.getCode());
subdeptsUser.setDegreeGrade("");
subdeptsUser.setDegreeGrade(proProjectInfoSubdepts.getLeaderDegreeGrade());
subdeptsUser.setEduStatus(ShiFouEnums.FOU.getCodeStr());
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
if(Objects.isNull(subdeptsUser.getApproveStatus())){
subdeptsUser.setApproveStatus(ApproveStatus.passed.getCode());
}
if(Objects.isNull(subdeptsUser.getSubStep()) || subdeptsUser.getSubStep()<1){
subdeptsUser.setSubStep(1L);
}
if(Objects.equals(DataSourceEnuns.WEB.getCode(),proProjectInfoSubdepts.getDataSource())){
subdeptsUser.setCreateBy(SecurityUtils.getUsername());
}else{
subdeptsUser.setCreateBy(DataSourceEnuns.APP.getInfo());
}
subdeptsUser.setCreateBy(SecurityUtils.getUsername());
subdeptsUser.setCreateTime(DateUtils.getNowDate());
if(Objects.isNull(subdeptsUser.getId())){
proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(subdeptsUser);
@ -262,6 +325,86 @@ public class ProProjectInfoSubdeptsServiceImpl implements IProProjectInfoSubdept
return res;
}
/**
*
*
* @param proProjectInfoSubdepts
* @return
*/
@Override
@Transactional
public ProProjectInfoSubdepts updateProProjectInfoSubdeptsWX(ProProjectInfoSubdepts proProjectInfoSubdepts)
{
ProProjectInfo info = redisService.getCacheObject(CacheConstants.PRO_PROJECT+proProjectInfoSubdepts.getProjectId());
if(Objects.isNull(info)){
throw new ServiceException("项目信息异常...");
}
if(Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.LWFB.getCode())){
// 单位委托人信息
if(StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderName()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderCode()) && StringUtils.isNotEmpty(proProjectInfoSubdepts.getSubDeptLeaderPhone())){
SysUser sysUser = new SysUser();
sysUser.setUserName(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setNickName(proProjectInfoSubdepts.getSubDeptLeaderName());
sysUser.setPhonenumber(proProjectInfoSubdepts.getSubDeptLeaderPhone());
sysUser.setUserType(UserTypeEnums.FBDL.getCode());
sysUser.setCardType(CardTypeEnums.SFZ.getCode());
sysUser.setCardCode(proProjectInfoSubdepts.getSubDeptLeaderCode());
sysUser.setUserPicture(proProjectInfoSubdepts.getLeaderUserPicture());
sysUser.setCardImgPos(proProjectInfoSubdepts.getLeaderCardImgPos());
sysUser.setCardImgInv(proProjectInfoSubdepts.getLeaderCardImgInv());
sysUser.setSex(StringUtils.judgeGender(proProjectInfoSubdepts.getSubDeptLeaderCode()));
sysUser.setUpdateBy(DataSourceEnuns.APP.getInfo());
sysUser.setUpdateTime(DateUtils.getNowDate());
sysUser.setRemark(proProjectInfoSubdepts.getSubDeptName());
try {
R<Long> userResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
proProjectInfoSubdepts.setSubDeptLeaderId(userResult.getData());
}catch (Exception e){
// 已注册账号!!忽略异常...
e.printStackTrace();
}
}
}
proProjectInfoSubdepts.setUpdateBy(DataSourceEnuns.APP.getInfo());
proProjectInfoSubdepts.setUpdateTime(DateUtils.getNowDate());
int res = proProjectInfoSubdeptsMapper.updateProProjectInfoSubdepts(proProjectInfoSubdepts);
// 将人员信息同步至单位人员表
if(res>0 && (Objects.equals(proProjectInfoSubdepts.getSubDeptType(), SubDeptsEnums.ZYFB.getCode()) || Objects.equals(proProjectInfoSubdepts.getSubDeptType(),SubDeptsEnums.LWFB.getCode()))){
// 保存单位人员信息
ProProjectInfoSubdeptsUsers subdeptsUser = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersByParamId(proProjectInfoSubdepts.getProjectId(),proProjectInfoSubdepts.getSubDeptLeaderId());
if(Objects.isNull(subdeptsUser)){
subdeptsUser = new ProProjectInfoSubdeptsUsers();
subdeptsUser.setComId(info.getComId());
subdeptsUser.setProjectId(info.getId());
subdeptsUser.setSubDeptId(proProjectInfoSubdepts.getId());
}
subdeptsUser.setSubDeptName(proProjectInfoSubdepts.getSubDeptName());
subdeptsUser.setSubDeptType(proProjectInfoSubdepts.getSubDeptType());
subdeptsUser.setSubDeptPowerPath(proProjectInfoSubdepts.getSubDeptLeaderPowerPath());
subdeptsUser.setUserId(proProjectInfoSubdepts.getSubDeptLeaderId());
subdeptsUser.setCraftType(UserPostEnums.WTDL.getCode());
subdeptsUser.setCraftType(CraftTypeEnums.GLRY.getCode());
subdeptsUser.setCraftPost(CraftPostEnums.WTDL.getCode());
subdeptsUser.setDegreeGrade(proProjectInfoSubdepts.getLeaderDegreeGrade());
subdeptsUser.setEduStatus(ShiFouEnums.FOU.getCodeStr());
if(Objects.isNull(subdeptsUser.getApproveStatus())){
subdeptsUser.setApproveStatus(ApproveStatus.await.getCode());
}
if(Objects.isNull(subdeptsUser.getSubStep()) || subdeptsUser.getSubStep()<1){
subdeptsUser.setSubStep(1L);
}
subdeptsUser.setCreateBy(DataSourceEnuns.APP.getInfo());
subdeptsUser.setCreateTime(DateUtils.getNowDate());
if(Objects.isNull(subdeptsUser.getId())){
proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(subdeptsUser);
}else{
proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(subdeptsUser);
}
}
return proProjectInfoSubdepts;
}
/**
*
*

View File

@ -1,35 +1,45 @@
package com.yanzhu.manage.service.impl;
import com.alibaba.fastjson.JSON;
import com.deepoove.poi.data.PictureRenderData;
import com.yanzhu.common.core.constant.SecurityConstants;
import com.yanzhu.common.core.context.SecurityContextHolder;
import com.yanzhu.common.core.domain.R;
import com.yanzhu.common.core.enums.ApproveStatus;
import com.yanzhu.common.core.enums.ShiFouEnums;
import com.yanzhu.common.core.enums.*;
import com.yanzhu.common.core.exception.ServiceException;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.DateUtils;
import com.yanzhu.common.core.utils.StringUtils;
import com.yanzhu.common.core.web.domain.AjaxResult;
import com.yanzhu.common.security.utils.DictUtils;
import com.yanzhu.common.security.utils.SecurityUtils;
import com.yanzhu.manage.config.ProfileConfig;
import com.yanzhu.manage.domain.BasTemplate;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsGroup;
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
import com.yanzhu.manage.domain.SignetFileVo;
import com.yanzhu.manage.enums.CraftTypeEnums;
import com.yanzhu.manage.enums.SignetKeyEnums;
import com.yanzhu.manage.enums.UserPostEnums;
import com.yanzhu.manage.mapper.BasTemplateMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsGroupMapper;
import com.yanzhu.manage.mapper.ProProjectInfoSubdeptsUsersMapper;
import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService;
import com.yanzhu.manage.service.IUniService;
import com.yanzhu.manage.utils.WxQrCodeUtils;
import com.yanzhu.manage.utils.pdf.PoiUtil;
import com.yanzhu.system.api.RemoteFlowService;
import com.yanzhu.system.api.RemoteUserService;
import com.yanzhu.system.api.domain.SysUser;
import me.chanjar.weixin.mp.api.WxMpService;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.*;
@ -46,6 +56,9 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Autowired
private IUniService uniService;
@Autowired
private WxMpService wxMpService;
@Autowired
private BasTemplateMapper basTemplateMapper;
@ -58,6 +71,11 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Autowired
private ProProjectInfoSubdeptsUsersMapper proProjectInfoSubdeptsUsersMapper;
@Autowired
private ProProjectInfoSubdeptsGroupMapper proProjectInfoSubdeptsGroupMapper;
private static final Logger log = LoggerFactory.getLogger(ProProjectInfoSubdeptsUsersServiceImpl.class);
/**
*
*
@ -91,19 +109,113 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Override
public int insertProProjectInfoSubdeptsUsers(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers)
{
proProjectInfoSubdeptsUsers.setUseStatus("0");
proProjectInfoSubdeptsUsers.setUseStatus(UseStateEnums.IN.getCode());
proProjectInfoSubdeptsUsers.setCreateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsUsers.setCreateBy(SecurityContextHolder.getUserName());
SysUser user=proProjectInfoSubdeptsUsers.getUser();
if(user.getUserId()==null||user.getUserId().intValue()==0){
Long userId= remoteUserService.registerUserInfo(user, SecurityConstants.INNER).getData();
user.setUserId(userId);
proProjectInfoSubdeptsUsers.setUserId(userId);
}else{
remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData();
proProjectInfoSubdeptsUsers.setCreateBy(SecurityUtils.getUsername());
proProjectInfoSubdeptsUsers.setSubStep(1L);
proProjectInfoSubdeptsUsers.setApproveStatus(ApproveStatus.passed.getCode());
SysUser user = proProjectInfoSubdeptsUsers.getUser();
Long userId= remoteUserService.registerUserInfo(user, SecurityConstants.INNER).getData();
proProjectInfoSubdeptsUsers.setUserId(userId);
uniService.syncUniUser(userId,proProjectInfoSubdeptsUsers.getProjectId());
int res = proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
if(res>0 && Objects.nonNull(proProjectInfoSubdeptsUsers.getUserPost())){
// 生成二维码
try {
String accessToken = wxMpService.getAccessToken();
String filePath = DateUtils.datePath()+"/"+System.currentTimeMillis()+".png";
String savePath = ProfileConfig.profilePath+"/"+filePath;
String profilePath = ProfileConfig.profile+"/"+filePath;
log.info("accessToken...{}",accessToken);
// 生成二维码
if(Objects.equals(proProjectInfoSubdeptsUsers.getUserPost(), UserPostEnums.XMJL.getCode())){
WxQrCodeUtils.generateQrCode(savePath, "pages/project_qr/index", "SIGID=3&QRPID="+proProjectInfoSubdeptsUsers.getProjectId()+"&PARID="+proProjectInfoSubdeptsUsers.getId(), accessToken);
}else if(Objects.equals(proProjectInfoSubdeptsUsers.getUserPost(), UserPostEnums.BZZ.getCode())){
WxQrCodeUtils.generateQrCode(savePath, "pages/project_qr/index", "SIGID=4&QRPID="+proProjectInfoSubdeptsUsers.getProjectId()+"&PARID="+proProjectInfoSubdeptsUsers.getId(), accessToken);
}
proProjectInfoSubdeptsUsers.setQrCode(profilePath);
proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
}catch (Exception e){
log.error(e.getMessage());
}
}
uniService.syncUniUser(user.getUserId(),proProjectInfoSubdeptsUsers.getProjectId());
return proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
return res;
}
/**
*
*
* @param proProjectInfoSubdeptsUsers
* @return
*/
@Override
@Transactional
public ProProjectInfoSubdeptsUsers insertProProjectInfoSubdeptsUsersWX(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers){
ProProjectInfoSubdeptsUsers parUsers = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersById(proProjectInfoSubdeptsUsers.getParId());
if(Objects.isNull(parUsers)){
throw new ServiceException("用户信息异常...请重新扫码");
}
SysUser user = proProjectInfoSubdeptsUsers.getUser();
proProjectInfoSubdeptsUsers.setComId(parUsers.getComId());
proProjectInfoSubdeptsUsers.setProjectId(parUsers.getProjectId());
proProjectInfoSubdeptsUsers.setSubDeptId(parUsers.getSubDeptId());
proProjectInfoSubdeptsUsers.setSubDeptName(parUsers.getSubDeptName());
proProjectInfoSubdeptsUsers.setSubDeptType(parUsers.getSubDeptType());
proProjectInfoSubdeptsUsers.setUseStatus(UseStateEnums.AW.getCode());
proProjectInfoSubdeptsUsers.setCreateBy(DataSourceEnuns.APP.getInfo());
proProjectInfoSubdeptsUsers.setCreateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsUsers.setSubStep(1L);
proProjectInfoSubdeptsUsers.setApproveStatus(ApproveStatus.await.getCode());
// 班组信息处理
if(Objects.nonNull(proProjectInfoSubdeptsUsers.getUserPost())){
// 班组长新增班组
if(Objects.equals(proProjectInfoSubdeptsUsers.getUserPost(), UserPostEnums.BZZ.getCode())){
ProProjectInfoSubdeptsGroup query = new ProProjectInfoSubdeptsGroup();
query.setProjectId(proProjectInfoSubdeptsUsers.getProjectId());
query.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
query.setCraftPost(proProjectInfoSubdeptsUsers.getCraftPost());
List<ProProjectInfoSubdeptsGroup> proSubdeptsGroupList = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(query);
ProProjectInfoSubdeptsGroup proSubdeptsGroup = new ProProjectInfoSubdeptsGroup();
proSubdeptsGroup.setComId(proProjectInfoSubdeptsUsers.getComId());
proSubdeptsGroup.setProjectId(proProjectInfoSubdeptsUsers.getProjectId());
proSubdeptsGroup.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
proSubdeptsGroup.setSubDeptName(proProjectInfoSubdeptsUsers.getSubDeptName());
proSubdeptsGroup.setSubDeptType(proProjectInfoSubdeptsUsers.getSubDeptType());
int count = proSubdeptsGroupList.size()+1;
String pre = Objects.equals(proProjectInfoSubdeptsUsers.getCraftType(), CraftTypeEnums.PYGZ.getCode())?"普通":"特殊";
String craftPostName = DictUtils.getDictLabel("pro_craft_post",proProjectInfoSubdeptsUsers.getCraftPost());
proSubdeptsGroup.setGroupName(pre+craftPostName+"班组"+count);
proSubdeptsGroup.setCraftType(proProjectInfoSubdeptsUsers.getCraftType());
proSubdeptsGroup.setCraftPost(proProjectInfoSubdeptsUsers.getCraftPost());
proSubdeptsGroup.setGroupLeaderName(user.getNickName());
proSubdeptsGroup.setGroupLeaderCode(user.getCardCode());
proSubdeptsGroup.setGroupLeaderPhone(user.getPhonenumber());
proSubdeptsGroup.setUseStatus(UseStateEnums.AW.getCode());
proSubdeptsGroup.setApproveStatus(ApproveStatus.await.getCode());
proSubdeptsGroup.setCreateBy(DataSourceEnuns.APP.getInfo());
proSubdeptsGroup.setCreateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsGroupMapper.insertProProjectInfoSubdeptsGroup(proSubdeptsGroup);
proProjectInfoSubdeptsUsers.setSubDeptGroup(proSubdeptsGroup.getId());
proProjectInfoSubdeptsUsers.setSubDeptGroupName(proSubdeptsGroup.getGroupName());
}else if(Objects.equals(proProjectInfoSubdeptsUsers.getUserPost(), UserPostEnums.LWGR.getCode())){
// 劳务人员绑定班组信息
proProjectInfoSubdeptsUsers.setSubDeptGroup(parUsers.getSubDeptGroup());
proProjectInfoSubdeptsUsers.setSubDeptGroupName(parUsers.getSubDeptGroupName());
}
}
// 完善人员信息...
user.setUserName(proProjectInfoSubdeptsUsers.getPhoneNumber());
user.setPhonenumber(proProjectInfoSubdeptsUsers.getPhoneNumber());
user.setUserType(UserTypeEnums.FBRY.getCode());
user.setCardType(CardTypeEnums.SFZ.getCode());
user.setSex(StringUtils.judgeGender(user.getCardCode()));
user.setCreateBy(DataSourceEnuns.APP.getInfo());
user.setCreateTime(DateUtils.getNowDate());
Long userId = remoteUserService.registerUserInfo(user, SecurityConstants.INNER).getData();
proProjectInfoSubdeptsUsers.setUserId(userId);
proProjectInfoSubdeptsUsersMapper.insertProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
return proProjectInfoSubdeptsUsers;
}
/**
@ -115,21 +227,136 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
@Override
public int updateProProjectInfoSubdeptsUsers(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers)
{
proProjectInfoSubdeptsUsers.setUpdateBy(SecurityUtils.getUsername());
proProjectInfoSubdeptsUsers.setUpdateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsUsers.setUpdateBy(SecurityContextHolder.getUserName());
SysUser user=proProjectInfoSubdeptsUsers.getUser();
if(user.getUserId()==null||user.getUserId().intValue()==0){
Long userId= remoteUserService.registerUserInfo(user, SecurityConstants.INNER).getData();
user.setUserId(userId);
proProjectInfoSubdeptsUsers.setUserId(userId);
}else{
remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData();
}
uniService.syncUniUser(user.getUserId(),proProjectInfoSubdeptsUsers.getProjectId());
SysUser user = proProjectInfoSubdeptsUsers.getUser();
Long userId = remoteUserService.registerUserInfo(user, SecurityConstants.INNER).getData();
proProjectInfoSubdeptsUsers.setUserId(userId);
uniService.syncUniUser(userId,proProjectInfoSubdeptsUsers.getProjectId());
return proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
}
/**
*
*
* @param proProjectInfoSubdeptsUsers
* @return
*/
@Override
@Transactional
public ProProjectInfoSubdeptsUsers updateProProjectInfoSubdeptsUsersWX(ProProjectInfoSubdeptsUsers proProjectInfoSubdeptsUsers)
{
ProProjectInfoSubdeptsUsers parUsers = proProjectInfoSubdeptsUsersMapper.selectProProjectInfoSubdeptsUsersById(proProjectInfoSubdeptsUsers.getParId());
if(Objects.isNull(parUsers)){
throw new ServiceException("用户信息异常...请重新扫码");
}
SysUser user = proProjectInfoSubdeptsUsers.getUser();
proProjectInfoSubdeptsUsers.setComId(parUsers.getComId());
proProjectInfoSubdeptsUsers.setProjectId(parUsers.getProjectId());
proProjectInfoSubdeptsUsers.setSubDeptId(parUsers.getSubDeptId());
proProjectInfoSubdeptsUsers.setSubDeptName(parUsers.getSubDeptName());
proProjectInfoSubdeptsUsers.setSubDeptType(parUsers.getSubDeptType());
proProjectInfoSubdeptsUsers.setUpdateBy(DataSourceEnuns.APP.getInfo());
proProjectInfoSubdeptsUsers.setUpdateTime(DateUtils.getNowDate());
if(Objects.isNull(proProjectInfoSubdeptsUsers.getSubStep()) || proProjectInfoSubdeptsUsers.getSubStep()<1){
proProjectInfoSubdeptsUsers.setSubStep(1L);
}
if(Objects.isNull(proProjectInfoSubdeptsUsers.getApproveStatus())){
proProjectInfoSubdeptsUsers.setApproveStatus(ApproveStatus.await.getCode());
}
// 班组信息处理
if(Objects.nonNull(proProjectInfoSubdeptsUsers.getUserPost())){
// 班组长新增班组
if(Objects.equals(proProjectInfoSubdeptsUsers.getUserPost(), UserPostEnums.BZZ.getCode())){
ProProjectInfoSubdeptsGroup query = new ProProjectInfoSubdeptsGroup();
query.setProjectId(proProjectInfoSubdeptsUsers.getProjectId());
query.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
query.setGroupLeaderPhone(user.getPhonenumber());
List<ProProjectInfoSubdeptsGroup> groupList = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(query);
if(StringUtils.isNotEmpty(groupList)){
ProProjectInfoSubdeptsGroup proSubdeptsGroup = groupList.get(0);
// 判断班组信息是否更新
if(!Objects.equals(proProjectInfoSubdeptsUsers.getCraftPost(),groupList.get(0).getCraftPost()) || !Objects.equals(proProjectInfoSubdeptsUsers.getSubDeptId(),groupList.get(0).getSubDeptId())){
ProProjectInfoSubdeptsGroup groupQuery = new ProProjectInfoSubdeptsGroup();
groupQuery.setProjectId(proProjectInfoSubdeptsUsers.getProjectId());
groupQuery.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
groupQuery.setCraftPost(proProjectInfoSubdeptsUsers.getCraftPost());
List<ProProjectInfoSubdeptsGroup> proSubdeptsGroupList = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(groupQuery);
proSubdeptsGroup.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
proSubdeptsGroup.setSubDeptName(proProjectInfoSubdeptsUsers.getSubDeptName());
proSubdeptsGroup.setSubDeptType(proProjectInfoSubdeptsUsers.getSubDeptType());
int count = proSubdeptsGroupList.size()+1;
String pre = Objects.equals(proProjectInfoSubdeptsUsers.getCraftType(), CraftTypeEnums.PYGZ.getCode())?"普通":"特殊";
String craftPostName = DictUtils.getDictLabel("pro_craft_post",proProjectInfoSubdeptsUsers.getCraftPost());
proSubdeptsGroup.setGroupName(pre+craftPostName+"班组"+count);
proSubdeptsGroup.setCraftType(proProjectInfoSubdeptsUsers.getCraftType());
proSubdeptsGroup.setCraftPost(proProjectInfoSubdeptsUsers.getCraftPost());
proSubdeptsGroup.setGroupLeaderName(user.getNickName());
proSubdeptsGroup.setGroupLeaderCode(user.getCardCode());
proSubdeptsGroup.setGroupLeaderPhone(user.getPhonenumber());
proSubdeptsGroup.setUpdateBy(DataSourceEnuns.APP.getInfo());
proSubdeptsGroup.setUpdateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsGroupMapper.updateProProjectInfoSubdeptsGroup(proSubdeptsGroup);
proProjectInfoSubdeptsUsers.setSubDeptGroup(proSubdeptsGroup.getId());
proProjectInfoSubdeptsUsers.setSubDeptGroupName(proSubdeptsGroup.getGroupName());
}else{
// 班组主要信息未变更时只修改班组长信息
proSubdeptsGroup.setGroupLeaderName(user.getNickName());
proSubdeptsGroup.setGroupLeaderCode(user.getCardCode());
proSubdeptsGroup.setGroupLeaderPhone(user.getPhonenumber());
proSubdeptsGroup.setUpdateBy(DataSourceEnuns.APP.getInfo());
proSubdeptsGroup.setUpdateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsGroupMapper.updateProProjectInfoSubdeptsGroup(proSubdeptsGroup);
}
}else{
ProProjectInfoSubdeptsGroup groupQuery = new ProProjectInfoSubdeptsGroup();
groupQuery.setProjectId(proProjectInfoSubdeptsUsers.getProjectId());
groupQuery.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
groupQuery.setCraftPost(proProjectInfoSubdeptsUsers.getCraftPost());
List<ProProjectInfoSubdeptsGroup> proSubdeptsGroupList = proProjectInfoSubdeptsGroupMapper.selectProProjectInfoSubdeptsGroupList(groupQuery);
ProProjectInfoSubdeptsGroup proSubdeptsGroup = new ProProjectInfoSubdeptsGroup();
proSubdeptsGroup.setComId(proProjectInfoSubdeptsUsers.getComId());
proSubdeptsGroup.setProjectId(proProjectInfoSubdeptsUsers.getProjectId());
proSubdeptsGroup.setSubDeptId(proProjectInfoSubdeptsUsers.getSubDeptId());
proSubdeptsGroup.setSubDeptName(proProjectInfoSubdeptsUsers.getSubDeptName());
proSubdeptsGroup.setSubDeptType(proProjectInfoSubdeptsUsers.getSubDeptType());
int count = proSubdeptsGroupList.size()+1;
String pre = Objects.equals(proProjectInfoSubdeptsUsers.getCraftType(), CraftTypeEnums.PYGZ.getCode())?"普通":"特殊";
String craftPostName = DictUtils.getDictLabel("pro_craft_post",proProjectInfoSubdeptsUsers.getCraftPost());
proSubdeptsGroup.setGroupName(pre+craftPostName+"班组"+count);
proSubdeptsGroup.setCraftType(proProjectInfoSubdeptsUsers.getCraftType());
proSubdeptsGroup.setCraftPost(proProjectInfoSubdeptsUsers.getCraftPost());
proSubdeptsGroup.setGroupLeaderName(user.getNickName());
proSubdeptsGroup.setGroupLeaderCode(user.getCardCode());
proSubdeptsGroup.setGroupLeaderPhone(user.getPhonenumber());
proSubdeptsGroup.setUseStatus(UseStateEnums.AW.getCode());
proSubdeptsGroup.setApproveStatus(ApproveStatus.await.getCode());
proSubdeptsGroup.setCreateBy(DataSourceEnuns.APP.getInfo());
proSubdeptsGroup.setCreateTime(DateUtils.getNowDate());
proProjectInfoSubdeptsGroupMapper.insertProProjectInfoSubdeptsGroup(proSubdeptsGroup);
proProjectInfoSubdeptsUsers.setSubDeptGroup(proSubdeptsGroup.getId());
proProjectInfoSubdeptsUsers.setSubDeptGroupName(proSubdeptsGroup.getGroupName());
}
}else if(Objects.equals(proProjectInfoSubdeptsUsers.getUserPost(), UserPostEnums.LWGR.getCode())){
// 劳务人员绑定班组信息
proProjectInfoSubdeptsUsers.setSubDeptGroup(parUsers.getSubDeptGroup());
proProjectInfoSubdeptsUsers.setSubDeptGroupName(parUsers.getSubDeptGroupName());
}
}
// 完善人员信息
user.setUserName(user.getPhonenumber());
user.setUserType(UserTypeEnums.FBRY.getCode());
user.setCardType(CardTypeEnums.SFZ.getCode());
user.setSex(StringUtils.judgeGender(user.getCardCode()));
user.setUpdateBy(DataSourceEnuns.APP.getInfo());
user.setUpdateTime(DateUtils.getNowDate());
Long userId = remoteUserService.registerUserInfo(user, SecurityConstants.INNER).getData();
proProjectInfoSubdeptsUsers.setUserId(userId);
proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proProjectInfoSubdeptsUsers);
return proProjectInfoSubdeptsUsers;
}
/**
*
@ -183,7 +410,7 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
*/
@Override
@Transactional
public void submitUserSignets(SignetFileVo signetFileVo) {
public ProProjectInfoSubdeptsUsers submitUserSignets(SignetFileVo signetFileVo) {
ProProjectInfoSubdeptsUsers query = new ProProjectInfoSubdeptsUsers();
query.setProjectId(signetFileVo.getProId());
query.setPhoneNumber(signetFileVo.getUserPhone());
@ -199,12 +426,6 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
if(StringUtils.isEmpty(proSubdeptsUser.getUserPost())){
throw new ServiceException("用户信息异常...");
}
// 工作流配置查询
List<Map<String, Object>> procdefDatas = proProjectInfoSubdeptsUsersMapper.findActReProcdefDept(proSubdeptsUser.getProjectId(),proSubdeptsUser.getUserPost());
if(StringUtils.isEmpty(procdefDatas)){
throw new ServiceException("工作流配置异常...请联系管理员配置");
}
String procDefId = Convert.toStr(procdefDatas.get(0).get("PROCDEF_ID_"));
// 生成安全承诺教育书...
BasTemplate querys = new BasTemplate();
@ -226,13 +447,16 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
String fileName = UUID.randomUUID() + ".pdf";
String filePath = DateUtils.datePath();
// 生成的签署文件地址
String saveWordFilePath = rootSavePath + filePath + fileName;
String saveEdusFilePath = ProfileConfig.profile + filePath + fileName;
String saveWordFilePath = rootSavePath + "/" +filePath + "/" + fileName;
String saveEdusFilePath = ProfileConfig.profile + "/" + filePath + "/" + fileName;
// 生成文件夹
File dirFile = FileUtils.getFile(rootSavePath + filePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
proSubdeptsUser.setSubStep(100L);
proSubdeptsUser.setEduSignPath(signetFileVo.getImgPath());
proSubdeptsUser.setEduFilePath(saveEdusFilePath);
// word文件转PDF文件
Map<String, Object> dataMap = getUserDataMap(proSubdeptsUser);
try {
@ -240,23 +464,28 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
}catch (Exception e){
throw new ServiceException("承诺书生成失败...服务器异常!!!");
}
proSubdeptsUser.setSubStep(100L);
proSubdeptsUser.setEduSignPath(signetFileVo.getImgPath());
proSubdeptsUser.setEduFilePath(saveEdusFilePath);
proSubdeptsUser.setApproveStatus(ApproveStatus.check.getCode());
// 判断是否需要审批...
if(Objects.nonNull(proSubdeptsUser.getApproveStatus()) && proSubdeptsUser.getApproveStatus()<ApproveStatus.check.getCode()){
proSubdeptsUser.setApproveStatus(ApproveStatus.check.getCode());
}
int res = proProjectInfoSubdeptsUsersMapper.updateProProjectInfoSubdeptsUsers(proSubdeptsUser);
if(res>0){
// 待审核时启动工作流审批
if(res>0 && Objects.equals(proSubdeptsUser.getApproveStatus(),ApproveStatus.check.getCode())){
// 工作流配置查询
List<Map<String, Object>> procdefDatas = proProjectInfoSubdeptsUsersMapper.findActReProcdefDept(proSubdeptsUser.getProjectId(),proSubdeptsUser.getUserPost());
if(StringUtils.isEmpty(procdefDatas)){
throw new ServiceException("工作流配置异常...请联系管理员配置");
}
String procDefId = Convert.toStr(procdefDatas.get(0).get("PROCDEF_ID_"));
// 启动工作流审批节点...
Map<String, Object> variables = new HashMap<>();
variables.put("INITIATOR",proSubdeptsUser.getUserId());
variables.put("userName",proSubdeptsUser.getUser().getNickName());
variables.put("businessKey",proSubdeptsUser.getId());
R<AjaxResult> result = remoteFlowService.startDefinitionByParams(procDefId,variables,SecurityConstants.INNER);
System.out.println("flowable.RESULT==>"+JSON.toJSONString(result));
if(Objects.isNull(result) || Objects.isNull(result.getData()) || result.getData().isError()){
throw new ServiceException("工作流启动失败...服务器异常!!!");
}
remoteFlowService.startDefinitionByParams(procDefId,variables,SecurityConstants.INNER);
}
return proSubdeptsUser;
}
/**
@ -269,10 +498,17 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
dataMap.put("fName",sysUser.getNickName());
dataMap.put("fSex",StringUtils.judgeGenderText(sysUser.getCardCode()));
dataMap.put("fAge",StringUtils.getAgeFromIdCard(sysUser.getCardCode()));
dataMap.put("fCode",sysUser.getCardCode());
dataMap.put("fIllnessStatus",Objects.equals(ShiFouEnums.FOU.getCode(),proSubdeptsUser.getIllnessStatus())?"无":"有");
dataMap.put("fSupIllnessStatus",Objects.equals(ShiFouEnums.FOU.getCode(),proSubdeptsUser.getSupIllnessStatus())?"无":"有");
dataMap.put("fCraftPost", DictUtils.getDictLabel("pro_craft_post",proSubdeptsUser.getCraftPost()));
dataMap.put("fUserSign", SignetKeyEnums.USER_SIGN.getCode());
dataMap.put("fDate", DateUtils.dateTimeNow("yyyy年MM月dd日"));
dataMap.put("fGroupName", proSubdeptsUser.getSubDeptGroupName());
dataMap.put("fGrade", DictUtils.getDictLabel("educational_type",proSubdeptsUser.getDegreeGrade()));
String userPicturePath = proSubdeptsUser.getUser().getUserPicture().replaceAll(ProfileConfig.profile, ProfileConfig.profilePath);
dataMap.put("fUserPicture", userPicturePath+".min.jpg");
String userSignPath = proSubdeptsUser.getEduSignPath().replaceAll(ProfileConfig.profile, ProfileConfig.profilePath);
dataMap.put("fUserSign", userSignPath+".sign.png.min.png");
dataMap.put("fGroupSign", SignetKeyEnums.GROUP_SIGN.getCode());
dataMap.put("fProjectSign", SignetKeyEnums.PROJECT_SIGN.getCode());
dataMap.put("fCompanySign", SignetKeyEnums.COMPANY_SIGN.getCode());

View File

@ -471,6 +471,7 @@ public class UniServiceImpl implements IUniService{
}
return 0l;
}
@Override
public Long syncUniUser(Long userId, Long projectId) {
SysUser user=remoteUserService.getSysUserInfo(userId, SecurityConstants.INNER).getData();
@ -530,13 +531,12 @@ public class UniServiceImpl implements IUniService{
}
user.setUserInfos(jo.toJSONString());
if(hasUpdate){
Long ret= remoteUserService.updateUserInfo(user,SecurityConstants.INNER).getData();
Long ret= remoteUserService.registerUserInfo(user,SecurityConstants.INNER).getData();
if(ret==null){
return 0l;
}
return ret.longValue();
}
return 0l;
}

View File

@ -1,304 +0,0 @@
package com.yanzhu.manage.utils.pdf;
import com.deepoove.poi.NiceXWPFDocument;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.policy.AbstractRenderPolicy;
import com.deepoove.poi.template.ElementTemplate;
import com.deepoove.poi.template.run.RunTemplate;
import com.yanzhu.common.core.text.Convert;
import com.yanzhu.common.core.utils.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import java.util.ArrayList;
import java.util.List;
/**
* ////////////////////////////////////////////////////////////////////
* // _ooOoo_
* // o8888888o
* // 88" . "88
* // (| ^_^ |)
* // O\ = /O
* // ____/`---'\____
* // .' \\| |// `.
* // / \\||| : |||// \
* // / _||||| -:- |||||- \
* // | | \\\ - /// | |
* // | \_| ''\---/'' | |
* // \ .-\__ `-` ___/-. /
* // ___`. .' /--.--\ `. . ___
* // ."" '< `.___\_<|>_/___.' >'"".
* // | | : `- \`.;`\ _ /`;.`/ - ` : | |
* // \ \ `-. \_ __\ /__ _/ .-` / /
* // ========`-.____`-.___\_____/___.-`____.-'========
* // `=---='
* // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* // 佛祖保佑 永无BUG 永不修改
* ////////////////////////////////////////////////////////////////////
*
* @ClassName MyTableRenderPolicy
* @Description table
* @Author JiangYuQi
* @DateTime 2021/6/8 16:50
* @Version 1.0
*/
public class MyTableRenderPolicy extends AbstractRenderPolicy<Object> {
@Override
public void doRender(RunTemplate runTemplate, Object data, XWPFTemplate template) throws Exception {
NiceXWPFDocument doc = template.getXWPFDocument();
List<String> dataList = (List<String>) data;
// 表格
List<XWPFTable> tables = this.getTable(doc, runTemplate); //当前表格
if (tables != null && tables.size() > 0) {
for (XWPFTable table : tables) {
Integer templateRowIndex = null;
List<XWPFTableRow> rows = table.getRows();
int index = 0, lastTemplateCellIndex = 0;
//计算模板所在行索引
for (XWPFTableRow row : rows) {
boolean isTemplateRow = false;
for (XWPFTableCell tableCell : row.getTableCells()) {
if (tableCell.getText().indexOf("%") > -1) {
isTemplateRow = true;
break;
}
}
if (isTemplateRow) {
templateRowIndex = index;
break;
}
index++;
}
if (StringUtils.isNull(templateRowIndex)) {
continue;
}
XWPFTableRow templateRow = table.getRow(templateRowIndex); //模板行
index = 0;
//计算模板行最后模板参数列索引
for (XWPFTableCell tableCell : templateRow.getTableCells()) {
index++;
if (tableCell.getText().indexOf("%") > -1) {
lastTemplateCellIndex = index;
}
}
lastTemplateCellIndex = lastTemplateCellIndex - 1;
Integer nowCellIndex = this.getNowCellIndex(templateRow.getTableCells(), runTemplate);
if (nowCellIndex != null) {
List<String> verticallyList = new ArrayList<>();
List<String> horizontalList = new ArrayList<>();
for (int i = 0; i < dataList.size(); i++) {
int nowRowsSize = table.getNumberOfRows(); //当前表格的行数
int nowRowIndex = i + templateRowIndex + 1;
if (nowRowsSize - 1 < nowRowIndex) {
XWPFTableRow newCreateRow = table.createRow();
CopyTableRow(newCreateRow, templateRow);// 复制模板行文本和样式到新行
}
XWPFTableCell cell = table.getRow(nowRowIndex).getCell(nowCellIndex);
//赋值时候判断是否有合并,找出横纵项的合并参数
String text = Convert.toStr(dataList.get(i));
if (StringUtils.isNotEmpty(text) && (text.startsWith("Vertically:") || text.startsWith("Horizontal:"))) {
if (text.startsWith("Vertically:")) {
verticallyList.add(nowCellIndex + "-" + text.split(":")[1]);
}
if (text.startsWith("Horizontal:")) {
horizontalList.add(nowRowIndex + "-" + text.split(":")[1]);
}
} else {
setCellText(cell,text);
}
}
//纵向合并
if (StringUtils.isNotNull(verticallyList) && verticallyList.size() > 0) {
verticallyList.forEach(vertically -> {
String[] params = vertically.split("-");
mergeCellsVertically(table, Convert.toInt(params[0]), Convert.toInt(params[1]) + 1, Convert.toInt(params[2]) + 1);
});
}
//横向合并
if (StringUtils.isNotNull(horizontalList) && horizontalList.size() > 0) {
horizontalList.forEach(horizontal -> {
String[] params = horizontal.split("-");
mergeCellsHorizontal(table, Convert.toInt(params[0]) , Convert.toInt(params[1]), Convert.toInt(params[2]));
});
}
//当模板参数渲染完后删除模板行
if (StringUtils.isNotNull(templateRowIndex) && lastTemplateCellIndex == nowCellIndex) {
table.removeRow(templateRowIndex);
}
}
}
}
}
/**
* @description:
* @author: wangjunsheng
* @date: 2022/9/9 17:21
* @param: cell
* @param: text
**/
private void setCellText(XWPFTableCell cell, String text) {
if (text.indexOf("\n") != -1) {
XWPFRun run = cell.getParagraphs().get(0).createRun();
String[] textArr = text.split("\n");
for (int k = 0; k < textArr.length; k++) {
if (k == 0) {
run.setText(textArr[k].trim());
} else {
run.addBreak();
run.setText(textArr[k].trim());
}
}
} else {
cell.setText(text);
}
}
/**
* @Description:
*/
public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
if (rowIndex == fromRow) {
// 设置起始合并位置
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
} else {
// 设置继续合并位置
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
}
}
}
/**
* @Description:
*/
public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {
for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {
XWPFTableCell cell = table.getRow(row).getCell(cellIndex);
if (cellIndex == fromCell) {
// 设置起始合并位置
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
} else {
// 设置继续合并位置
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
}
}
}
/**
* @Description:
* @Param: [eleTemplate]
* @return: int
* @Author: JiangYuQi
* @Date: 2019/8/8 17:42
*/
private Integer getNowCellIndex(List<XWPFTableCell> templateCells, ElementTemplate eleTemplate) {
Integer nowCellIndex = null;
int index = 0;
for (XWPFTableCell cell : templateCells) {
if (cell.getText().contains(eleTemplate.getTagName())) {
nowCellIndex = index;
break;
}
index++;
}
return nowCellIndex;
}
/**
* @Description: table
* @Param: [doc, eleTemplate]
* @return: org.apache.poi.xwpf.usermodel.XWPFTable
* @Author: JiangYuQi
* @Date: 2019/8/8 17:42
*/
private List<XWPFTable> getTable(NiceXWPFDocument doc, ElementTemplate eleTemplate) {
List<XWPFTable> resultTables = new ArrayList<XWPFTable>();
List<XWPFTable> tables = doc.getTables();
for (XWPFTable t : tables) {
if (t.getText().contains(eleTemplate.getTagName())) {
resultTables.add(t);
}
}
return resultTables;
}
/**
* XWPFTableRow
*
* @param target XWPFTableRow
* @param source XWPFTableRow
*/
private void CopyTableRow(XWPFTableRow target, XWPFTableRow source) {
// 复制样式
target.getCtRow().setTrPr(source.getCtRow().getTrPr());
// 复制单元格
for (int i = 0; i < source.getTableCells().size(); i++) {
copyTableCell(target.getCell(i), source.getCell(i));
}
}
/**
* XWPFTableCell
*
* @param newTableCell
* @param templateTableCell
* @author Juveniless
* @date 20171127 3:41:02
*/
private void copyTableCell(XWPFTableCell newTableCell, XWPFTableCell templateTableCell) {
// 列属性
newTableCell.getCTTc().setTcPr(templateTableCell.getCTTc().getTcPr());
// 删除目标 targetCell 所有文本段落
for (int pos = 0; pos < newTableCell.getParagraphs().size(); pos++) {
newTableCell.removeParagraph(pos);
}
// 添加新文本段落
for (XWPFParagraph sp : templateTableCell.getParagraphs()) {
XWPFParagraph targetP = newTableCell.addParagraph();
copyParagraph(targetP, sp);
if (templateTableCell.getText().indexOf("%") < 0) {
newTableCell.setText(templateTableCell.getText());
}
}
}
/**
* XWPFParagraph
*
* @param newParagraph
* @param templateParagraph
* @author Juveniless
* @date 20171127 3:43:08
*/
private void copyParagraph(XWPFParagraph newParagraph, XWPFParagraph templateParagraph) {
// 设置段落样式
newParagraph.getCTP().setPPr(templateParagraph.getCTP().getPPr());
// 添加Run标签
for (int pos = 0; pos < newParagraph.getRuns().size(); pos++) {
newParagraph.removeRun(pos);
}
for (XWPFRun s : templateParagraph.getRuns()) {
XWPFRun targetrun = newParagraph.createRun();
CopyRun(targetrun, s);
}
}
/**
* run
*
* @param newRun
* @param templateRun
* @author Juveniless
* @date 20171127 3:47:17
*/
private void CopyRun(XWPFRun newRun, XWPFRun templateRun) {
newRun.getCTR().setRPr(templateRun.getCTR().getRPr());
}
}

View File

@ -57,19 +57,18 @@ public class PoiUtil {
* @Author: JiangYuQi
* @Date: 2019/8/8 11:54
*/
public static void createWordByWordTemplate(String wordTemplateFilePath, String saveWordFilePath, Map<String, Object> dataMap) throws Exception {
if (StringUtils.isNotEmpty(wordTemplateFilePath) && StringUtils.isNotEmpty(saveWordFilePath)&&saveWordFilePath.endsWith(".docx")) {
public static void createWordByWordTemplate(String wordTemplateFilePath, String saveWordFilePath, Map<String, Object> dataMap) throws Exception
{
if (StringUtils.isNotEmpty(wordTemplateFilePath) && StringUtils.isNotEmpty(saveWordFilePath) && saveWordFilePath.endsWith(".docx")) {
try {
dataMap = formatMap(dataMap);
Configure.ConfigureBuilder builder = Configure.newBuilder();
builder.addPlugin('%', new MyTableRenderPolicy());
//builder.addPlugin('&', new ShangWuBiaoTableRenderPolicy());
XWPFTemplate template = XWPFTemplate.compile(wordTemplateFilePath, builder.build()).render(dataMap);
FileOutputStream out = FileUtils.openOutputStream(FileUtils.getFile(saveWordFilePath));
template.write(out);
out.flush();
out.close();
XWPFTemplate template = XWPFTemplate.compile(wordTemplateFilePath);
// 填充数据
template.render(dataMap);
// 输出生成的文档
try (FileOutputStream out = new FileOutputStream(saveWordFilePath)) {
template.write(out);
}
template.close();
} catch (IOException e) {
e.printStackTrace();

View File

@ -1,191 +0,0 @@
package com.yanzhu.manage.utils.pdf;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import com.deepoove.poi.util.TableTools;
import com.yanzhu.common.core.utils.StringUtils;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import java.util.List;
import java.util.Map;
/**
* ////////////////////////////////////////////////////////////////////
* // _ooOoo_
* // o8888888o
* // 88" . "88
* // (| ^_^ |)
* // O\ = /O
* // ____/`---'\____
* // .' \\| |// `.
* // / \\||| : |||// \
* // / _||||| -:- |||||- \
* // | | \\\ - /// | |
* // | \_| ''\---/'' | |
* // \ .-\__ `-` ___/-. /
* // ___`. .' /--.--\ `. . ___
* // ."" '< `.___\_<|>_/___.' >'"".
* // | | : `- \`.;`\ _ /`;.`/ - ` : | |
* // \ \ `-. \_ __\ /__ _/ .-` / /
* // ========`-.____`-.___\_____/___.-`____.-'========
* // `=---='
* // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* // 佛祖保佑 永无BUG 永不修改
* ////////////////////////////////////////////////////////////////////
*
* @ClassName MyJiShuBiaoTableRenderPolicy
* @Description
* @Author JiangYuQi
* @DateTime 2021/6/8 16:50
* @Version 1.0
*/
public class ShangWuBiaoTableRenderPolicy extends DynamicTableRenderPolicy {
// 列数
int cellNum = 8;
//行高
int rowHeight = 100;
float cellWidths[]={9f,3f,3f,3f,3f,3f,3f}; //列宽单位CM
@Override
public void render(XWPFTable table, Object data) {
createTable2(table, data);
}
private void createTable1(XWPFTable table, Object data) {
if (StringUtils.isNull(data)) {
return;
}
Map<String, Object> shangWuBiaoTableMap = (Map<String, Object>) data;
table.removeRow(0);
/**************************创建表头-开始********************************/
TableTools.widthTable(table,cellWidths);
XWPFTableRow titleNewRow = table.insertNewTableRow(0);
table.setCellMargins(5 ,2,5,2);
titleNewRow.setHeight(rowHeight);
for (int i = 0; i < cellNum; i++) {
XWPFTableCell cell = titleNewRow.createCell();
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
switch (i) {
case 0:
cell.setText("序号");
break;
case 1:
cell.setText("供应商名称");
break;
case 2:
cell.setText("最终报价");
break;
case 3:
cell.setText("价格扣除");
break;
case 4:
cell.setText("评审报价");
break;
case 5:
cell.setText("最终报价基准");
break;
case 6:
cell.setText("最终报价得分");
break;
case 7:
cell.setText("报价总分");
break;
}
}
/**************************创建表头-结束********************************/
/**************************创建公司商务标行并赋值-开始********************************/
if (StringUtils.isNotEmpty(shangWuBiaoTableMap)) {
List<Map<String, Object>> gongSiShangWuBiaoList = (List<Map<String, Object>>) shangWuBiaoTableMap.get("gongSiShangWuBiaoList");
if (StringUtils.isNotEmpty(gongSiShangWuBiaoList)) {
int rowIndex = 1; //行所以
for (Map<String, Object> gongSiShangWuBiao : gongSiShangWuBiaoList) {
XWPFTableRow newRow = table.insertNewTableRow(rowIndex);
newRow.setHeight(rowHeight);
for (int i = 0; i < cellNum; i++) {
XWPFTableCell cell = newRow.addNewTableCell();
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
switch (i) {
case 0:
cell.setText(rowIndex + "");
break;
case 1://公司名称
cell.setText(toStirng(gongSiShangWuBiao.get("GSMC")));
break;
case 2: //最终报价
cell.setText(toStirng(gongSiShangWuBiao.get("ZZBJ"))+"元");
break;
case 3: //价格扣除
cell.setText(toStirng(gongSiShangWuBiao.get("JGKC")));
break;
case 4: //评审报价
cell.setText(toStirng(gongSiShangWuBiao.get("PSBJ"))+"元");
break;
case 5: //最终报价基准
break;
case 6: //最终报价得分
cell.setText(toStirng(gongSiShangWuBiao.get("ZZBJDF")));
break;
case 7: //报价总分
cell.setText(toStirng(gongSiShangWuBiao.get("BJDF")));
break;
}
}
rowIndex++;
}
//合并最终报价基准行
TableTools.mergeCellsVertically(table, 5, 1, rowIndex - 1);
//最终报价基准赋值
XWPFTableCell zzbjjzCell = table.getRow(1).getCell(5);
zzbjjzCell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
zzbjjzCell.setText(toStirng(shangWuBiaoTableMap.get("ZZBJJZ"))+"元");
}
}
/**************************创建公司商务标行并赋值-开始********************************/
}
private void createTable2(XWPFTable table, Object data) {
if (StringUtils.isNull(data)) {
return;
}
Map<String, Object> ZZBJJZMap = (Map<String, Object>) data;
String ZZBJJZ = toStirng(ZZBJJZMap.get("ZZBJJZ"));
int GSSIZE = ZZBJJZMap.get("GSSIZE")==null?0:Integer.parseInt(toStirng(ZZBJJZMap.get("GSSIZE")));
//合并最终报价基准行
TableTools.mergeCellsVertically(table, 5, 1, GSSIZE+1);
XWPFTableCell cell = table.getRow(2).getCell(5);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
cell.setText(ZZBJJZ);
}
/***
* @param obj
* @return java.lang.String
* @exception
* @Author JiangYuQi
* @Description
* @Date 2022/6/15 16:27
**/
private String toStirng(Object obj)
{
if(obj!=null && "null".equals(obj)){
return "";
}else{
return obj.toString();
}
}
}

View File

@ -1,146 +1,19 @@
{
"default": {
"heTongBianHao":"HT12345678910112",
"yiFangMingCheng":"张三丰",
"yiFangDaiMa": "61042719900625****",
"sflb":"身份证号",
"heTongShiChang":"12",
"ksn": "2023",
"ksy":"02",
"ksr": "13",
"jsn": "2024",
"jsy": "02",
"jsr": "14",
"youHuiBiLi":79,
"buChongTiaoKuan": "",
"jfgz":"[serviceKeyWord]",
"yfgz":"[userKeyWord]",
"jfqdsj": "[待甲方签订]",
"yfqdsj": "[待乙方签订]",
"lianXiDianHua": "181****8536",
"muQianJingYing":"",
"yinHangKaHao":"",
"kaiHuHang":"",
"kaiHuHangHangHao":"",
"daiXiaoFeiBiLi":"",
"sheBeiXingHao":"",
"sheBeiBianHao":"",
"sheBeiYaJin":"",
"yaJinPiaoHao":"",
"zhanDianXiangXiDiZhi":"",
"cnsKeyWord": "[cnsKeyWord]",
"cnsKeyDate": "[cnsKeyDate]",
"jfzg": "[JFZG]"
},
"tzzht": {
"zhanDianBianHao": "6124211",
"yiFangMingCheng":"张三丰",
"yiFangXingBie":"男",
"yiFangDaiMa":"61042719900625****",
"chuShengRiQi":"1990-06-25",
"huKouSuoZaiDi": "陕西省彬县*********",
"zhuSuoDiZhi": "陕西省西安市三桥街道******",
"tongXunDiZhi": "陕西省西安市三桥街道******",
"yFLianXiDianHua": "18740352322",
"businessAddress": "陕西省西安市三桥街道******127号A座101",
"yFYouBian": "",
"shiMingCheng": "西安市",
"city":"西安",
"quXianMingCheng": "未央",
"xiangXiDiZhi": "陕西省西安市三桥街道******127号A座101",
"daiXiaoLeiXingMingCheng": "乐透数字型、即开型福利彩票",
"daiXiaoQiXian":1,
"ksn": "2023",
"ksy":"02",
"ksr": "13",
"jsn": "2024",
"jsy": "02",
"jsr": "14",
"sz":"[SZ]",
"jfgz":"[serviceKeyWord]",
"jfdbr":"[jfdbrKeyWord]",
"jfwtdlr":"[jfwtdlrKeyWord]",
"yfgz":"[userKeyWord]",
"yfyj": "[yfyjKeyWord]",
"jfqdsj": "[待甲方签订]",
"yfqdsj": "[待乙方签订]",
"cnsKeyWord": "[cnsKeyWord]",
"cnsKeyDate": "[cnsKeyDate]",
"LTSZDXF": "",
"JKYXDXF": "",
"JFWYJBFB": "",
"JFWYJZGBFB": "",
"JFZZWYJBFB": "",
"JFZZWYJZGBFB": "",
"YFWYJBFB": "",
"YFWYJZGBFB": ""
},
"zsght": {
"heTongBianHao":"HT12345678910112",
"yiFangMingCheng":"张三丰",
"yiFangDaiMa": "61042719900625****",
"sflb":"身份证号",
"heTongShiChang":12,
"ksn": "2023",
"ksy":"02",
"ksr": "13",
"jsn": "2024",
"jsy": "02",
"jsr": "14",
"sheBeiYaJin":"1000",
"youHuiBiLi":91.5,
"jfgz":"[serviceKeyWord]",
"yfgz":"[userKeyWord]",
"jfqdsj": "[待甲方签订]",
"yfqdsj": "[待乙方签订]",
"lianXiDianHua":"181891385**",
"muQianJingYing":"",
"yinHangKaHao":"",
"kaiHuHang":"",
"zhanDianXiangXiDiZhi":"",
"kaiHuHangHangHao":"",
"daiXiaoFeiBiLi":"",
"cnsKeyWord": "[cnsKeyWord]",
"cnsKeyDate": "[cnsKeyDate]",
"sheBeiXingHao":"",
"sheBeiBianHao":"",
"yaJinPiaoHao":"",
"hangYeLeiXing":"",
"xiaoShouDiZhi":""
},
"bjzdht": {
"heTongBianHao":"HT12345678910112",
"yiFangMingCheng":"张三丰",
"yiFangDaiMa": "61042719900625****",
"sflb":"身份证号",
"heTongShiChang":12,
"ksn": "2023",
"ksy":"02",
"ksr": "13",
"jsn": "2024",
"jsy": "02",
"jsr": "14",
"sheBeiYaJin":"1000",
"youHuiBiLi":91.5,
"jfgz":"[serviceKeyWord]",
"yfgz":"[userKeyWord]",
"jfqdsj": "[待甲方签订]",
"yfqdsj": "[待乙方签订]",
"lianXiDianHua":"181891385**",
"muQianJingYing":"",
"yinHangKaHao":"",
"kaiHuHang":"",
"zhanDianXiangXiDiZhi":"",
"kaiHuHangHangHao":"",
"daiXiaoFeiBiLi":"",
"cnsKeyWord": "[cnsKeyWord]",
"cnsKeyDate": "[cnsKeyDate]",
"sheBeiXingHao":"",
"sheBeiBianHao":"",
"yaJinPiaoHao":"",
"hangYeLeiXing":"",
"xiaoShouDiZhi":""
"fName": "张三丰",
"fSex": "男",
"fAge": "32",
"fCode": "61042719900625****",
"fIllnessStatus": "无",
"fSupIllnessStatus": "无",
"fCraftPost": "木工",
"fDate": "2025年01月01日",
"fGroupName": "普通木工班组1",
"fGrade": "高中",
"fUserPicture": "https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/userPicture.jpg",
"fUserSign": "https://guangzhou.sxyanzhu.com/YZLJXM/profile/static/userSign.png",
"fGroupSign": "[GROUP-SIGN]",
"fProjectSign": "[PROJECT-SIGN]",
"fCompanySign": "[COMPANY-SIGN]"
}
}
}

View File

@ -3,7 +3,7 @@ import {
} from '../utils/request'
// 查询项目信息详细
export function getProjectInfo(id) {
export function findProjectInfo(id) {
return request({
url: '/manage/wxApi/findProject/' + id,
method: 'get'
@ -33,4 +33,21 @@ export function findProSubDeptsUser(proId, phoneNumber) {
url: '/manage/wxApi/findProSubDeptsUser?proId=' + proId + '&phoneNumber=' + phoneNumber,
method: 'get'
})
}
// 查询项目参建单位人员
export function findProSubDeptsUserById(id) {
return request({
url: '/manage/wxApi/findProSubDeptsUser/' + id,
method: 'get'
})
}
// 新增项目参建单位人员
export function registerSubDeptsUsers(data) {
return request({
url: '/manage/wxApi/registerSubDeptsUsers',
method: 'post',
data: data
})
}

View File

@ -1,5 +1,13 @@
import {request} from '../utils/request'
// 查询数据字典缓存
export function findDictCache(key) {
return request({
url: '/manage/wxApi/findDictCache/'+key,
method: 'get'
})
}
// 获取用户详细信息
export function getUserInfo() {
return request({

View File

@ -52,11 +52,6 @@ App({
})
}
this.autoUpdate();
//防卡死定时器
setInterval(() => {
wx.hideLoading();
}, 30000);
/**
* 初始化页面未登录时跳转到登录页
@ -80,6 +75,15 @@ App({
},
/**
* 安全加载
*/
securityLoading(){
setTimeout(() => {
wx.hideLoading();
}, 60000);
},
//页面弹窗
toast: function (msg, type) {
wx.showToast({

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,7 @@
</view>
</view>
<view wx:if="{{userPhoneNumber && active==0}}">
<view wx:if="{{signType=='1'}}">
<view wx:if="{{userPost=='1'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
@ -92,7 +92,7 @@
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">进入场地时间</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择进入场地时间" time="{{form.useDates}}" bindchange="onInputTime1"></voucher-date>
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择进入场地时间" time="{{form.useDates}}" bindchange="onInputTime0"></voucher-date>
</view>
</view>
<view class="inspect_info_list">
@ -159,15 +159,21 @@
<input placeholder="请填写委托代理人联系电话" placeholder-style="color:#6777aa;" bindinput="subDeptLeaderPhone" model:value="{{form.subDeptLeaderPhone}}" disabled class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">代理人文化程度</view>
<view class="inspect_info_content">
<voucher-select columns="{{eduCationalType}}" placeholder="请选择代理人文化程度" bindchange="onLeaderDegreeGrade" selectValue="{{form.leaderDegreeGrade}}"></voucher-select>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubDeptValues">下 一 步</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubDeptValues">信 息 登 记</view>
</view>
</view>
</view>
<view wx:if="{{signType=='2'}}">
<view wx:if="{{userPost=='2'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
@ -180,13 +186,13 @@
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" model:value="{{form.subDeptName}}" class="inspect_input_fill_in" disabled />
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" model:value="{{parForm.subDeptName}}" class="inspect_input_fill_in" disabled />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">岗位类型</view>
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">岗位级别</view>
<view class="inspect_info_content">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
<voucher-select columns="{{userPostList}}" placeholder="请选择岗位级别" selectValue="{{form.userPost}}"></voucher-select>
</view>
</view>
<view class="inspect_info_list">
@ -195,14 +201,14 @@
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload7" iconClass="in-zcard-click" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadCardImgPos" iconClass="in-zcard-click" limit="{{limit}}" fileUrlArray="{{form.user.cardImgPos}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload8" iconClass="in-fcard-click" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadCardImgInv" iconClass="in-fcard-click" limit="{{limit}}" fileUrlArray="{{form.user.cardImgInv}}"></file-uploader>
</view>
</van-col>
</van-row>
@ -212,7 +218,7 @@
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadUserPicture" limit="{{limit}}" fileUrlArray="{{form.user.userPicture}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
@ -220,66 +226,65 @@
<text style="font-size: small; color: antiquewhite;">[需加盖劳务单位的公章委托书照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadDeptPower" limit="{{limit}}" fileUrlArray="{{form.subDeptPowerPath}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">项目经理姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写项目经理姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写项目经理姓名" placeholder-style="color:#6777aa;" bindinput="inputUserName" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.nickName}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">项目经理身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写项目经理身份证号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写项目经理身份证号" placeholder-style="color:#6777aa;" bindinput="inputUserCode" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.cardCode}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">项目经理联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写项目经理联系电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写项目经理联系电话" placeholder-style="color:#6777aa;" model:value="{{form.phoneNumber}}" disabled class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯民族</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯民族" placeholder-style="color:#6777aa;" bindinput="inputOriginNative" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.nativePlace}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯地址</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">详细地址</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写详细地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">所属民族</view>
<view class="inspect_info_content">
<input placeholder="请填写所属民族" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<textarea class="add_textarea" placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="inputOriginAddress" model:value="{{form.user.address}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputUrgentUser" class="inspect_input_fill_in" model:value="{{form.user.emergencyContact}}" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人电话</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputUrgentUserPhone" class="inspect_input_fill_in" model:value="{{form.user.contactPhone}}" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">文化程度</view>
<view class="inspect_info_content">
<voucher-select columns="{{eduCationalType}}" placeholder="请选择文化程度" bindchange="onDegreeGrade" selectValue="{{form.degreeGrade}}"></voucher-select>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">下 一 步</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">信 息 登 记</view>
</view>
</view>
</view>
<view wx:if="{{signType=='3'}}">
<view wx:if="{{userPost=='3'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
@ -292,13 +297,13 @@
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" model:value="{{parForm.subDeptName}}" class="inspect_input_fill_in" disabled />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">岗位类型</view>
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">岗位级别</view>
<view class="inspect_info_content">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
<voucher-select columns="{{userPostList}}" placeholder="请选择岗位级别" selectValue="{{form.userPost}}"></voucher-select>
</view>
</view>
<view class="inspect_info_list">
@ -306,10 +311,10 @@
<view class="inspect_info_content">
<van-row>
<van-col span="8">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
<voucher-select columns="{{craftTypeList}}" bindchange="onChageCraftType" placeholder="请选择工种类型" selectValue="{{form.craftType}}"></voucher-select>
</van-col>
<van-col span="16">
<voucher-select columns="{{craftPostList}}" placeholder="请选择岗位类型" selectValue="{{form.craftPost}}"></voucher-select>
<voucher-select columns="{{craftPostList}}" bindchange="onChageCraftPost" placeholder="请选择工种岗位" selectValue="{{form.craftPost}}"></voucher-select>
</van-col>
</van-row>
</view>
@ -332,14 +337,14 @@
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-zcard-click" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadCardImgPos" iconClass="in-zcard-click" limit="{{limit}}" fileUrlArray="{{form.user.cardImgPos}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-fcard-click" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadCardImgInv" iconClass="in-fcard-click" limit="{{limit}}" fileUrlArray="{{form.user.cardImgInv}}"></file-uploader>
</view>
</van-col>
</van-row>
@ -349,7 +354,7 @@
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadUserPicture" limit="{{limit}}" fileUrlArray="{{form.user.userPicture}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
@ -357,72 +362,66 @@
<text style="font-size: small; color: antiquewhite;">[需加盖劳务单位的公章委托书照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadDeptPower" limit="{{limit}}" fileUrlArray="{{form.subDeptPowerPath}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写姓名" placeholder-style="color:#6777aa;" bindinput="inputUserName" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.nickName}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写身份证号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写身份证号" placeholder-style="color:#6777aa;" bindinput="inputUserCode" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.cardCode}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写联系电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写联系电话" placeholder-style="color:#6777aa;" model:value="{{form.phoneNumber}}" disabled class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">出生日期</view>
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯民族</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择出生日期" bindchange="onEndTime"></voucher-date>
<input placeholder="请填写籍贯民族" placeholder-style="color:#6777aa;" bindinput="inputOriginNative" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.nativePlace}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯地址</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">详细地址</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写详细地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">所属民族</view>
<view class="inspect_info_content">
<input placeholder="请填写所属民族" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<textarea class="add_textarea" placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="inputOriginAddress" model:value="{{form.user.address}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputUrgentUser" class="inspect_input_fill_in" model:value="{{form.user.emergencyContact}}" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人电话</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputUrgentUserPhone" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.contactPhone}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">文化程度</view>
<view class="inspect_info_content">
<voucher-select columns="{{eduCationalType}}" placeholder="请选择文化程度" bindchange="onDegreeGrade" selectValue="{{form.degreeGrade}}"></voucher-select>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">下 一 步</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">信 息 登 记</view>
</view>
</view>
</view>
<view wx:if="{{signType=='4'}}">
<view wx:if="{{userPost=='4'}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
@ -435,19 +434,19 @@
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">单位名称</view>
<view class="inspect_info_content">
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
<input placeholder="请填写单位名称" placeholder-style="color:#6777aa;" model:value="{{parForm.subDeptName}}" class="inspect_input_fill_in" disabled maxlength="30" disabled />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">班组名称</view>
<view class="inspect_info_content">
<input placeholder="请填写班组名称" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
<input placeholder="请填写班组名称" placeholder-style="color:#6777aa;" model:value="{{parForm.subDeptGroupName}}" class="inspect_input_fill_in" disabled maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">班组长姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写班组长姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" disabled maxlength="30" />
<input placeholder="请填写班组长姓名" placeholder-style="color:#6777aa;" model:value="{{parForm.user.nickName}}" class="inspect_input_fill_in" disabled maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
@ -456,14 +455,14 @@
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证正面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-zcard-click" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadCardImgPos" iconClass="in-zcard-click" limit="{{limit}}" fileUrlArray="{{form.user.cardImgPos}}"></file-uploader>
</view>
</van-col>
<van-col span="12">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">个人身份证反面
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" iconClass="in-fcard-click" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadCardImgInv" iconClass="in-fcard-click" limit="{{limit}}" fileUrlArray="{{form.user.cardImgInv}}"></file-uploader>
</view>
</van-col>
</van-row>
@ -473,79 +472,81 @@
<text style="font-size: small; color: antiquewhite;">[进场扫脸,请上传清晰照片]</text>
</view>
<view class="inspect_info_content">
<file-uploader bindimages="fileUpload" limit="{{limit}}"></file-uploader>
<file-uploader bindimages="fileUploadUserPicture" limit="{{limit}}" fileUrlArray="{{form.user.userPicture}}"></file-uploader>
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">姓名</view>
<view class="inspect_info_content">
<input placeholder="请填写姓名" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写姓名" placeholder-style="color:#6777aa;" bindinput="inputUserName" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.nickName}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">身份证号</view>
<view class="inspect_info_content">
<input placeholder="请填写身份证号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写身份证号" placeholder-style="color:#6777aa;" bindinput="inputUserCode" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.cardCode}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">联系电话</view>
<view class="inspect_info_content">
<input placeholder="请填写联系电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写联系电话" placeholder-style="color:#6777aa;" model:value="{{form.phoneNumber}}" disabled class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">出生日期</view>
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯民族</view>
<view class="inspect_info_content">
<voucher-date counts="5" maxDate="{{maxDate}}" placeholder="请选择出生日期" bindchange="onEndTime"></voucher-date>
<input placeholder="请填写籍贯民族" placeholder-style="color:#6777aa;" bindinput="inputOriginNative" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.nativePlace}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">籍贯地址</view>
<view class="inspect_info_content">
<input placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">详细地址</view>
<view class="inspect_info_content">
<textarea class="add_textarea" placeholder="请填写详细地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="onSubDeptCode" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">所属民族</view>
<view class="inspect_info_content">
<input placeholder="请填写所属民族" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<textarea class="add_textarea" placeholder="请填写籍贯地址" placeholder-style="color:#6777aa;" maxlength="64" bindblur="inputOriginAddress" model:value="{{form.user.address}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写紧急联系人" placeholder-style="color:#6777aa;" bindinput="inputUrgentUser" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.emergencyContact}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">紧急联系人电话</view>
<view class="inspect_info_content">
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写紧急联系人电话" placeholder-style="color:#6777aa;" bindinput="inputUrgentUserPhone" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.contactPhone}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">银行开户网点</view>
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">开户银行名称</view>
<view class="inspect_info_content">
<input placeholder="请填写银行开户网点" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写开户银行名称" placeholder-style="color:#6777aa;" bindinput="inputBankName" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.bankName}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">开户银行网点
<text style="font-size: small; color: antiquewhite;">[开户银行地址]</text>
</view>
<view class="inspect_info_content">
<input placeholder="请填写开户银行网点" placeholder-style="color:#6777aa;" bindinput="inputBankOffice" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.bankOffice}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">工资银行卡号</view>
<view class="inspect_info_content">
<input placeholder="请填写工资银行卡号" placeholder-style="color:#6777aa;" bindinput="inputProName" class="inspect_input_fill_in" maxlength="30" />
<input placeholder="请填写工资银行卡号" placeholder-style="color:#6777aa;" bindinput="inputBankCardNo" class="inspect_input_fill_in" maxlength="30" model:value="{{form.user.bankCardNo}}" />
</view>
</view>
<view class="inspect_info_list">
<view class="inspect_info_title" style="padding: 20rpx 0 10rpx;">文化程度</view>
<view class="inspect_info_content">
<voucher-select columns="{{eduCationalType}}" placeholder="请选择文化程度" bindchange="onDegreeGrade" selectValue="{{form.degreeGrade}}"></voucher-select>
</view>
</view>
</view>
<view class="problem_submit_to">
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">下 一 步</view>
<view class="problem_submit_to_btn problem_submit_to_save" bindtap="submitSubUserValues">信 息 登 记</view>
</view>
</view>
</view>
@ -845,7 +846,25 @@
</view>
</view>
<view class="class_btnall">
<view wx:if="{{signPath==''}}" class="problem_submit_to_btn_3 {{signTime>0?'':'problem_submit_to_sign'}}" bindtap="startSignFiles">{{signTime>0?'阅 读 安 全 ':'签 署 '}}承 诺 书<text wx:if="{{signTime>0}}">{{signTime}}</text></view>
<view wx:if="{{signPath==''}}" class="problem_submit_to_btn_3 {{signTime>0?'':'problem_submit_to_sign'}}" bindtap="startSignFiles">{{signTime>0?'阅 读 ':'签 署 安 全 '}}承 诺 书<text wx:if="{{signTime>0}}">{{signTime}}</text></view>
<view wx:if="{{signPath!=''}}" class="problem_submit_to_btn_3 problem_submit_to_save_s" bindtap="submitSignFiles">确 认 并 提 交 承 诺 书</view>
</view>
</view>
</view>
<view wx:if="{{userPhoneNumber && active==100}}">
<view class="header_title">
<view class="header_title_row">
<view class="header_name">{{title}}</view>
</view>
</view>
<view class="max_content">
<project-select init="{{initProject}}"></project-select>
<van-steps steps="{{ flowNodes }}" active="{{ active }}" />
<view class="kaoshimianban_8">
<view class="kaoshimianban_9">
<jyq-result wx:if="{{form.approveStatus!='100' && form.approveStatus!='11'}}" iconPath="https://guangzhou.sxyanzhu.com/YZLJXM/profile/icon/dd.png" title="信息审核中" description="您的信息已登记完成,相关人员正在审核您的信息,请耐心等待。" actionText="下 载 承 诺 书" bind:action="downloadSignetFiles" />
<jyq-result wx:if="{{form.approveStatus=='100'}}" iconPath="https://guangzhou.sxyanzhu.com/YZLJXM/profile/icon/cg.png" title="恭喜,审核通过" description="您的信息已登记完成。" actionText="下 载 承 诺 书" bind:action="downloadSignetFiles" />
<jyq-result wx:if="{{busExamInfos.passMark>busExamInfos.userMark}}" iconPath="https://guangzhou.sxyanzhu.com/YZLJXM/profile/icon/sb.png" title="很遗憾!审核未通过" description="您的信息已登记完成,但未审核通过。"/>
</view>
</view>
</view>
</view>

View File

@ -209,6 +209,18 @@
border-radius: 15rpx;
}
.kaoshimianban_8 {
width: 100%;
padding-top: 120rpx;
margin-bottom: 120rpx;
font-size: 26rpx;
border-radius: 15rpx;
}
.kaoshimianban_9 {
padding: 30rpx;
}
.doc {
border: 1px solid #1e2336;
background-color: #1e2336;

View File

@ -9,9 +9,9 @@
"miniprogram": {
"list": [
{
"name": "",
"name": "pages/project_qr/index",
"pathName": "pages/project_qr/index",
"query": "QRPID=116&signType=1",
"query": "QRPID=116&SIGID=3&PARID=16",
"launchMode": "default",
"scene": null
},

View File

@ -21,8 +21,9 @@ function doRequest(url, method = 'GET', data, header = {}) {
data.dataSource = "1";
wx.showLoading({
mask: true,
title: url == config.noSecuritys[1] ? '登录中' : '加载中'
title: url == config.noSecuritys[1] ? '登录中' : '正在处理'
})
app.securityLoading();
}
return new Promise((resolve, reject) => {
wx.request({
@ -156,6 +157,50 @@ export function securityFileUpload(file) {
})
}
/**
* 签名文件上传
* 支持裁剪
* 支持压缩
* @param {*} file
*/
export function securitySignFileUpload(file) {
wx.showLoading({
mask: true,
title: '正在上传签名'
})
return new Promise((resolve, reject) => {
wx.uploadFile({
url: config.baseUrl + '/file/NoSecurity/signUpload', // 上传的服务器接口地址
filePath: file,
header: {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
},
name: "file", //上传的所需字段,后端提供
success: (res) => {
// 上传完成操作
wx.hideLoading()
let resJson = JSON.parse(res.data)
const code = resJson.code || 200
if (code != 200) {
app.toast(resJson.msg);
setTimeout(() => {
resolve(resJson);
}, 800)
resolve(resJson);
} else {
resolve(resJson);
}
},
fail: (error) => {
wx.hideLoading()
//上传失败修改pedding为reject
app.toast("网络出错,上传失败")
reject(error)
}
});
})
}
export function request(options) {
if(options.method=='get' && options.params){
options.url = options.url+"?"+options.params;

View File

@ -18,4 +18,9 @@ onMounted(() => {
width: 192px;
}
}
.pagination-container {
.el-pagination {
right: 20px;
}
}
</style>

View File

@ -100,6 +100,7 @@ const data = reactive({
formData:{
id: "",
name: "",
proId: "",
documentation: "",
processCategory: "",
initiator: "",
@ -175,7 +176,7 @@ function initFormOnChanged(element) {
activatedElement.source &&
activatedElement.source.type.indexOf("StartEvent") === -1
);
formVisible.value = elementType.value === "UserTask" || elementType.value === "StartEvent";
//formVisible.value = elementType.value === "UserTask" || elementType.value === "StartEvent";
}
/** 获取执行监听器数量 */

View File

@ -260,6 +260,11 @@
"type": "Boolean",
"default": true
},
{
"name": "proId",
"isAttr": true,
"type": "String"
},
{
"name": "processCategory",
"isAttr": true,

View File

@ -184,6 +184,7 @@ function getProcess() {
return {
id: element.id,
name: element.name,
proId: element.proId,
category: element.processCategory
}
}
@ -198,15 +199,15 @@ function getProcessElement() {
// xml
async function saveXML(download = false) {
try {
const {xml} = await modelerStore.getModeler.saveXML({format: true})
if (download) {
downloadFile(`${getProcessElement().name}.bpmn20.xml`, xml, 'application/xml')
}
return xml
} catch (err) {
console.log(err)
}
try {
const {xml} = await modelerStore.getModeler.saveXML({format: true})
if (download) {
downloadFile(`${getProcessElement().name}.bpmn20.xml`, xml, 'application/xml')
}
return xml
} catch (err) {
console.log(err)
}
}
// 线xml
@ -235,6 +236,10 @@ async function saveImg(type = 'svg', download = false) {
//
async function save() {
const process = getProcess()
if(!process.id || !process.name || !process.proId || !process.category){
proxy.$modal.msgWarning("流程表单验证失败!");
return false;
}
const xml = await saveXML()
const svg = await saveImg()
const result = {process, xml, svg}

View File

@ -2,13 +2,13 @@
<el-form :model="bpmnFormData" label-width="80px" :rules="rules" status-icon>
<!--流程的基础属性-->
<template v-if="bpmnFormData.$type === 'bpmn:Process'">
<el-form-item label="项目单位" prop="deptId">
<el-select v-model="bpmnFormData.deptId" placeholder="请选择项目单位" @change="changeProject()">
<el-form-item label="项目单位" prop="proId">
<el-select v-model="bpmnFormData.proId" placeholder="请选择项目单位" @change="updateElementPro" style="width:100%">
<el-option
v-for="dict in deptOptions"
:key="dict.value"
:label="dict.label"
:value="dict.value"
v-for="opt in proOptions"
:key="opt.id"
:label="opt.projectName"
:value="opt.id"
></el-option>
</el-select>
</el-form-item>
@ -28,7 +28,7 @@
<!--流程的基础属性-->
<template v-if="bpmnFormData.$type === 'bpmn:Process'">
<el-form-item label="流程分类" prop="processCategory">
<el-select v-model="bpmnFormData.processCategory" placeholder="请选择流程分类" @change="updateElementTask('processCategory')">
<el-select v-model="bpmnFormData.processCategory" placeholder="请选择流程分类" @change="updateElementTask('processCategory')" style="width:100%">
<el-option
v-for="dict in sys_process_category"
:key="dict.value"
@ -50,16 +50,16 @@
<script setup name="CommonPanel">
import {StrUtil} from '@/utils/StrUtil'
import useModelerStore from '@/store/modules/modeler'
// import { listDept } from "@/api/system/dept";
// import { listProjectInfo } from "@/api/manage/projectInfo";
import { listProProjectInfo } from "@/api/manage/proProjectInfo";
const modelerStore = useModelerStore()
import useUserStore from '@/store/modules/user'
const { proxy } = getCurrentInstance();
const { sys_process_category } = proxy.useDict('sys_process_category');
//
const deptOptions = ref([]);
//
const projectOptions = ref([]);
const userStore = useUserStore()
//
const proOptions = ref([]);
const data = reactive({
rules:{
@ -69,12 +69,12 @@ const data = reactive({
name: [
{ required: true, message: '节点名称不能为空', trigger: 'blur' },
],
deptId: [
proId: [
{ required: true, message: '项目单位不能为空', trigger: 'change' },
],
projectId: [
{ required: true, message: '所属项目不能为空', trigger: 'change' },
],
processCategory: [
{ required: true, message: '流程分类不能为空', trigger: 'change' },
]
},
bpmnFormData: {}
});
@ -102,18 +102,23 @@ function resetTaskForm() {
bpmnFormData.value = JSON.parse(JSON.stringify(modelerStore.getBpmnElement.businessObject));
}
function updateElementPro() {
modelerStore.getModeling.updateProperties(modelerStore.getBpmnElement, { 'proId': bpmnFormData.value.proId });
}
function updateElementTask(key) {
const taskAttr = Object.create(null);
taskAttr[key] = bpmnFormData.value[key] || null;
modelerStore.getModeling.updateProperties(modelerStore.getBpmnElement, taskAttr);
console.log("taskAttr",modelerStore.getBpmnElement)
}
/** 初始化数据 */
// function initDepts(){
// listDept({}).then(response => {
// deptOptions.value = response.rows;
// });
// }
function initDatas(){
listProProjectInfo({pageSize:1000,comId:userStore.currentComId}).then(response => {
proOptions.value = response.rows;
});
}
//initDepts();
initDatas();
</script>

View File

@ -5,7 +5,7 @@
<el-button type="primary" @click="dialogVisible = true">查看</el-button>
</el-form-item>
<el-form-item label="回路特性">
<el-select v-model="loopCharacteristics" @change="changeLoopCharacteristicsType">
<el-select v-model="loopCharacteristics" @change="changeLoopCharacteristicsType" style="width:100%">
<!--bpmn:MultiInstanceLoopCharacteristics-->
<el-option label="并行多重事件" value="ParallelMultiInstance" />
<el-option label="时序多重事件" value="SequentialMultiInstance" />

View File

@ -4,7 +4,7 @@
<el-switch v-model="bpmnFormData.async" active-text="" inactive-text="" @change="updateElementTask('async')"/>
</el-form-item>
<el-form-item label="用户类型">
<el-select v-model="bpmnFormData.userType" placeholder="选择人员" @change="updateUserType">
<el-select v-model="bpmnFormData.userType" placeholder="选择人员" @change="updateUserType" style="width:100%">
<el-option
v-for="item in userTypeOption"
:key="item.value"

View File

@ -20,6 +20,21 @@
<el-table-column type="selection" width="50" align="center" reserve-selection/>
<el-table-column label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
<el-table-column label="项目单位" align="center">
<template #default="scope">
<div v-if="scope.row.roleId!==2" class="flex gap-2">
<el-tag
v-for="item in scope.row.roleDeptList"
effect="dark"
>
{{ item.deptName }}
</el-tag>
</div>
<div v-else>
-
</div>
</template>
</el-table-column>
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
<el-table-column label="显示顺序" prop="roleSort" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime">
@ -60,10 +75,12 @@
<script setup name="FlowRole">
import { listRole } from "@/api/system/role";
import useUserStore from '@/store/modules/user'
const router = useRouter();
const { proxy } = getCurrentInstance();
const userStore = useUserStore()
const roleList = ref([]);
const open = ref(false);
const loading = ref(true);
@ -134,6 +151,7 @@ watch(roleList, newValue => {
/** 查询角色列表 */
function getList() {
loading.value = true;
queryParams.value.projectId = userStore.currentProId;
listRole(queryParams.value).then(response => {
roleList.value = response.rows;
total.value = response.total;

View File

@ -1,14 +1,32 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="名称" prop="name">
<el-form-item label="项目名称" prop="proName" v-if="!userStore.currentProId">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
v-model="queryParams.proName"
placeholder="请输入项目名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="流程名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入流程名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="流程分类" prop="category" v-if="false">
<el-select v-model="queryParams.category" placeholder="请选择流程分类" clearable>
<el-option
v-for="dict in sys_process_category"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
@ -46,40 +64,50 @@
</el-alert>
<el-table v-loading="loading" fit :data="definitionList" border @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="流程编号" align="center" prop="deploymentId" :show-overflow-tooltip="true"/>
<el-table-column label="流程标识" align="center" prop="flowKey" :show-overflow-tooltip="true" />
<el-table-column label="流程分类" align="center" prop="category" />
<el-table-column label="流程名称" align="center" width="120" :show-overflow-tooltip="true">
<el-table-column label="流程编号" align="center" prop="deploymentId" width="120"/>
<el-table-column label="所属公司" align="center" prop="deptName" :show-overflow-tooltip="true"/>
<el-table-column label="项目名称" align="center" prop="projectName" :show-overflow-tooltip="true"/>
<el-table-column label="流程名称" align="center" :show-overflow-tooltip="true">
<template #default="scope">
<el-button link type="primary" @click="handleReadImage(scope.row.deploymentId)">
<span>{{ scope.row.name }}</span>
</el-button>
</template>
</el-table-column>
<el-table-column label="业务表单" align="center" :show-overflow-tooltip="true">
<el-table-column label="流程标识" align="center" prop="flowKey" width="150" :show-overflow-tooltip="true" />
<el-table-column label="流程分类" align="center" prop="category" width="150" :show-overflow-tooltip="true">
<template #default="scope">
<dict-tag :options="sys_process_category" :value="scope.row.category"/>
</template>
</el-table-column>
<!-- <el-table-column label="业务表单" align="center" :show-overflow-tooltip="true">
<template #default="scope">
<el-button v-if="scope.row.formId" link type="primary" @click="handleForm(scope.row.formId)">
<span>{{ scope.row.formName }}</span>
</el-button>
<label v-else></label>
</template>
</el-table-column>
<el-table-column label="流程版本" align="center">
</el-table-column> -->
<el-table-column label="流程版本" align="center" width="80">
<template #default="scope">
<el-tag effect="dark">v{{ scope.row.version }}</el-tag>
</template>
</el-table-column>
<el-table-column label="状态" align="center">
<el-table-column label="流程状态" align="center" width="80">
<template #default="scope">
<el-tag effect="dark" v-if="scope.row.suspensionState === 1"></el-tag>
<el-tag type="danger" effect="dark" v-if="scope.row.suspensionState === 2"></el-tag>
</template>
</el-table-column>
<el-table-column label="部署时间" align="center" prop="deploymentTime" width="180"/>
<el-table-column label="操作" width="300" fixed="right" class-name="small-padding fixed-width">
<el-table-column label="部署时间" align="center" prop="deploymentTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.deploymentTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="180" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleLoadXml(scope.row)" icon="Position" size="small">设计</el-button>
<el-button link type="primary" @click="handleAddForm(scope.row)" icon="Promotion" size="small" v-if="scope.row.formId == null"></el-button>
<!-- <el-button link type="primary" @click="handleAddForm(scope.row)" icon="Promotion" size="small" v-if="scope.row.formId == null"></el-button> -->
<el-button link type="danger" @click="handleUpdateSuspensionState(scope.row)" icon="VideoPause" size="small" v-if="scope.row.suspensionState === 1"></el-button>
<el-button link type="success" @click="handleUpdateSuspensionState(scope.row)" icon="VideoPlay" size="small" v-if="scope.row.suspensionState === 2"></el-button>
<el-button link type="primary" @click="handleDelete(scope.row)" icon="delete" size="small" v-hasPermi="['system:deployment:remove']"></el-button>
@ -156,9 +184,12 @@ import {
import { getForm, addDeployForm ,listForm } from "@/api/flowable/form";
import BpmnViewer from '@/components/Process/viewer';
import router from "@/router";
import useUserStore from '@/store/modules/user'
const { proxy } = getCurrentInstance();
const { sys_process_category } = proxy.useDict('sys_process_category');
const userStore = useUserStore()
const loading = ref(true);
//
const ids = ref([]);
@ -200,6 +231,7 @@ const data = reactive({
pageSize: 10,
name: null,
category: null,
proName: null,
key: null,
tenantId: null,
deployTime: null,

View File

@ -96,6 +96,7 @@ function getXmlData(deployId) {
/** 保存xml */
function save(data) {
const params = {
proId: data.process.proId,
name: data.process.name,
category: data.process.category,
xml: Base64.encode(data.xml)

View File

@ -88,9 +88,15 @@
<el-table-column label="所属公司" align="center" prop="comName" />
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column label="模板名称" align="center" prop="temName" />
<el-table-column label="模板类型" align="center" prop="temType" width="120">
<el-table-column label="模板类型" align="center" prop="temType" width="150">
<template #default="scope">
<dict-tag :options="sys_is_del" :value="scope.row.isDel"/>
<dict-tag :options="bas_tem_type" :value="scope.row.temType"/>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="修改时间" align="center" prop="updateTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</template>
</el-table-column>
<el-table-column label="启用状态" align="center" prop="isDel" width="100">
@ -105,12 +111,6 @@
</el-tooltip>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="修改时间" align="center" prop="updateTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}') }}</span>
</template>
</el-table-column>
<el-table-column label="预览模板" align="center" prop="temPath" width="120">
<template #default="scope">
<el-button link type="primary" icon="Position" @click="handlePreview(scope.row)" v-hasPermi="['manage:basTemplate:query']"></el-button>
@ -158,7 +158,7 @@
</el-select>
</el-form-item>
<el-form-item label="模板文件" prop="temPath">
<file-upload v-model="form.temPath" :limit="1" :fileType="['doc']" :fileSize="50" />
<file-upload v-model="form.temPath" :limit="1" :fileType="['docx']" :fileSize="50" />
</el-form-item>
</el-form>
<template #footer>

View File

@ -125,7 +125,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="角色编号" align="center" prop="roleId" width="120" />
<el-table-column label="角色名称" align="center" prop="roleName" :show-overflow-tooltip="true" width="150" />
<el-table-column label="所属部门" align="center">
<el-table-column label="项目单位" align="center">
<template #default="scope">
<div v-if="scope.row.roleId!==2" class="flex gap-2">
<el-tag
@ -162,16 +162,16 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1 && (scope.row.roleId !== 2 && !isAdmin)">
<el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1 && (scope.row.roleId !== 2 && isAdmin)">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1 && (scope.row.roleId !== 2 && !isAdmin)">
<el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1 && (scope.row.roleId !== 2 && isAdmin)">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']"></el-button>
</el-tooltip>
<el-tooltip content="数据权限" placement="top" v-if="scope.row.roleId !== 1 && isAdmin">
<el-button link type="primary" icon="CircleCheck" @click="handleDataScope(scope.row)" v-hasPermi="['system:role:edit']"></el-button>
</el-tooltip>
<el-tooltip content="分配用户" placement="top" v-if="scope.row.roleId !== 1 && (scope.row.roleId !== 2 && !isAdmin)">
<el-tooltip content="分配用户" placement="top" v-if="scope.row.roleId !== 1 && (scope.row.roleId !== 2 && isAdmin)">
<el-button link type="primary" icon="User" @click="handleAuthUser(scope.row)" v-hasPermi="['system:role:edit']"></el-button>
</el-tooltip>
<el-button v-if="scope.row.roleId==1" type="primary" link disabled>不可修改</el-button>
@ -207,7 +207,7 @@
<el-form-item label="角色名称" prop="roleName">
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item prop="roleKey" label="权限字符" v-if="form.roleId">
<el-form-item prop="roleKey" label="权限字符" v-if="!form.roleId">
<!-- <template #label>
<span>
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">