|
|
@@ -86,17 +86,29 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
*
|
|
|
* @param xmId
|
|
|
*/
|
|
|
- public boolean judgeXmIsOver(Long xmId, boolean isThrowEx) {
|
|
|
+ public boolean judgeXmIsOver(Long xmId, String dateStr, boolean isThrowEx) {
|
|
|
JSONObject byXmId = baseMapper.getXmStatusByXmId(xmId);
|
|
|
if (Func.isNull(byXmId)) {
|
|
|
return false;
|
|
|
}
|
|
|
+ Date selDate = null;
|
|
|
+ if (dateStr == null) {
|
|
|
+ selDate = new Date();
|
|
|
+ } else {
|
|
|
+ //年月日
|
|
|
+ if (dateStr.length() == 8) {
|
|
|
+ selDate = DateUtil.parse(dateStr, DateUtil.PATTERN_YYYYMMDD);
|
|
|
+ } else if (dateStr.length() == 6) {
|
|
|
+
|
|
|
+// selDate = DateUtil.parse(DateUtil.PATTERN_YYYYMM);
|
|
|
+ }
|
|
|
+ }
|
|
|
Integer status = byXmId.getInteger("status");
|
|
|
-// Date xmjssj = byXmId.getDate("xmjssj");
|
|
|
-// if (Func.equals(status, XmStatusEnum.已结题.getCode()) || xmjssj.compareTo(new Date()) < 0) {
|
|
|
- if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
|
|
|
+ Date xmjssj = byXmId.getDate("xmjssj");
|
|
|
+ if (Func.equals(status, XmStatusEnum.已结题.getCode()) || xmjssj.compareTo(selDate) < 0) {
|
|
|
if (isThrowEx) {
|
|
|
- throw new ServiceException("项目已结题,不可操作");
|
|
|
+ String xmbh = byXmId.getString("xmbh");
|
|
|
+ throw new ServiceException("项目【" + xmbh + "】已结题/已结束,不可操作");
|
|
|
} else {
|
|
|
return true;
|
|
|
}
|
|
|
@@ -106,14 +118,14 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
|
|
|
private void judgeXmmcAndXmbhUnique(XmDTO xm) {
|
|
|
//检查项目名称是否重复(xm);
|
|
|
- if(Func.isNotBlank(xm.getXmmc())){
|
|
|
+ if (Func.isNotBlank(xm.getXmmc())) {
|
|
|
Long xmIdByXmmc = baseMapper.getXmIdByXmmcOrXmbh(null, xm.getXmmc(), null);
|
|
|
if (xmIdByXmmc != null && !xmIdByXmmc.equals(xm.getId())) {
|
|
|
throw new ServiceException("研发项目名称已存在");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(Func.isNotBlank(xm.getXmbh())){
|
|
|
+ if (Func.isNotBlank(xm.getXmbh())) {
|
|
|
Long xmIdByXmbh = baseMapper.getXmIdByXmmcOrXmbh(null, null, xm.getXmbh());
|
|
|
if (xmIdByXmbh != null && !xmIdByXmbh.equals(xm.getId())) {
|
|
|
throw new ServiceException("研发项目编号已存在");
|
|
|
@@ -128,15 +140,15 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
//判断项目名称和编号是否已存在
|
|
|
judgeXmmcAndXmbhUnique(xm);
|
|
|
if (Func.equals(xm.getStatus(), XmStatusEnum.暂存.getCode())) {
|
|
|
- if(Func.isBlank(xm.getXmbh())){
|
|
|
+ if (Func.isBlank(xm.getXmbh())) {
|
|
|
throw new ServiceException("请填写项目编号");
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
List<String> validate = ValidationUtils.validate(xm);
|
|
|
if (Func.isNotEmpty(validate)) {
|
|
|
throw new ServiceException(String.join("\n", validate));
|
|
|
}
|
|
|
- judgeXmIsOver(xm.getId(), true);
|
|
|
+ judgeXmIsOver(xm.getId(), null, true);
|
|
|
if (xm.getXmyszemx() != null) {
|
|
|
List<JSONObject> list = JSONObject.parseArray(xm.getXmyszemx(), JSONObject.class);
|
|
|
BigDecimal total = list.stream().map(item -> item.getBigDecimal("amount")).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.UP);
|
|
|
@@ -162,15 +174,15 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
xm.setStatus(baseMapper.getXmStatusByXmId(xmId).getInteger("status"));
|
|
|
if (xm.getXmfzr() != null) {
|
|
|
xm.setXmfzrxm(Func.toStr(technicianMapper.getNameById(xm.getXmfzr()), ""));
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
xm.setXmfzrxm("");
|
|
|
}
|
|
|
if (xm.getXmsqdwid() != null) {
|
|
|
xm.setXmsqdw(Func.toStr(departmentMapper.getFullNameById(xm.getXmsqdwid()), ""));
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
xm.setXmsqdw("");
|
|
|
}
|
|
|
- return cn.hutool.core.bean.BeanUtil.copyProperties(xm, XmVO.class);
|
|
|
+ return cn.hutool.core.bean.BeanUtil.copyProperties(xm, XmVO.class);
|
|
|
}
|
|
|
|
|
|
@SneakyThrows
|
|
|
@@ -318,8 +330,9 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
throw new ServiceException("请选择研发项目");
|
|
|
}
|
|
|
XmYszbVO vo = baseMapper.selectYszb(xmId);
|
|
|
- vo.setTotal(vo.getRyrgfy() + vo.getZjtrfy() + vo.getZjfyycqdtfy() + vo.getWxzctxfy() + vo.getSjfy() + vo.getZbtsysyfy() + vo.getWtwbyjkffy() + vo.getQtfy());
|
|
|
- if (vo.getTotal() == 0) {
|
|
|
+
|
|
|
+ vo.setTotal(vo.getRyrgfy().add(vo.getZjtrfy()).add(vo.getZjfyycqdtfy()).add(vo.getWxzctxfy()).add(vo.getSjfy()).add(vo.getZbtsysyfy()).add(vo.getWtwbyjkffy()).add(vo.getQtfy()));
|
|
|
+ if (BigDecimal.ZERO.compareTo(vo.getTotal()) <= 0) {
|
|
|
vo.setRyrgfyRate(0.00);
|
|
|
vo.setZjtrfyRate(0.00);
|
|
|
vo.setZjfyycqdtfyRate(0.00);
|
|
|
@@ -329,14 +342,14 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
vo.setWtwbyjkffyRate(0.00);
|
|
|
vo.setQtfyRate(0.00);
|
|
|
} else {
|
|
|
- vo.setRyrgfyRate(BigDecimal.valueOf(vo.getRyrgfy() / vo.getTotal()).setScale(4, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setZjtrfyRate(BigDecimal.valueOf(vo.getZjtrfy() / vo.getTotal()).setScale(4, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setZjfyycqdtfyRate(BigDecimal.valueOf(vo.getZjfyycqdtfy() / vo.getTotal()).setScale(4, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setWxzctxfyRate(BigDecimal.valueOf(vo.getWxzctxfy() / vo.getTotal()).setScale(4, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setSjfyRate(BigDecimal.valueOf(vo.getSjfy() / vo.getTotal()).setScale(4, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setZbtsysyfyRate(BigDecimal.valueOf(vo.getZbtsysyfy() / vo.getTotal()).setScale(2, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setWtwbyjkffyRate(BigDecimal.valueOf(vo.getWtwbyjkffy() / vo.getTotal()).setScale(2, RoundingMode.HALF_UP).doubleValue());
|
|
|
- vo.setQtfyRate(BigDecimal.valueOf(vo.getQtfy() / vo.getTotal()).setScale(2, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setRyrgfyRate(vo.getRyrgfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setZjtrfyRate(vo.getZjtrfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setZjfyycqdtfyRate(vo.getZjfyycqdtfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setWxzctxfyRate(vo.getWxzctxfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setSjfyRate(vo.getSjfy().divide(vo.getTotal(),4, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setZbtsysyfyRate(vo.getZbtsysyfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setWtwbyjkffyRate(vo.getWtwbyjkffy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
|
|
|
+ vo.setQtfyRate(vo.getQtfy().divide(vo.getTotal(),2, RoundingMode.HALF_UP).doubleValue());
|
|
|
}
|
|
|
|
|
|
vo.setTotalRate(1.00);
|
|
|
@@ -348,6 +361,17 @@ public class XmServiceImpl extends BaseServiceImpl<XmMapper, XmEntity> implement
|
|
|
@Override
|
|
|
public void exportYszb(OutputStream os, Long xmId) {
|
|
|
XmYszbVO vo = this.selectYszb(xmId);
|
|
|
+
|
|
|
+ vo.setRyrgfy(vo.getRyrgfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setZjtrfy(vo.getZjtrfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setZjfyycqdtfy(vo.getZjfyycqdtfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setWxzctxfy(vo.getWxzctxfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setSjfy(vo.getSjfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setZbtsysyfy(vo.getZbtsysyfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setWtwbyjkffy(vo.getWtwbyjkffy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setQtfy(vo.getQtfy().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+ vo.setTotal(vo.getTotal().divide(BigDecimal.valueOf(10000L), 4, RoundingMode.UP));
|
|
|
+
|
|
|
vo.setXmkssjStr(Func.notNull(vo.getXmkssj()) ? DateUtil.format(vo.getXmkssj(), "yyyy年MM月dd日") : null);
|
|
|
vo.setXmjssjStr(Func.notNull(vo.getXmjssj()) ? DateUtil.format(vo.getXmjssj(), "yyyy年MM月dd日") : null);
|
|
|
|