12-22-项目绩效
This commit is contained in:
@ -48,6 +48,11 @@ public class BusProjectXmjxVo implements Serializable {
|
||||
@ExcelProperty(value = "合同产值")
|
||||
private BigDecimal htcz;
|
||||
|
||||
/**
|
||||
* 已完成产值百分比
|
||||
*/
|
||||
private BigDecimal ywcczbfb;
|
||||
|
||||
/**
|
||||
* 系数
|
||||
*/
|
||||
|
||||
@ -27,6 +27,7 @@ import org.dromara.project.service.IBusProjectZyzbService;
|
||||
import org.dromara.system.mapper.SysUserMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@ -430,11 +431,12 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
//项目负责人绩效
|
||||
if (vo.getXmfzr() != null && (vo.getJxxs() != null && vo.getJxxs().compareTo(BigDecimal.ZERO) > 0)){
|
||||
//总金额 * 项目系数 * 项目负责人系数 (万元)
|
||||
vo.setXmfzjx(vo.getHtcz().multiply(vo.getXs()).multiply(vo.getJxxs()).setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setXmfzjx(BigDecimal.valueOf(Double.parseDouble(vo.getHtcz().multiply(vo.getXs()).multiply(vo.getJxxs()).setScale(6, RoundingMode.HALF_UP).toPlainString())));
|
||||
}else {
|
||||
vo.setXmfzjx(BigDecimal.ZERO);
|
||||
}
|
||||
//专业
|
||||
BigDecimal ywcczbfb = BigDecimal.ZERO;//已完成产值百分比 所有专业已完成产值百分比 * 专业占比 相加 = 这个项目的产值真实完成百分比
|
||||
for (BusProjectZyzbVo zyszVo : zyszVos) {
|
||||
//如果这条专业数据的关联id和当前绩效id一致
|
||||
if (Objects.equals(zyszVo.getMainId(), vo.getId())){
|
||||
@ -443,7 +445,7 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
vo.getHtcz().multiply(vo.getXs())
|
||||
.multiply(zyszVo.getZyzb())
|
||||
.multiply(sjcz)
|
||||
.setScale(6, RoundingMode.HALF_UP)//万元,保留6位小数,四舍五入
|
||||
.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros()//万元,保留6位小数,四舍五入
|
||||
);
|
||||
zsjcz = zsjcz.add(zyszVo.getSjcz());
|
||||
|
||||
@ -452,7 +454,7 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
vo.getHtcz().multiply(vo.getXs())
|
||||
.multiply(zyszVo.getZyzb())
|
||||
.multiply(jscz)
|
||||
.setScale(6, RoundingMode.HALF_UP)
|
||||
.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros()
|
||||
);
|
||||
zjscz = zjscz.add(zyszVo.getJscz());
|
||||
|
||||
@ -461,12 +463,12 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
vo.getHtcz().multiply(vo.getXs())
|
||||
.multiply(zyszVo.getZyzb())
|
||||
.multiply(shcz)
|
||||
.setScale(6, RoundingMode.HALF_UP)
|
||||
.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros()
|
||||
);
|
||||
zshcz = zshcz.add(zyszVo.getShcz());
|
||||
|
||||
//计算审核绩效 审核产值 * 绩效系数
|
||||
zyszVo.setShjx(zyszVo.getShcz().multiply(jx).setScale(6, RoundingMode.HALF_UP));
|
||||
zyszVo.setShjx(zyszVo.getShcz().multiply(jx).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
zshjx = zshjx.add(zyszVo.getShjx());
|
||||
//通过历史记录构建人员详情
|
||||
BusProjectXmjxRyxq shTemp = null;
|
||||
@ -482,39 +484,39 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
shRyxq.setZyId(zyszVo.getId());//专业ID
|
||||
shRyxq.setZyName(zyszVo.getZymc());//专业名称
|
||||
shRyxq.setJsgw("审核");//角色岗位
|
||||
shRyxq.setWcjd(historyVo.getWcjd());//进度h
|
||||
shRyxq.setWcjd(historyVo.getWcjd());//进度
|
||||
shRyxq.setUserId(historyVo.getUserId());//人员ID
|
||||
shRyxq.setSgsj(historyVo.getCreateTime());
|
||||
shRyxq.setGtsj(historyVo.getGtsj());
|
||||
if (shTemp == null){
|
||||
shRyxq.setCz(zyszVo.getShcz().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP));//产值 * 对应完成度
|
||||
shRyxq.setJx(zyszVo.getShjx().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP));//设计的绩效
|
||||
shRyxq.setCz(zyszVo.getShcz().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//产值 * 对应完成度
|
||||
shRyxq.setJx(zyszVo.getShjx().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//设计的绩效
|
||||
//计算剩余产值和绩效
|
||||
shRyxq.setSycz(zyszVo.getShcz().subtract(shRyxq.getCz()));
|
||||
shRyxq.setSyjx(zyszVo.getShjx().subtract(shRyxq.getJx()));
|
||||
shRyxq.setSycz((zyszVo.getShcz().subtract(shRyxq.getCz())).stripTrailingZeros());
|
||||
shRyxq.setSyjx((zyszVo.getShjx().subtract(shRyxq.getJx())).stripTrailingZeros());
|
||||
}else {
|
||||
//基数则为上一个元素的剩余产值和绩效
|
||||
shRyxq.setCz(shTemp.getSycz().multiply(shRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP));//产值 * 对应完成度
|
||||
shRyxq.setJx(shTemp.getSyjx().multiply(shRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP));//设计的绩效
|
||||
shRyxq.setCz(shTemp.getSycz().multiply(shRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//产值 * 对应完成度
|
||||
shRyxq.setJx(shTemp.getSyjx().multiply(shRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//设计的绩效
|
||||
//计算剩余产值和绩效
|
||||
shRyxq.setSycz(shTemp.getSycz().subtract(shRyxq.getCz()));
|
||||
shRyxq.setSyjx(shTemp.getSyjx().subtract(shRyxq.getJx()));
|
||||
shRyxq.setSycz((shTemp.getSycz().subtract(shRyxq.getCz())).stripTrailingZeros());
|
||||
shRyxq.setSyjx((shTemp.getSyjx().subtract(shRyxq.getJx())).stripTrailingZeros());
|
||||
}
|
||||
shywccz = shywccz.add(shRyxq.getCz());
|
||||
shywcjx = shywcjx.add(shRyxq.getJx());
|
||||
shRyxq.setZcz(zyszVo.getShcz());
|
||||
shRyxq.setZjx(zyszVo.getShjx());
|
||||
shRyxq.setZcz(zyszVo.getShcz().stripTrailingZeros());
|
||||
shRyxq.setZjx(zyszVo.getShjx().stripTrailingZeros());
|
||||
shTemp = shRyxq;
|
||||
ryxqs.add(shRyxq);
|
||||
}
|
||||
}
|
||||
zyszVo.setShywccz(shywccz);
|
||||
zyszVo.setShywcjx(shywcjx);
|
||||
zyszVo.setShsycz(zyszVo.getShcz().subtract(shywccz));//审核剩余产值
|
||||
zyszVo.setShsyjx(zyszVo.getShjx().subtract(shywcjx));//审核剩余绩效
|
||||
zyszVo.setShywccz(shywccz.stripTrailingZeros());
|
||||
zyszVo.setShywcjx(shywcjx.stripTrailingZeros());
|
||||
zyszVo.setShsycz((zyszVo.getShcz().subtract(shywccz)).stripTrailingZeros());//审核剩余产值
|
||||
zyszVo.setShsyjx((zyszVo.getShjx().subtract(shywcjx)).stripTrailingZeros());//审核剩余绩效
|
||||
|
||||
//计算校审绩效 校审产值 * 绩效系数
|
||||
zyszVo.setJsjx(zyszVo.getJscz().multiply(jx).setScale(6, RoundingMode.HALF_UP));
|
||||
zyszVo.setJsjx(zyszVo.getJscz().multiply(jx).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
zjsjx = zjsjx.add(zyszVo.getJsjx());
|
||||
//通过历史记录构建人员详情
|
||||
BusProjectXmjxRyxq jsTemp = null;
|
||||
@ -536,35 +538,35 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
jsRyxq.setSgsj(historyVo.getCreateTime());
|
||||
jsRyxq.setGtsj(historyVo.getGtsj());
|
||||
if (jsTemp == null){
|
||||
jsRyxq.setCz(zyszVo.getJscz().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP));//产值 * 对应完成度
|
||||
jsRyxq.setJx(zyszVo.getJsjx().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP));//设计的绩效
|
||||
jsRyxq.setCz(zyszVo.getJscz().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//产值 * 对应完成度
|
||||
jsRyxq.setJx(zyszVo.getJsjx().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//设计的绩效
|
||||
//计算剩余产值和绩效
|
||||
jsRyxq.setSycz(zyszVo.getJscz().subtract(jsRyxq.getCz()));
|
||||
jsRyxq.setSyjx(zyszVo.getJsjx().subtract(jsRyxq.getJx()));
|
||||
jsRyxq.setSycz((zyszVo.getJscz().subtract(jsRyxq.getCz())).stripTrailingZeros());
|
||||
jsRyxq.setSyjx((zyszVo.getJsjx().subtract(jsRyxq.getJx())).stripTrailingZeros());
|
||||
}else {
|
||||
//基数则为上一个元素的剩余产值和绩效
|
||||
jsRyxq.setCz(jsTemp.getSycz().multiply(jsRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP));//产值 * 对应完成度
|
||||
jsRyxq.setJx(jsTemp.getSyjx().multiply(jsRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP));//设计的绩效
|
||||
jsRyxq.setCz(jsTemp.getSycz().multiply(jsRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//产值 * 对应完成度
|
||||
jsRyxq.setJx(jsTemp.getSyjx().multiply(jsRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//设计的绩效
|
||||
//计算剩余产值和绩效
|
||||
jsRyxq.setSycz(jsTemp.getSycz().subtract(jsRyxq.getCz()));
|
||||
jsRyxq.setSyjx(jsTemp.getSyjx().subtract(jsRyxq.getJx()));
|
||||
jsRyxq.setSycz((jsTemp.getSycz().subtract(jsRyxq.getCz())).stripTrailingZeros());
|
||||
jsRyxq.setSyjx((jsTemp.getSyjx().subtract(jsRyxq.getJx())).stripTrailingZeros());
|
||||
}
|
||||
jsywccz = jsywccz.add(jsRyxq.getCz());
|
||||
jsywcjx = jsywcjx.add(jsRyxq.getJx());
|
||||
jsRyxq.setZcz(zyszVo.getJscz());
|
||||
jsRyxq.setZjx(zyszVo.getJsjx());
|
||||
jsRyxq.setZcz(zyszVo.getJscz().stripTrailingZeros());
|
||||
jsRyxq.setZjx(zyszVo.getJsjx().stripTrailingZeros());
|
||||
jsTemp = jsRyxq;
|
||||
ryxqs.add(jsRyxq);
|
||||
}
|
||||
}
|
||||
zyszVo.setJsywccz(jsywccz);
|
||||
zyszVo.setJsywcjx(jsywcjx);
|
||||
zyszVo.setJssycz(zyszVo.getJscz().subtract(jsywccz));//校审剩余产值
|
||||
zyszVo.setJssyjx(zyszVo.getJsjx().subtract(jsywcjx));//校审剩余绩效
|
||||
zyszVo.setJsywccz(jsywccz.stripTrailingZeros());
|
||||
zyszVo.setJsywcjx(jsywcjx.stripTrailingZeros());
|
||||
zyszVo.setJssycz((zyszVo.getJscz().subtract(jsywccz)).stripTrailingZeros());//校审剩余产值
|
||||
zyszVo.setJssyjx((zyszVo.getJsjx().subtract(jsywcjx)).stripTrailingZeros());//校审剩余绩效
|
||||
|
||||
//计算设计绩效 设计产值 * 绩效系数
|
||||
BigDecimal sjywccz = BigDecimal.ZERO;//设计已完成产值
|
||||
zyszVo.setSjjx(zyszVo.getSjcz().multiply(jx).setScale(6, RoundingMode.HALF_UP));
|
||||
zyszVo.setSjjx(zyszVo.getSjcz().multiply(jx).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
zsjjx = zsjjx.add(zyszVo.getSjjx());
|
||||
//通过历史记录构建人员详情
|
||||
BusProjectXmjxRyxq sjTemp = null;
|
||||
@ -584,44 +586,67 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
sjRyxq.setSgsj(historyVo.getCreateTime());
|
||||
sjRyxq.setGtsj(historyVo.getGtsj());
|
||||
if (sjTemp == null){
|
||||
sjRyxq.setCz(zyszVo.getSjcz().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP));//产值 * 对应完成度
|
||||
sjRyxq.setJx(zyszVo.getSjjx().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP));//设计的绩效
|
||||
sjRyxq.setCz(zyszVo.getSjcz().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//产值 * 对应完成度
|
||||
sjRyxq.setJx(zyszVo.getSjjx().multiply(historyVo.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//设计的绩效
|
||||
//计算剩余产值和绩效
|
||||
sjRyxq.setSycz(zyszVo.getSjcz().subtract(sjRyxq.getCz()));
|
||||
sjRyxq.setSyjx(zyszVo.getSjjx().subtract(sjRyxq.getJx()));
|
||||
sjRyxq.setSycz((zyszVo.getSjcz().subtract(sjRyxq.getCz())).stripTrailingZeros());
|
||||
sjRyxq.setSyjx((zyszVo.getSjjx().subtract(sjRyxq.getJx())).stripTrailingZeros());
|
||||
}else {
|
||||
//基数则为上一个元素的剩余产值和绩效
|
||||
sjRyxq.setCz(sjTemp.getSycz().multiply(sjRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP));//产值 * 对应完成度
|
||||
sjRyxq.setJx(sjTemp.getSyjx().multiply(sjRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP));//设计的绩效
|
||||
sjRyxq.setCz(sjTemp.getSycz().multiply(sjRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//产值 * 对应完成度
|
||||
sjRyxq.setJx(sjTemp.getSyjx().multiply(sjRyxq.getWcjd()).setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());//设计的绩效
|
||||
//计算剩余产值和绩效
|
||||
sjRyxq.setSycz(sjTemp.getSycz().subtract(sjRyxq.getCz()));
|
||||
sjRyxq.setSyjx(sjTemp.getSyjx().subtract(sjRyxq.getJx()));
|
||||
sjRyxq.setSycz((sjTemp.getSycz().subtract(sjRyxq.getCz())).stripTrailingZeros());
|
||||
sjRyxq.setSyjx((sjTemp.getSyjx().subtract(sjRyxq.getJx())).stripTrailingZeros());
|
||||
}
|
||||
sjywccz = sjywccz.add(sjRyxq.getCz());
|
||||
sjywcjx = sjywcjx.add(sjRyxq.getJx());
|
||||
sjRyxq.setZcz(zyszVo.getSjcz());
|
||||
sjRyxq.setZjx(zyszVo.getSjjx());
|
||||
sjRyxq.setZcz(zyszVo.getSjcz().stripTrailingZeros());
|
||||
sjRyxq.setZjx(zyszVo.getSjjx().stripTrailingZeros());
|
||||
sjTemp = sjRyxq;
|
||||
ryxqs.add(sjRyxq);
|
||||
}
|
||||
}
|
||||
zyszVo.setSjywccz(sjywccz);
|
||||
zyszVo.setSjywcjx(sjywcjx);
|
||||
zyszVo.setSjsycz(zyszVo.getSjcz().subtract(sjywccz));
|
||||
zyszVo.setSjsyjx(zyszVo.getSjjx().subtract(sjywcjx));//设计剩余绩效
|
||||
zyszVo.setSjywccz(sjywccz.stripTrailingZeros());
|
||||
zyszVo.setSjywcjx(sjywcjx.stripTrailingZeros());
|
||||
zyszVo.setSjsycz((zyszVo.getSjcz().subtract(sjywccz)).stripTrailingZeros());
|
||||
zyszVo.setSjsyjx((zyszVo.getSjjx().subtract(sjywcjx)).stripTrailingZeros());//设计剩余绩效
|
||||
|
||||
//添加数组
|
||||
zyszVos1.add(zyszVo);//专业详情
|
||||
|
||||
//计算项目的产值完成百分比 所有专业完成 = 100 一个专业 设计的产值全部完成占80 校审产值全部完成占15 审核产值全部完成占5
|
||||
//设计产值已完成百分比
|
||||
BigDecimal sjczywcbfb = sjywccz.divide(zyszVo.getSjcz(), 2, RoundingMode.HALF_UP);//设计已完成产值/设计产值=设计产值已完成百分比 1.00
|
||||
//设计已完成百分比 * 设计绩效系数0.8 = 设计真实完成比
|
||||
BigDecimal sjzswcb = sjczywcbfb.multiply(sjcz);
|
||||
|
||||
//校审产值已完成百分比
|
||||
BigDecimal jsczywcbfb = jsywccz.divide(zyszVo.getJscz(), 2, RoundingMode.HALF_UP);//校审已完成产值/校审产值=校审已完成百分比 1.00
|
||||
//校审已完成百分比 * 校审绩效系数0.15 = 校审真实完成比
|
||||
BigDecimal jszswcb = jsczywcbfb.multiply(jscz);
|
||||
|
||||
//审核产值已完成百分比
|
||||
BigDecimal shczywcbfb = shywccz.divide(zyszVo.getShcz(), 2, RoundingMode.HALF_UP);//审核已完成产值/审核产值=审核已完成百分比 1.00
|
||||
//审核已完成百分比 * 审核绩效系数0.05 = 审核真实完成比
|
||||
BigDecimal shzswcb = shczywcbfb.multiply(shcz);
|
||||
|
||||
//设计+校审+审核 * 专业占比 = 专业占比完成比
|
||||
BigDecimal zyzbwcb = (sjzswcb.add(jszswcb).add(shzswcb)).multiply(zyszVo.getZyzb()).setScale(2, RoundingMode.HALF_UP);
|
||||
|
||||
ywcczbfb = ywcczbfb.add(zyzbwcb);
|
||||
}
|
||||
}
|
||||
|
||||
vo.setZsjcz(zsjcz.setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setZjscz(zjscz.setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setZshcz(zshcz.setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setZsjcz(zsjcz.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
vo.setZjscz(zjscz.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
vo.setZshcz(zshcz.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
|
||||
vo.setZsjjx(zsjjx.setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setZjsjx(zjsjx.setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setZshjx(zshjx.setScale(6, RoundingMode.HALF_UP));
|
||||
vo.setZsjjx(zsjjx.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
vo.setZjsjx(zjsjx.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
vo.setZshjx(zshjx.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros());
|
||||
|
||||
vo.setYwcczbfb(ywcczbfb.stripTrailingZeros());
|
||||
|
||||
Collections.reverse(zyszVos1);//颠倒顺序
|
||||
vo.setZyszVos(zyszVos1);//专业详情
|
||||
@ -630,6 +655,7 @@ public class BusProjectXmjxServiceImpl extends ServiceImpl<BusProjectXmjxMapper,
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void addHistory(BusProjectZyzbBo zyszBo){
|
||||
//向项目人员绩效完成历史添加数据 一条数据要添加3个岗位的历史数据
|
||||
BusProjectXmjxWcjdHistoryBo sjHistoryBo = new BusProjectXmjxWcjdHistoryBo();
|
||||
|
||||
Reference in New Issue
Block a user