美之高 薪酬二开
This commit is contained in:
parent
93defb41cd
commit
28b11a1bb6
|
|
@ -0,0 +1,28 @@
|
|||
package com.engine.salary.entity.salaryacct.param;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName MzqQueryParam
|
||||
* @date 2025/03/25 15:49
|
||||
* @description 美之高 查询参数
|
||||
*/
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class MzqQueryParam {
|
||||
|
||||
// 日期
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date salaryMonth ;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package com.engine.salary.entity.salaryacct.po;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName MzgBzBaseInfo
|
||||
* @date 2025/03/26 15:24
|
||||
* @description 美指高班组基础信息
|
||||
*/
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class MzgBzBaseInfo {
|
||||
|
||||
/**
|
||||
* 对应字段
|
||||
*/
|
||||
private String dyzd;
|
||||
|
||||
/**
|
||||
* 科室名称
|
||||
*/
|
||||
private String ksmc;
|
||||
|
||||
/**
|
||||
* 班组名称
|
||||
*/
|
||||
private String bzmc;
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.engine.salary.entity.salaryacct.po;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName MzgCpddData
|
||||
* @date 2025/03/25 16:07
|
||||
* @description 美之高 产品订单表
|
||||
*/
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class MzgCpddData {
|
||||
String journalid;
|
||||
String bm;
|
||||
String zzzb;
|
||||
String scgdh;
|
||||
String wlbh;
|
||||
String cpxh;
|
||||
String wlmc;
|
||||
String tzbh;
|
||||
String rksl;
|
||||
String sl;
|
||||
Date rq;
|
||||
|
||||
String jsxs;
|
||||
|
||||
String jsgzcl;
|
||||
|
||||
Map<String, String> valueMap;
|
||||
}
|
||||
|
|
@ -231,4 +231,8 @@ public interface SalaryAcctResultService {
|
|||
* @version 1.0
|
||||
**/
|
||||
List<SalaryAcctResultPO> listBySobSalaryMonth(Date salaryMonth, Long salarySobId, List<Long> employeeIds);
|
||||
|
||||
void generateMzgCpjsgzcl(MzqQueryParam param);
|
||||
|
||||
void generateMzgCpjsgzdj(MzqQueryParam param);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
|
|||
import com.engine.salary.entity.salaryacct.param.*;
|
||||
import com.engine.salary.entity.salaryacct.po.*;
|
||||
import com.engine.salary.entity.salaryformula.ExpressFormula;
|
||||
import com.engine.salary.entity.salaryformula.po.FormulaVar;
|
||||
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
||||
import com.engine.salary.entity.salarysob.dto.*;
|
||||
import com.engine.salary.entity.salarysob.po.*;
|
||||
|
|
@ -35,9 +36,12 @@ import com.engine.salary.enums.common.FilterEnum;
|
|||
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
|
||||
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
|
||||
import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum;
|
||||
import com.engine.salary.enums.salaryformula.ReferenceTypeEnum;
|
||||
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
|
||||
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.formlua.entity.parameter.DataType;
|
||||
import com.engine.salary.formlua.entity.standard.ExcelResult;
|
||||
import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper;
|
||||
import com.engine.salary.report.service.SalaryStatisticsReportService;
|
||||
import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl;
|
||||
|
|
@ -66,10 +70,17 @@ import org.apache.commons.lang3.StringUtils;
|
|||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.util.StopWatch;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.conn.RecordSetDataSource;
|
||||
import weaver.formmode.setup.ModeRightInfo;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.TimeUtil;
|
||||
import weaver.hrm.User;
|
||||
import weaver.wechat.util.Utils;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.BlockingDeque;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
|
@ -200,6 +211,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|||
return ServiceUtil.getService(SalaryApprovalRuleServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private FormulaRunService getFormulaRunService(User user) {
|
||||
return ServiceUtil.getService(FormulaRunServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCheckResultService salaryCheckResultService;
|
||||
|
||||
|
|
@ -1283,4 +1297,445 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|||
encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class);
|
||||
return salaryAcctResultPOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateMzgCpjsgzcl(MzqQueryParam param) {
|
||||
if (param.getSalaryMonth() == null) {
|
||||
throw new SalaryRunTimeException("参数错误");
|
||||
}
|
||||
// 获取美之高erp产品订单数据
|
||||
Date firstDayDateOfMonth = SalaryDateUtil.getFirstDayDateOfMonthWithMinutesAndSeconds(param.getSalaryMonth());
|
||||
Date lastDayDateOfMonth = SalaryDateUtil.getLastDayDateOfMonthWithMinutesAndSeconds(param.getSalaryMonth());
|
||||
log.info("开始生成美之高产品计算工资产量,开始日期{},结束日期{}",firstDayDateOfMonth,lastDayDateOfMonth);
|
||||
List<MzgCpddData> mzgCpddDataList = getERPCpddDataByDate(firstDayDateOfMonth, lastDayDateOfMonth);
|
||||
log.info("产品计算工资产量erp数据数" + mzgCpddDataList.size());
|
||||
// 获取部门对应系数规则数据
|
||||
Map<String, ExpressFormula> bmdyxsMap = getMzgBmdyxsMap();
|
||||
// 获取计算系数,计算工资产量
|
||||
for (MzgCpddData erpData : mzgCpddDataList) {
|
||||
String bm = erpData.getBm();
|
||||
ExpressFormula formula = bmdyxsMap.get(bm);
|
||||
if (formula != null) {
|
||||
List<FormulaVar> formulaVars = new ArrayList<>();
|
||||
ExcelResult result = new ExcelResult();
|
||||
try {
|
||||
double sl = NumberUtils.isCreatable(erpData.getSl()) ? Math.abs(Double.valueOf(erpData.getSl())) : 0;
|
||||
double rksl = NumberUtils.isCreatable(erpData.getRksl()) ? Math.abs(Double.valueOf(erpData.getRksl())) : 0;
|
||||
formulaVars.add(FormulaVar.builder().fieldId("数量").content(String.valueOf(sl)).fieldType(DataType.NUMBER).build());
|
||||
formulaVars.add(FormulaVar.builder().fieldId("入库数量").content(String.valueOf(rksl)).fieldType(DataType.NUMBER).build());
|
||||
result = getFormulaRunService(user).run(formula, formulaVars, DataCollectionEmployee.builder().employeeId((long) user.getUID()).build());
|
||||
} catch (Exception e) {
|
||||
log.error("express execute fail ", e);
|
||||
result.setStatus(false);
|
||||
result.setErrorMsg(e.getMessage());
|
||||
}
|
||||
|
||||
if (result.isStatus() && NumberUtils.isCreatable(Utils.null2String(result.getData()))) {
|
||||
BigDecimal xsValue = new BigDecimal(result.getData().toString());
|
||||
erpData.setJsxs(xsValue.toPlainString());
|
||||
BigDecimal rkslValue = NumberUtils.isCreatable(erpData.getRksl()) ? new BigDecimal(erpData.getRksl()) : BigDecimal.ZERO;
|
||||
erpData.setJsgzcl(rkslValue.multiply(xsValue).toPlainString());
|
||||
} else {
|
||||
String errorMsg = result.getErrorMsg();
|
||||
log.error("计算出错 id:{}, formula:{}, formulaVars:{}, errorMsg",erpData.getJournalid(), formula, formulaVars, errorMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 入库,权限重构
|
||||
if (CollectionUtils.isNotEmpty(mzgCpddDataList)) {
|
||||
log.info("产品计算工资产量开始入库");
|
||||
RecordSet rs = new RecordSet();
|
||||
// 入库前先删除
|
||||
String deleteSql = "delete from uf_cpjsgzcl where rq >=? and rq <= ?";
|
||||
rs.executeUpdate(deleteSql, new Object[]{SalaryDateUtil.getFormatLocalDate(firstDayDateOfMonth), SalaryDateUtil.getFormatLocalDate(lastDayDateOfMonth)});
|
||||
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
|
||||
String currTime = String.format("'%s'", sdf.format(new Date()));
|
||||
// 获取建模模块id
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String modeId = baseBean.getPropValue("mzgSalaryReport", "cpjsgzcl_mode_id");
|
||||
// 先插入一条数据
|
||||
MzgCpddData firstData = mzgCpddDataList.get(0);
|
||||
StringBuilder firstSb = new StringBuilder();
|
||||
firstSb.append("insert into uf_cpjsgzcl(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,journalid,bm,zzzb,scgdh,wlbh,cpxh,wlmc,tzbh,rksl,sl,rq,jsxs,jsgzcl) values (");
|
||||
firstSb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
|
||||
.append(firstData.getJournalid()).append("','")
|
||||
.append(firstData.getBm()).append("','")
|
||||
.append(firstData.getZzzb()).append("','")
|
||||
.append(firstData.getScgdh()).append("','")
|
||||
.append(firstData.getWlbh()).append("','")
|
||||
.append(firstData.getCpxh()).append("','")
|
||||
.append(firstData.getWlmc()).append("','")
|
||||
.append(firstData.getTzbh()).append("','")
|
||||
.append(firstData.getRksl()).append("','")
|
||||
.append(firstData.getSl()).append("','")
|
||||
.append(SalaryDateUtil.getFormatLocalDate(firstData.getRq())).append("','")
|
||||
.append(firstData.getJsxs()).append("','")
|
||||
.append(firstData.getJsgzcl()).append("')");
|
||||
rs.execute(firstSb.toString());
|
||||
mzgCpddDataList.remove(0);
|
||||
// 获取最大值 作为权限重构的起始id
|
||||
rs.execute("select max(id) from uf_cpjsgzcl");
|
||||
int minId = 0;
|
||||
if (rs.next()) {
|
||||
minId = rs.getInt(1);
|
||||
}
|
||||
int maxId = minId + mzgCpddDataList.size();
|
||||
|
||||
List<List<MzgCpddData>> partition = Lists.partition(mzgCpddDataList, 500);
|
||||
partition.forEach(part -> {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("insert into uf_cpjsgzcl(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,journalid,bm,zzzb,scgdh,wlbh,cpxh,wlmc,tzbh,rksl,sl,rq,jsxs,jsgzcl) values ");
|
||||
for (MzgCpddData data : part) {
|
||||
sb.append("(")
|
||||
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
|
||||
.append(data.getJournalid()).append("','")
|
||||
.append(data.getBm()).append("','")
|
||||
.append(data.getZzzb()).append("','")
|
||||
.append(data.getScgdh()).append("','")
|
||||
.append(data.getWlbh()).append("','")
|
||||
.append(data.getCpxh()).append("','")
|
||||
.append(data.getWlmc()).append("','")
|
||||
.append(data.getTzbh()).append("','")
|
||||
.append(data.getRksl()).append("','")
|
||||
.append(data.getSl()).append("','")
|
||||
.append(SalaryDateUtil.getFormatLocalDate(data.getRq())).append("','")
|
||||
.append(data.getJsxs()).append("','")
|
||||
.append(data.getJsgzcl()).append("'),");
|
||||
}
|
||||
rs.execute(sb.substring(0,sb.length()-1).toString());
|
||||
});
|
||||
log.info("产品计算工资产量完成入库");
|
||||
log.info("产品计算工资产量开始权限重构minid{},maxid{}",minId,maxId);
|
||||
// 权限重构
|
||||
if (modeId != null && NumberUtils.isCreatable(modeId)) {
|
||||
Integer modeIdValue = Integer.valueOf(modeId);
|
||||
for (int i = minId; i <= maxId; i++) {
|
||||
ModeRightInfo ModeRightInfo = new ModeRightInfo();
|
||||
ModeRightInfo.setNewRight(true);
|
||||
ModeRightInfo.editModeDataShare(1, modeIdValue, i);
|
||||
}
|
||||
}
|
||||
log.info("产品计算工资产量完成权限重构minid{},maxid{}",minId,maxId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateMzgCpjsgzdj(MzqQueryParam param) {
|
||||
// 查询产品计算工资产品数据
|
||||
Date firstDayDateOfMonth = SalaryDateUtil.getFirstDayDateOfMonthWithMinutesAndSeconds(param.getSalaryMonth());
|
||||
Date lastDayDateOfMonth = SalaryDateUtil.getLastDayDateOfMonthWithMinutesAndSeconds(param.getSalaryMonth());
|
||||
log.info("开始生成美之高产品计算工资单价,开始日期{},结束日期{}",firstDayDateOfMonth,lastDayDateOfMonth);
|
||||
List<MzgCpddData> mzgCpddDataList = getCpddDataByDate(firstDayDateOfMonth, lastDayDateOfMonth);
|
||||
log.info("产品计算工资产量数据数" + mzgCpddDataList.size());
|
||||
if (CollectionUtils.isNotEmpty(mzgCpddDataList)) {
|
||||
// 获取所有班组基础信息
|
||||
List<MzgBzBaseInfo> bzInfoList= listAllBzBaseInfoList();
|
||||
log.info("获取所有班组基础信息,size:" + bzInfoList.size());
|
||||
Map<String, List<MzgBzBaseInfo>> ksBzMap = SalaryEntityUtil.group2Map(bzInfoList, MzgBzBaseInfo::getKsmc);
|
||||
List<String> dyzdList = bzInfoList.stream().map(MzgBzBaseInfo::getDyzd).collect(Collectors.toList());
|
||||
// 取出所有制造单价表数据
|
||||
List<Map<String, String>> zzdjInfoList = listAllZzdjInfo(dyzdList);
|
||||
log.info("取出所有制造单价表数据,size:" + zzdjInfoList.size());
|
||||
// 取出所有包装单价表数据
|
||||
List<Map<String, String>> bzdjInfoList = listAllBzdjInfo(dyzdList);
|
||||
log.info("取出所有包装单价表数据,size:" + bzdjInfoList.size());
|
||||
// 获取哪些部门属于包装
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String bzKsNames = baseBean.getPropValue("mzgSalaryReport", "bz_ks_names");
|
||||
List<String> bzKsList = new ArrayList<>();
|
||||
try {
|
||||
bzKsList.addAll(Arrays.stream(new String(bzKsNames.getBytes("ISO-8859-1"), "utf-8").split(",")).collect(Collectors.toList()));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
log.error("获取包装科室出错" + e);
|
||||
}
|
||||
|
||||
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
|
||||
String currTime = String.format("'%s'", sdf.format(new Date()));
|
||||
// 获取建模模块id
|
||||
String modeId = baseBean.getPropValue("mzgSalaryReport", "cpjsgzdj_mode_id");
|
||||
RecordSet rs = new RecordSet();
|
||||
int minId = 0;
|
||||
int maxId = 0;
|
||||
for (int i = 0; i < mzgCpddDataList.size(); i++ ) {
|
||||
MzgCpddData cpddData = mzgCpddDataList.get(i);
|
||||
String ks = cpddData.getBm();
|
||||
String zzzb = cpddData.getZzzb();
|
||||
// 获取该笔订单的部门,获取有那些班组
|
||||
List<MzgBzBaseInfo> bzList = ksBzMap.get(cpddData.getBm());
|
||||
// 判断是否需要根据制作组别判断
|
||||
if (StringUtils.isNotBlank(zzzb) && !(zzzb.equals(ks))) {
|
||||
bzList = bzList.stream().filter(bz -> bz.getBzmc().equals(zzzb)).collect(Collectors.toList());
|
||||
}
|
||||
// 判断是包装还是制造
|
||||
Map<String, String> djInfoMap = new HashMap<>();
|
||||
if (bzKsList.contains(ks)) {
|
||||
// 是包装科室,从包装表根据产品型号匹配
|
||||
String cpxh = cpddData.getCpxh();
|
||||
List<Map<String, String>> djInfoList = bzdjInfoList.stream().filter(map ->
|
||||
StringUtils.isNotBlank(map.get("cpxh")) && cpxh.equals(map.get("cpxh"))
|
||||
).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(djInfoList)) {
|
||||
djInfoMap = djInfoList.get(0);
|
||||
}
|
||||
} else {
|
||||
// 是制造科室,从制造表根据图纸编号匹配
|
||||
String tzbh = cpddData.getTzbh();
|
||||
List<Map<String, String>> djInfoList = zzdjInfoList.stream().filter(map ->
|
||||
StringUtils.isNotBlank(map.get("tzbh")) && tzbh.equals(map.get("tzbh"))
|
||||
).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(djInfoList)) {
|
||||
djInfoMap = djInfoList.get(0);
|
||||
}
|
||||
}
|
||||
// 获取所有班组对应的单价*计算工资产量
|
||||
Double jsgzclValue = NumberUtils.isCreatable(cpddData.getJsgzcl()) ? Double.valueOf(cpddData.getJsgzcl()) : new Double(0);;
|
||||
Map<String, String> gzdjValueMap = new HashMap<>();
|
||||
for (MzgBzBaseInfo bz : bzList) {
|
||||
Double djValue = NumberUtils.isCreatable(djInfoMap.get(bz.getDyzd())) ? Double.valueOf(djInfoMap.get(bz.getDyzd())) : new Double(0);
|
||||
double value = jsgzclValue * djValue;
|
||||
gzdjValueMap.put(bz.getDyzd(), String.valueOf(value));
|
||||
}
|
||||
cpddData.setValueMap(gzdjValueMap);
|
||||
|
||||
// 入库并权限重构
|
||||
if (i == 0){
|
||||
// 入库前先删除
|
||||
String deleteSql = "delete from uf_cpjsgzdj where rq >=? and rq <= ?";
|
||||
rs.executeUpdate(deleteSql, new Object[]{SalaryDateUtil.getFormatLocalDate(firstDayDateOfMonth), SalaryDateUtil.getFormatLocalDate(lastDayDateOfMonth)});
|
||||
// 先插入一条数据
|
||||
StringBuilder firstSb = new StringBuilder();
|
||||
firstSb.append("insert into uf_cpjsgzdj(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,journalid,rq,wlbh,mc,cpxh,gg,tzbh");
|
||||
for (MzgBzBaseInfo bz : bzList) {
|
||||
firstSb.append(",");
|
||||
firstSb.append(bz.getDyzd());
|
||||
}
|
||||
firstSb.append(") values (");
|
||||
firstSb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
|
||||
.append(cpddData.getJournalid()).append("','")
|
||||
.append(SalaryDateUtil.getFormatLocalDate(cpddData.getRq())).append("','")
|
||||
.append(Utils.null2String(cpddData.getWlbh())).append("','")
|
||||
.append(Utils.null2String(djInfoMap.get("mc"))).append("','")
|
||||
.append(Utils.null2String(cpddData.getCpxh())).append("','")
|
||||
.append(Utils.null2String(djInfoMap.get("gg"))).append("','")
|
||||
.append(Utils.null2String(cpddData.getTzbh())).append("'");
|
||||
for (MzgBzBaseInfo bz : bzList) {
|
||||
firstSb.append(",");
|
||||
firstSb.append(gzdjValueMap.get(bz.getDyzd()) == null ? "0" : gzdjValueMap.get(bz.getDyzd()));
|
||||
}
|
||||
firstSb.append(")");
|
||||
rs.execute(firstSb.toString());
|
||||
// 获取最大值 作为权限重构的起始id
|
||||
rs.execute("select max(id) from uf_cpjsgzdj");
|
||||
if (rs.next()) {
|
||||
minId = rs.getInt(1);
|
||||
}
|
||||
maxId = minId;
|
||||
} else {
|
||||
++maxId;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("insert into uf_cpjsgzdj(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,journalid,rq,wlbh,mc,cpxh,gg,tzbh");
|
||||
for (MzgBzBaseInfo bz : bzList) {
|
||||
sb.append(",");
|
||||
sb.append(bz.getDyzd());
|
||||
}
|
||||
sb.append(") values (");
|
||||
sb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
|
||||
.append(cpddData.getJournalid()).append("','")
|
||||
.append(SalaryDateUtil.getFormatLocalDate(cpddData.getRq())).append("','")
|
||||
.append(Utils.null2String(cpddData.getWlbh())).append("','")
|
||||
.append(Utils.null2String(djInfoMap.get("mc"))).append("','")
|
||||
.append(Utils.null2String(cpddData.getCpxh())).append("','")
|
||||
.append(Utils.null2String(djInfoMap.get("gg"))).append("','")
|
||||
.append(Utils.null2String(cpddData.getTzbh())).append("'");
|
||||
for (MzgBzBaseInfo bz : bzList) {
|
||||
sb.append(",");
|
||||
sb.append(gzdjValueMap.get(bz.getDyzd()) == null ? "0" : gzdjValueMap.get(bz.getDyzd()));
|
||||
}
|
||||
sb.append(")");
|
||||
rs.execute(sb.toString());
|
||||
}
|
||||
}
|
||||
// 权限重构
|
||||
log.info("产品计算工资单价开始权限重构minid{},maxid{}",minId,maxId);
|
||||
if (modeId != null && NumberUtils.isCreatable(modeId)) {
|
||||
Integer modeIdValue = Integer.valueOf(modeId);
|
||||
for (int i = minId; i <= maxId; i++) {
|
||||
ModeRightInfo ModeRightInfo = new ModeRightInfo();
|
||||
ModeRightInfo.setNewRight(true);
|
||||
ModeRightInfo.editModeDataShare(1, modeIdValue, i);
|
||||
}
|
||||
}
|
||||
log.info("产品计算工资单价完成权限重构minid{},maxid{}",minId,maxId);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取美之高erp产品订单数据
|
||||
* @param firstDayDateOfMonth
|
||||
* @param lastDayDateOfMonth
|
||||
* @return
|
||||
*/
|
||||
private List<MzgCpddData> getERPCpddDataByDate(Date firstDayDateOfMonth, Date lastDayDateOfMonth) {
|
||||
// 获取erp中产品订单表数据
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String dataSource = baseBean.getPropValue("mzgSalaryReport", "erp_datasource_name");
|
||||
RecordSetDataSource erpRs = new RecordSetDataSource(dataSource);
|
||||
String sql = "select a.JOURNALID,d.ProdPoolId 部门,case when d.ProdPoolId ='包二课' then IWS_MakeUpTypeId else d.ProdPoolId end 制作组别,b.ProdId 生产工单号, " +
|
||||
" b.IWS_ItemId 物料编号,d.IWS_Spec 产品型号,d.Name 物料名称,d.IWS_DrawingId 图纸编号, b.QtyGood 入库数量,d.QtySched 数量, b.TransDate 日期 " +
|
||||
"from ProdJournalTable a,ProdJournalProd b,INVENTDIM c,prodtable d " +
|
||||
"where a.JOURNALID=b.JOURNALID and a.DATAAREAID ='mg' and b.DATAAREAID ='mg' and c.DATAAREAID ='all' " +
|
||||
"and a.JournalNameId in ('Finish') and c.INVENTLOCATIONID not like '%xb' " +
|
||||
"and b.INVENTDIMID =c.INVENTDIMID and a.POSTED =1 and b.QtyGood<>0 " +
|
||||
"and d.DATAAREAID ='mg' and d.prodid=b.prodid and d.ProdPoolId NOT in ('开发课','模具课','下料课','外协') " +
|
||||
"and b.TransDate >=? and b.TransDate <= ? order by b.TransDate desc";
|
||||
erpRs.executeQueryWithDatasource(sql, dataSource, new Object[]{SalaryDateUtil.getFormatLocalDateTime(firstDayDateOfMonth), SalaryDateUtil.getFormatLocalDateTime(lastDayDateOfMonth)});
|
||||
List<MzgCpddData> mzgCpddDataList = new ArrayList<>();
|
||||
while (erpRs.next()) {
|
||||
mzgCpddDataList.add(MzgCpddData.builder()
|
||||
.journalid(erpRs.getString("JOURNALID"))
|
||||
.bm(erpRs.getString("部门"))
|
||||
.zzzb(erpRs.getString("制作组别"))
|
||||
.scgdh(erpRs.getString("生产工单号"))
|
||||
.wlbh(erpRs.getString("物料编号"))
|
||||
.cpxh(erpRs.getString("产品型号"))
|
||||
.wlmc(erpRs.getString("物料名称"))
|
||||
.tzbh(erpRs.getString("图纸编号"))
|
||||
.rksl(erpRs.getString("入库数量"))
|
||||
.sl(erpRs.getString("数量"))
|
||||
.rq(SalaryDateUtil.stringToDate(erpRs.getString("日期")))
|
||||
.build());
|
||||
}
|
||||
return mzgCpddDataList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取美之高部门对应系数规则配置
|
||||
* @return
|
||||
*/
|
||||
private Map<String, ExpressFormula> getMzgBmdyxsMap() {
|
||||
RecordSet rs = new RecordSet();
|
||||
String sql = "select sjbm,gs from uf_bmdyxsb" ;
|
||||
rs.execute(sql);
|
||||
Map<String, ExpressFormula> resultMap = new HashMap<>();
|
||||
while (rs.next()) {
|
||||
ExpressFormula formula = ExpressFormula.builder()
|
||||
.formula("formula")
|
||||
.extendParam("{\"isCustomFunction\":\"0\",\"sqlReturnKey\":\"\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}")
|
||||
.formulaRunScript(rs.getString("gs"))
|
||||
.referenceType(ReferenceTypeEnum.FORMULA.getValue())
|
||||
.build();
|
||||
resultMap.put(rs.getString("sjbm"), formula);
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取美之高建模产品订单数据
|
||||
* @param firstDayDateOfMonth
|
||||
* @param lastDayDateOfMonth
|
||||
* @return
|
||||
*/
|
||||
private List<MzgCpddData> getCpddDataByDate(Date firstDayDateOfMonth, Date lastDayDateOfMonth) {
|
||||
// 获取产品订单表数据
|
||||
RecordSet rs = new RecordSet();
|
||||
String sql = "select journalid,bm,zzzb,scgdh,wlbh,cpxh,wlmc,tzbh,rksl,sl,rq,jsxs,jsgzcl from uf_cpjsgzcl where rq >=? and rq <= ? order by rq desc";
|
||||
rs.executeQuery(sql, new Object[]{SalaryDateUtil.getFormatLocalDate(firstDayDateOfMonth), SalaryDateUtil.getFormatLocalDate(lastDayDateOfMonth)});
|
||||
List<MzgCpddData> mzgCpddDataList = new ArrayList<>();
|
||||
while (rs.next()) {
|
||||
mzgCpddDataList.add(MzgCpddData.builder()
|
||||
.journalid(rs.getString(1))
|
||||
.bm(rs.getString(2))
|
||||
.zzzb(rs.getString(3))
|
||||
.scgdh(rs.getString(4))
|
||||
.wlbh(rs.getString(5))
|
||||
.cpxh(rs.getString(6))
|
||||
.wlmc(rs.getString(7))
|
||||
.tzbh(rs.getString(8))
|
||||
.rksl(rs.getString(9))
|
||||
.sl(rs.getString(10))
|
||||
.rq(SalaryDateUtil.stringToDate(rs.getString(11)))
|
||||
.jsxs(rs.getString(12))
|
||||
.jsgzcl(rs.getString(13))
|
||||
.build());
|
||||
}
|
||||
return mzgCpddDataList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取美之高所有班组基础信息
|
||||
* @return
|
||||
*/
|
||||
private List<MzgBzBaseInfo> listAllBzBaseInfoList() {
|
||||
List<MzgBzBaseInfo> resultList = new ArrayList<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.execute("select dyzd,ksmc,bzmc from uf_bzjcb");
|
||||
while (rs.next()) {
|
||||
resultList.add(MzgBzBaseInfo.builder()
|
||||
.dyzd(rs.getString("dyzd"))
|
||||
.ksmc(rs.getString("ksmc"))
|
||||
.bzmc(rs.getString("bzmc"))
|
||||
.build());
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 美之高 取出所有制造单价表数据
|
||||
* @param dyzdList
|
||||
* @return
|
||||
*/
|
||||
private List<Map<String, String>> listAllZzdjInfo(List<String> dyzdList) {
|
||||
List<Map<String, String>> resultList = new ArrayList<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
String fieldStr = StringUtils.join(dyzdList, ",");
|
||||
String sql ="select wlbh,mc,cpxh,gg,tzbh,"+fieldStr+" from uf_zzcpdjb";
|
||||
rs.execute(sql);
|
||||
while (rs.next()) {
|
||||
Map<String, String> singleValueMap = new HashMap<>();
|
||||
singleValueMap.put("wlbh", rs.getString("wlbh"));
|
||||
singleValueMap.put("mc", rs.getString("mc"));
|
||||
singleValueMap.put("cpxh", rs.getString("cpxh"));
|
||||
singleValueMap.put("gg", rs.getString("gg"));
|
||||
singleValueMap.put("tzbh", rs.getString("tzbh"));
|
||||
for (String zd : dyzdList) {
|
||||
singleValueMap.put(zd, rs.getString(zd));
|
||||
}
|
||||
resultList.add(singleValueMap);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 美之高 取出所有包装单价表数据
|
||||
* @param dyzdList
|
||||
* @return
|
||||
*/
|
||||
private List<Map<String, String>> listAllBzdjInfo(List<String> dyzdList) {
|
||||
List<Map<String, String>> resultList = new ArrayList<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
String fieldStr = StringUtils.join(dyzdList, ",");
|
||||
String sql ="select wlbh,mc,cpxh,gg,tzbh,"+fieldStr+" from uf_cpdjbbz";
|
||||
rs.execute(sql);
|
||||
while (rs.next()) {
|
||||
Map<String, String> singleValueMap = new HashMap<>();
|
||||
singleValueMap.put("wlbh", rs.getString("wlbh"));
|
||||
singleValueMap.put("mc", rs.getString("mc"));
|
||||
singleValueMap.put("cpxh", rs.getString("cpxh"));
|
||||
singleValueMap.put("gg", rs.getString("gg"));
|
||||
singleValueMap.put("tzbh", rs.getString("tzbh"));
|
||||
for (String zd : dyzdList) {
|
||||
singleValueMap.put(zd, rs.getString(zd));
|
||||
}
|
||||
resultList.add(singleValueMap);
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.engine.salary.timer;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.salary.entity.salaryacct.param.MzqQueryParam;
|
||||
import com.engine.salary.service.SalaryAcctResultService;
|
||||
import com.engine.salary.service.impl.SalaryAcctResultServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName AutoSyncAttendQuoteData
|
||||
* @date 2023/08/11 9:53
|
||||
* @description 自动生成 美之高产品计算工资产量
|
||||
*/
|
||||
public class AutoSyncMzgCpjsgzcl extends BaseCronJob {
|
||||
|
||||
private String preMonth;
|
||||
|
||||
private String salaryMonth;
|
||||
|
||||
private SalaryAcctResultService getSalaryAcctResultService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
User tempUser = new User();
|
||||
tempUser.setUid(1);
|
||||
tempUser.setLoginid("sysadmin");
|
||||
LocalDate localDate = SalaryDateUtil.dateToLocalDate(new Date());
|
||||
|
||||
int preMonthValue = -1;
|
||||
if (preMonth != null && NumberUtils.isCreatable(preMonth)) {
|
||||
preMonthValue = -1 * Integer.valueOf(preMonth);
|
||||
}
|
||||
localDate = localDate.plusMonths(preMonthValue);
|
||||
Date date = SalaryDateUtil.localDateToDate(localDate);
|
||||
if (StringUtils.isNotBlank(salaryMonth) && SalaryDateUtil.checkYearMonth(salaryMonth)) {
|
||||
date = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
|
||||
}
|
||||
MzqQueryParam param = MzqQueryParam.builder().salaryMonth(date).build();
|
||||
getSalaryAcctResultService(tempUser).generateMzgCpjsgzcl(param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.engine.salary.timer;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.salary.entity.salaryacct.param.MzqQueryParam;
|
||||
import com.engine.salary.service.SalaryAcctResultService;
|
||||
import com.engine.salary.service.impl.SalaryAcctResultServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName AutoSyncAttendQuoteData
|
||||
* @date 2023/08/11 9:53
|
||||
* @description 自动生成 美之高产品计算工资单价
|
||||
*/
|
||||
public class AutoSyncMzgCpjsgzdj extends BaseCronJob {
|
||||
|
||||
private String preMonth;
|
||||
|
||||
private String salaryMonth;
|
||||
|
||||
private SalaryAcctResultService getSalaryAcctResultService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
User tempUser = new User();
|
||||
tempUser.setUid(1);
|
||||
tempUser.setLoginid("sysadmin");
|
||||
LocalDate localDate = SalaryDateUtil.dateToLocalDate(new Date());
|
||||
|
||||
int preMonthValue = -1;
|
||||
if (preMonth != null && NumberUtils.isCreatable(preMonth)) {
|
||||
preMonthValue = -1 * Integer.valueOf(preMonth);
|
||||
}
|
||||
localDate = localDate.plusMonths(preMonthValue);
|
||||
Date date = SalaryDateUtil.localDateToDate(localDate);
|
||||
if (StringUtils.isNotBlank(salaryMonth) && SalaryDateUtil.checkYearMonth(salaryMonth)) {
|
||||
date = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
|
||||
}
|
||||
MzqQueryParam param = MzqQueryParam.builder().salaryMonth(date).build();
|
||||
getSalaryAcctResultService(tempUser).generateMzgCpjsgzdj(param);
|
||||
}
|
||||
}
|
||||
|
|
@ -276,6 +276,18 @@ public class SalaryDateUtil {
|
|||
return cal.getTime();
|
||||
}
|
||||
|
||||
public static Date getLastDayDateOfMonthWithMinutesAndSeconds(final Date date) {
|
||||
final Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
|
||||
cal.set(Calendar.DAY_OF_MONTH, last);
|
||||
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
|
||||
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
|
||||
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
|
||||
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
|
||||
return cal.getTime();
|
||||
}
|
||||
|
||||
public static Date getLastDayOfMonth(final Date date) {
|
||||
final Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
|
|
|
|||
|
|
@ -928,4 +928,26 @@ public class SalaryAcctController {
|
|||
}
|
||||
|
||||
/**********************************线下对比 end*********************************/
|
||||
|
||||
// 生成美之高产品计算工资产量
|
||||
@POST
|
||||
@Path("/generate/mzgCpjsgzcl")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String generateMzgCpjsgzcl(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody MzqQueryParam param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<MzqQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::generateMzgCpjsgzcl, param);
|
||||
}
|
||||
|
||||
|
||||
// 生成美之高产品计算工资单价
|
||||
@POST
|
||||
@Path("/generate/mzgCpjsgzdj")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String generateMzgCpjsgzdj(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody MzqQueryParam param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<MzqQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::generateMzgCpjsgzdj, param);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -279,6 +279,15 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
|
|||
getSalaryAcctResultService(user).batchUpdate(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateMzgCpjsgzcl(MzqQueryParam param) {
|
||||
getSalaryAcctResultService(user).generateMzgCpjsgzcl(param);
|
||||
}
|
||||
|
||||
public void generateMzgCpjsgzdj(MzqQueryParam param) {
|
||||
getSalaryAcctResultService(user).generateMzgCpjsgzdj(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算-校验
|
||||
*
|
||||
|
|
|
|||
|
|
@ -20,4 +20,6 @@ public interface SalaryAcctResultWrapperProxy {
|
|||
void calculate(SalaryAcctCalculateParam calculateParam);
|
||||
|
||||
void batchUpdate(SalaryAcctResultBatchUpdateParam param);
|
||||
|
||||
void generateMzgCpjsgzcl(MzqQueryParam param);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue