package com.highdatas.mdm.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.generator.config.querys.AbstractDbQuery;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.highdatas.mdm.entity.Flows;
import com.highdatas.mdm.entity.Maintain;
import com.highdatas.mdm.entity.MaintainDetail;
import com.highdatas.mdm.mapper.MaintainMapper;
import com.highdatas.mdm.mapper.TableInfoMapper;
import com.highdatas.mdm.pojo.*;
import com.highdatas.mdm.service.*;
import com.highdatas.mdm.util.Constant;
import com.highdatas.mdm.util.DbUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.MessageFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author kimi
* @since 2019-12-16
*/
@Service
public class MaintainServiceImpl extends ServiceImpl implements IMaintainService {
@Autowired
IMaintainDetailService maintainDetailService;
@Autowired
TableInfoMapper tableInfoMapper;
@Autowired
MasterDataService masterDataService;
@Autowired
ISysFieldService fieldService;
@Autowired
MaintainMapper maintainMapper;
@Autowired
IFlowsService flowsService;
@Override
public HashMap compare(String maintainId, String maintainId2) {
Maintain baseMaintain = selectById(maintainId);
Maintain compareMaintain = selectById(maintainId2);
HashMap operateIntegerMap = new HashMap();
if (DbUtils.compareVersion(baseMaintain, compareMaintain) > 0) {
addCompareInfo(baseMaintain, compareMaintain, operateIntegerMap);
operateIntegerMap.put(Operate.common, MessageFormat.format("{0} 对比 {1}", baseMaintain.getVersion(), compareMaintain.getVersion()));
}else {
addCompareInfo(compareMaintain, baseMaintain, operateIntegerMap);
operateIntegerMap.put(Operate.common, MessageFormat.format("{0} 对比 {1}", compareMaintain.getVersion(), baseMaintain.getVersion()));
}
return operateIntegerMap;
}
private void addCompareInfo(Maintain baseMaintain, Maintain compareMaintain, HashMap operateIntegerMap) {
Integer fromNo = compareMaintain.getOrderNo();
Integer toNo = baseMaintain.getOrderNo();
for (int i = fromNo + 1; i <= toNo; i++) {
Maintain maintain = selectOne(new EntityWrapper().eq("table_name", baseMaintain.getTableName()).eq("order_no", i));
List maintainDetailList = maintainDetailService.selectList(new EntityWrapper().eq("parent_id", maintain.getId()));
for (MaintainDetail maintainDetail : maintainDetailList) {
Operate operate = maintainDetail.getOperate();
Integer integer = (Integer) operateIntegerMap.get(operate);
if (integer == null) {
integer = 1;
} else {
integer++;
}
operateIntegerMap.put(operate, integer);
}
}
}
@Override
public void dealFlow(String maintainId, ActivitiStatus status) {
Maintain maintain = selectById(maintainId);
String tableName = maintain.getTableName();
List maintainDetailList = maintainDetailService.selectList(new EntityWrapper().eq("parent_id", maintainId));
if (status.equals(ActivitiStatus.close)) {
String collect = maintainDetailList.stream().map(detail -> DbUtils.quotedStr(detail.getPreMergeId())).collect(Collectors.joining(Constant.COMMA));
//delete temp
if (!StringUtils.isEmpty(collect)) {
masterDataService.delete(tableName + Constant.RECORD, "id in (" +collect+ ")");
}
//delete detail
for (MaintainDetail maintainDetail : maintainDetailList) {
maintainDetail.deleteById();
}
//delete maintain
maintain.deleteById();
return;
}
String fields = masterDataService.getTempFields(tableName);
String tempFields = masterDataService.getFields(tableName + Constant.RECORD);
String tableTempName = tableName + Constant.RECORD;
// insert 2 std
tableInfoMapper.tempCreate2std(tableName, fields, tableTempName, DbUtils.quotedStr(maintainId));
// update
List