|
@@ -12,6 +12,7 @@ import com.jjt.hl.domain.HlClass;
|
|
|
import com.jjt.hl.domain.HlObj;
|
|
|
import com.jjt.hl.mapper.HlObjMapper;
|
|
|
import com.jjt.hl.service.IHlClassService;
|
|
|
+import com.jjt.hl.service.IHlMetricsService;
|
|
|
import com.jjt.hl.service.IHlObjService;
|
|
|
import org.apache.ibatis.session.ExecutorType;
|
|
|
import org.apache.ibatis.session.SqlSession;
|
|
@@ -19,6 +20,8 @@ import org.apache.ibatis.session.SqlSessionFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -39,6 +42,10 @@ public class BizModelServiceImpl implements IBizModelService {
|
|
|
@Resource
|
|
|
private IHlClassService hlClassService;
|
|
|
@Resource
|
|
|
+ private IHlObjService hlObjService;
|
|
|
+ @Resource
|
|
|
+ private IHlMetricsService hlMetricsService;
|
|
|
+ @Resource
|
|
|
private SqlSessionFactory factory;
|
|
|
|
|
|
/**
|
|
@@ -129,15 +136,13 @@ public class BizModelServiceImpl implements IBizModelService {
|
|
|
*/
|
|
|
@Override
|
|
|
public int insertObj(Long modelId, Long[] objIds) {
|
|
|
- if (objIds.length == 0) {
|
|
|
- return 1;
|
|
|
- }
|
|
|
for (Long objId : objIds) {
|
|
|
BizModelDetail detail = new BizModelDetail();
|
|
|
detail.setModelId(modelId);
|
|
|
detail.setObjId(objId);
|
|
|
modelDetailService.insertBizModelDetail(detail);
|
|
|
}
|
|
|
+ impClass(modelId);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -166,10 +171,22 @@ public class BizModelServiceImpl implements IBizModelService {
|
|
|
List<BizModelDetail> details = modelDetailService.selectBizModelDetailList4ModelId(modelId);
|
|
|
Map<String, List<BizModelDetail>> map = details.stream().collect(Collectors.groupingBy(d -> d.getBizObj().getObjType()));
|
|
|
List<HlObj> hlObjList = new ArrayList<>();
|
|
|
+ int size = map.size();
|
|
|
+ BigDecimal total = BigDecimal.valueOf(100);
|
|
|
+ int avg = total.divide(BigDecimal.valueOf(size), 0, RoundingMode.HALF_DOWN).intValue();
|
|
|
+ int one = avg * size == total.intValue() ? avg : total.intValue() - avg * (size - 1);
|
|
|
+ boolean flag = true;
|
|
|
for (String s : map.keySet()) {
|
|
|
HlClass hlClass = new HlClass();
|
|
|
hlClass.setObjType(s);
|
|
|
hlClass.setModelId(modelId);
|
|
|
+ hlClass.setScoreType("1");
|
|
|
+ if (flag) {
|
|
|
+ hlClass.setHlScore(BigDecimal.valueOf(one));
|
|
|
+ flag = false;
|
|
|
+ } else {
|
|
|
+ hlClass.setHlScore(BigDecimal.valueOf(avg));
|
|
|
+ }
|
|
|
hlClassService.insertHlClass(hlClass);
|
|
|
|
|
|
List<BizModelDetail> detailList = map.get(s);
|
|
@@ -191,4 +208,94 @@ public class BizModelServiceImpl implements IBizModelService {
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导入分类
|
|
|
+ *
|
|
|
+ * @param modelId 模型ID
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void impClass(Long modelId) {
|
|
|
+ List<BizModelDetail> details = modelDetailService.selectBizModelDetailList4ModelId(modelId);
|
|
|
+ Map<String, List<BizModelDetail>> map = details.stream().collect(Collectors.groupingBy(d -> d.getBizObj().getObjType()));
|
|
|
+ List<HlClass> list = hlClassService.selectHlClassList4modelId(modelId);
|
|
|
+ List<String> typeList = list.stream().map(HlClass::getObjType).collect(Collectors.toList());
|
|
|
+ List<HlObj> hlObjList = new ArrayList<>();
|
|
|
+ for (String t : map.keySet()) {
|
|
|
+ if (!typeList.contains(t)) {
|
|
|
+ //添加
|
|
|
+ HlClass hlClass = new HlClass();
|
|
|
+ hlClass.setObjType(t);
|
|
|
+ hlClass.setModelId(modelId);
|
|
|
+ hlClass.setScoreType("1");
|
|
|
+ hlClass.setHlScore(BigDecimal.ZERO);
|
|
|
+ hlClassService.insertHlClass(hlClass);
|
|
|
+ List<BizModelDetail> detailList = map.get(t);
|
|
|
+ detailList.forEach(d -> {
|
|
|
+ HlObj hlObj = new HlObj();
|
|
|
+ hlObj.setHlClassId(hlClass.getHlClassId());
|
|
|
+ hlObj.setObjId(d.getObjId());
|
|
|
+ hlObjList.add(hlObj);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
+ HlObjMapper mapper = sqlSession.getMapper(HlObjMapper.class);
|
|
|
+ hlObjList.forEach(mapper::insertHlObj);
|
|
|
+ sqlSession.commit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 清理分类
|
|
|
+ *
|
|
|
+ * @param modelId 模型ID
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void cleanClass(Long modelId) {
|
|
|
+ List<BizModelDetail> details = modelDetailService.selectBizModelDetailList4ModelId(modelId);
|
|
|
+ List<Long> objList = details.stream().map(BizModelDetail::getObjId).collect(Collectors.toList());
|
|
|
+ List<HlClass> list = hlClassService.selectHlClassList4modelId(modelId);
|
|
|
+ list.forEach(hc -> {
|
|
|
+ List<HlObj> objs = hlObjService.selectHlObjListByClassId(hc.getHlClassId());
|
|
|
+ int delTimes = 0;
|
|
|
+ for (HlObj obj : objs) {
|
|
|
+ if (!objList.contains(obj.getHlObjId())) {
|
|
|
+ hlObjService.deleteHlObjByHlObjId(obj.getHlObjId());
|
|
|
+ delTimes++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (delTimes == objs.size()) {
|
|
|
+ //如果该类型对象已经被全部删除。
|
|
|
+ //那么需要删除当前类型,和该类型下的指标
|
|
|
+ hlMetricsService.deleteHlMetricsByClassId(hc.getHlClassId());
|
|
|
+ hlClassService.deleteHlClassByHlClassId(hc.getHlClassId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+// List<String> typeList = list.stream().map(HlClass::getObjType).collect(Collectors.toList());
|
|
|
+// List<HlObj> hlObjList = new ArrayList<>();
|
|
|
+// for (String t : map.keySet()) {
|
|
|
+// if (!typeList.contains(t)) {
|
|
|
+// //添加
|
|
|
+// HlClass hlClass = new HlClass();
|
|
|
+// hlClass.setObjType(t);
|
|
|
+// hlClass.setModelId(modelId);
|
|
|
+// hlClass.setScoreType("1");
|
|
|
+// hlClass.setHlScore(BigDecimal.ZERO);
|
|
|
+// hlClassService.insertHlClass(hlClass);
|
|
|
+// List<BizModelDetail> detailList = map.get(t);
|
|
|
+// detailList.forEach(d -> {
|
|
|
+// HlObj hlObj = new HlObj();
|
|
|
+// hlObj.setHlClassId(hlClass.getHlClassId());
|
|
|
+// hlObj.setObjId(d.getObjId());
|
|
|
+// hlObjList.add(hlObj);
|
|
|
+// });
|
|
|
+// }
|
|
|
+// }
|
|
|
+// try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
+// HlObjMapper mapper = sqlSession.getMapper(HlObjMapper.class);
|
|
|
+// hlObjList.forEach(mapper::insertHlObj);
|
|
|
+// sqlSession.commit();
|
|
|
+// }
|
|
|
+ }
|
|
|
}
|