人员出入场信息管理-合同编号管理

This commit is contained in:
lSun 2025-06-03 18:10:00 +08:00
parent b5ce36f8f5
commit ca1a095612
15 changed files with 123 additions and 32 deletions

View File

@ -213,6 +213,12 @@
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>arcsoft</groupId>-->
<!-- <artifactId>arcsoft</artifactId>-->

View File

@ -135,7 +135,9 @@ public class ContractController {
int count = service.addContractInfo(bean);
if (count == 1){
ar = R.ok();
}else {
}else if(count == -1){
ar = R.fail("合同编号要根据工程名称去生成,请先选择工程名称");
} else {
ar = R.fail(Constants.INSERT_FAIL);
}
return ar;

View File

@ -168,4 +168,8 @@ public interface PersonComprehensiveDao {
List<PersonComprehensiveBean> exportWorkerRoster(@Param("params") PersonComprehensiveBean bean);
List<PersonComprehensiveBean> exportWorkerRosterList(@Param("params")PersonComprehensiveBean queryDTO);
String getProNme(String proId);
int getContractNum();
}

View File

@ -39,6 +39,7 @@ public class ContractBean {
private String endowmentInsurance;
private String isActive;
private String stauts;
private String proId;//
private String proName;//
private String teamName;//
private String subName;//

View File

@ -1,6 +1,8 @@
package com.bonus.bmw.person.service;
import cn.hutool.core.date.DateUtil;
import com.bonus.bmw.person.dao.ContractDao;
import com.bonus.bmw.person.dao.PersonComprehensiveDao;
import com.bonus.bmw.person.dao.RedListDao;
import com.bonus.bmw.person.entity.ContractBean;
import com.bonus.bmw.person.entity.RedLightHisBean;
@ -9,8 +11,10 @@ import com.bonus.bmw.team.service.IntegratedQueryService;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.bean.ContractExportBean;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@ -27,6 +31,9 @@ public class ContractServiceImpl implements ContractService {
@Resource(name = "integratedQueryService")
private IntegratedQueryService integratedQueryService;
@Resource(name = "PersonComprehensiveDao")
private PersonComprehensiveDao personComprehensiveDao;
//添加合同照片
public int addContractPhoto(List<ContractBean> list) {
@ -44,7 +51,20 @@ public class ContractServiceImpl implements ContractService {
i = delContract(bean);
}
if(i>0){
i = dao.addContractInfo(bean);
String proId = bean.getProId();
if(!StringUtils.isEmpty(proId)){
String proName = personComprehensiveDao.getProNme(proId);
String abbreviation = getInitialsUpperCaseWithPinyin(proName);
int contractNum =personComprehensiveDao.getContractNum();
String dateStr = DateUtil.format(DateUtil.date(), "yyyyMMdd"); // 使用 Hutool DateUtil
String contractCode = abbreviation + dateStr + contractNum;
bean.setContractCode(contractCode);
i = dao.addContractInfo(bean);
}else{
i = -1;
return i;
}
}
//将合同id存入 出入场表
//1.0先查 最新出入场记录
@ -186,4 +206,27 @@ public class ContractServiceImpl implements ContractService {
public List<ContractExportBean> downloadFullContractFile(String proId) {
return dao.downloadFullContractFile(proId);
}
public static String getInitialsUpperCaseWithPinyin(String str) {
if (str == null || str.isEmpty()) {
return "";
}
StringBuilder initials = new StringBuilder();
char[] chars = str.trim().toCharArray();
for (char c : chars) {
// 如果是中文尝试获取拼音首字母
try {
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
if (pinyinArray != null && pinyinArray.length > 0) {
String firstLetter = pinyinArray[0].charAt(0) + "";
initials.append(firstLetter.toUpperCase());
}
} catch (Exception e) {
// 忽略异常字符
}
}
return initials.toString();
}
}

View File

@ -24,6 +24,7 @@ import com.bonus.common.core.table.PageTableResponse;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.TrimUtil;
import com.bonus.common.security.utils.SecurityUtils;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFSheet;
@ -38,19 +39,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.ServletOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@ -190,6 +179,15 @@ public class PersonComprehensiveServiceImp implements PersonComprehensiveService
}
//第四页数据添加 上传合同
if (i > 0 && StringUtils.isNotEmpty(o.getContractCode())) {
String proId = o.getProId();
if(!StringUtils.isEmpty(proId)){
String proName = dao.getProNme(proId);
String abbreviation = getInitialsUpperCaseWithPinyin(proName);
int contractNum =dao.getContractNum();
String dateStr = DateUtil.format(DateUtil.date(), "yyyyMMdd"); // 使用 Hutool DateUtil
String contractCode = abbreviation + dateStr + contractNum;
o.setContractCode(contractCode);
}
dao.insertPersonContractData(o);
}
if (o.getLightStatus().equals("0")) {
@ -535,7 +533,7 @@ public class PersonComprehensiveServiceImp implements PersonComprehensiveService
if (StringUtils.isNotEmpty(o.getCheckupFilePath())) {
//先删除之前体检报告
int jk = dao.deleteCheckupFilePath(o);
//在添加新的体检报告
//
dao.insertCheckupFilePath(o);
} else {
//直接删除体检报告
@ -1070,4 +1068,27 @@ public class PersonComprehensiveServiceImp implements PersonComprehensiveService
return list;
}
public static String getInitialsUpperCaseWithPinyin(String str) {
if (str == null || str.isEmpty()) {
return "";
}
StringBuilder initials = new StringBuilder();
char[] chars = str.trim().toCharArray();
for (char c : chars) {
// 如果是中文尝试获取拼音首字母
try {
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
if (pinyinArray != null && pinyinArray.length > 0) {
String firstLetter = pinyinArray[0].charAt(0) + "";
initials.append(firstLetter.toUpperCase());
}
} catch (Exception e) {
// 忽略异常字符
}
}
return initials.toString();
}
}

View File

@ -25,6 +25,7 @@
bwc.contractType AS miurInsurance,
IF
( bwc.sub_contract_url IS NULL, bwc.person_contract_url, bwc.sub_contract_url ) AS url,
bp.id as proId,
bp.NAME AS proName,
bst.team_name AS teamName,
bwc.is_audit as isAudit,

View File

@ -1188,5 +1188,14 @@
bpg.id, bp.id
</select>
<select id="getProNme" resultType="java.lang.String">
SELECT `name` FROM `bm_project`
WHERE id = #{proId}
</select>
<select id="getContractNum" resultType="java.lang.Integer">
SELECT count(*) FROM `bm_worker_contract`
</select>
</mapper>

View File

@ -2,7 +2,7 @@ var ctxPath = getContextPath();
var currentHostname = window.location.hostname;
// //测试
//测试
var loginPath = "http://" + currentHostname + ":39200";//auth
var systemPath = "http://" + currentHostname + ":31910";//system
var fileUrl = "http://" + currentHostname + ":31909/file";
@ -18,8 +18,7 @@ var oiPlanUrl = "http://" + currentHostname + ":31914/oiPlan";
// var oiPlanUrl = "http://" + currentHostname + ":1914/oiPlan";
//文件预览
let filePreviewUrl = "http://192.168.0.14:8012/onlinePreview?url=";
// let filePreviewUrl = "http://" + currentHostname + ":8012/onlinePreview?url=";
let filePreviewUrl = "http://" + currentHostname + ":8012/onlinePreview?url=";
function getContextPath() {
var pathName = document.location.pathname;

View File

@ -236,10 +236,11 @@ function init() {
var workerPostId = row['postId'];
var contractType = row['contractType'];
var status = row['stauts'];
var proId = row['proId'];
var html = '';
if(status != '无数据' && status != '未签订' && status != null){
//存在但重新上传,合同见证上传
html += uploadContractWitness(idNumber, id, workerName, workerPostId,"sys:personContract:add", pers);
html += uploadContractWitness(proId,idNumber, id, workerName, workerPostId,"sys:personContract:add", pers);
//详情页面
html += particularsContractWitness(idNumber,"sys:personContract:query", pers);
//纸质合同可以删除
@ -249,7 +250,7 @@ function init() {
}
if(status == '未签订' && (contractType == '' || contractType == null)){
//不存在,上传新的合同见证上传
html += uploadContractWitness(idNumber,id,workerName, workerPostId,"", pers);
html += uploadContractWitness(proId,idNumber,id,workerName, workerPostId,"", pers);
//详情页面
html += particularsContractWitness(idNumber,"sys:personContract:query", pers);
}
@ -316,22 +317,23 @@ function particularsContractWitnessPage(idNumber) {
}
//合同见证上传
function uploadContractWitness(idNumber, id, workerName, workerPostId, permission, pers){
function uploadContractWitness(proId,idNumber, id, workerName, workerPostId, permission, pers){
if (permission != "") {
if ($.inArray(permission, pers) < 0) {
return "";
}
}
var btn = $("<button class='layui-btn layui-btn-xs' title='合同见证上传' onclick='uploadContractWitnessView(\""+idNumber+"\",\""+id+"\",\""+workerName+"\",\""+workerPostId+"\")'>合同见证上传</button>");
var btn = $("<button class='layui-btn layui-btn-xs' title='合同见证上传' onclick='uploadContractWitnessView(\""+proId+"\",\""+idNumber+"\",\""+id+"\",\""+workerName+"\",\""+workerPostId+"\")'>合同见证上传</button>");
return btn.prop("outerHTML");
}
//合同见证上传
function uploadContractWitnessView(idNumber,id,workerName, workerPostId) {
function uploadContractWitnessView(proId,idNumber,id,workerName, workerPostId) {
var contractId = getUuid();
//以前有合同则须通过id删除并添加新的。无合同删除用-1
if(id!==null && id!=='null'){
let confirm = layer.confirm("合同见证已存在,是否删除并重新上传?",function () {
localStorage.setItem("proId", proId);
localStorage.setItem("idNumber", idNumber);
localStorage.setItem("workerName", workerName);
localStorage.setItem("workerPostId", workerPostId);

View File

@ -1,5 +1,6 @@
var element;
var layer;
var proId = localStorage.getItem("proId");
var idNumber = localStorage.getItem("idNumber");
var workerName = localStorage.getItem("workerName");
var workerPostId = localStorage.getItem("workerPostId");
@ -192,6 +193,7 @@ function addData() {
formData.field.idNumber = idNumber;
formData.field.workerName = workerName;
formData.field.workerPostId = workerPostId;
formData.field.proId = proId;
var formUrl = ctxPath + "/contract/addContract";
$.ajax({
type: 'POST',

View File

@ -546,7 +546,7 @@
</div>
</div>
</div>
<div class="layui-input-inline" style="width: 35%">
<div class="layui-input-inline" style="width: 35%;display: none">
<label class="layui-form-label" style="width: 130px">
合同编号
</label>

View File

@ -850,11 +850,11 @@ function uploadContractRequired(){
layer.alert('请上传合同见证照片',{icon: 0})
return false
}
if(contractRef === '' || contractRef === 'null' || contractRef == null){
/*if(contractRef === '' || contractRef === 'null' || contractRef == null){
layer.alert('未填写合同编号',{icon: 0})
$('#contractRef').focus()
return false
}
}*/
if(contractTermType === -1 || contractTermType === '-1' || contractTermType === 'null' || contractTermType == null){
layer.alert('未选择合同期限类型',{icon: 0})
$('#contractTermType').focus()
@ -1677,9 +1677,10 @@ function nextClick(e){
}
let contractTf = true;
let contractRef = $('#contractRef').val() //合同编号
if(contractRef != '' && contractRef != 'null' && contractRef != null){
contractTf = uploadContractRequired();
}
contractTf = uploadContractRequired();
// if(contractRef != '' && contractRef != 'null' && contractRef != null){
// contractTf = uploadContractRequired();
// }
if(contractTf){
let examTf = examRequired();
if(examTf){

View File

@ -531,7 +531,7 @@
</label>
<div class="layui-input-block" style="margin-left: 130px">
<input type="text" name="contractRef" id="contractRef"
class="layui-input">
class="layui-input" readonly>
</div>
</div>
<div class="layui-input-inline" style="width: 35%;">

View File

@ -62,10 +62,10 @@
<div class="layui-form-item" style="">
<div class="layui-inline">
<div class="layui-inline" style="display: none">
<label class="layui-form-label"><i class="tip-required" style="color: red;font-size: 20px">*</i>合同编号:</label>
<div class="layui-input-inline" style="margin-top: 3%;width: 250px;">
<input type="text" name="contractCode" maxlength="10" required lay-verify="required" id="contractCode" class="layui-input">
<input type="text" name="contractCode" maxlength="10" id="contractCode" class="layui-input">
</div>
</div>
<div class="layui-inline">