基础资料添加导入功能

添加导入实现类,用以同步执行
This commit is contained in:
ptt 2025-07-01 17:17:22 +08:00
parent a6db6a4c41
commit 644f98b934
7 changed files with 285 additions and 12 deletions

View File

@ -3,6 +3,10 @@ package com.ruoyi.basedata.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.util.importRunnable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -21,6 +25,7 @@ import com.ruoyi.basedata.domain.Pounddata;
import com.ruoyi.basedata.service.IPounddataService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* 计量基础资料Controller
@ -35,6 +40,9 @@ public class PounddataController extends BaseController
@Autowired
private IPounddataService pounddataService;
@Autowired
private importRunnable importRunnable;
/**
* 查询计量基础资料列表
*/
@ -102,4 +110,27 @@ public class PounddataController extends BaseController
{
return toAjax(pounddataService.removeByIds(Arrays.asList(ids)));
}
/**
* 下载模板
*/
@PostMapping("/importTemplate")
public void downTemplate(HttpServletResponse response) {
ExcelUtil<Pounddata> util = new ExcelUtil<>(Pounddata.class);
util.importTemplateExcel(response, "类别");
}
@PostMapping("/importData")
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
{
ExcelUtil<Pounddata> util = new ExcelUtil<Pounddata>(Pounddata.class);
List<Pounddata> poundList = util.importExcel(file.getInputStream());
importRunnable.removeParam();
importRunnable.setPounddataList(poundList);
importRunnable.setOperName(SecurityUtils.getLoginUser().getUsername());
Thread thread = new Thread(importRunnable);
thread.start();
return success("后台导入中...");
}
}

View File

@ -39,7 +39,6 @@ public class Pounddata extends BaseEntity
private String type;
/** 业务磅点id */
@Excel(name = "业务磅点id")
private Long poundid;
/** 助记码 */
@ -47,29 +46,27 @@ public class Pounddata extends BaseEntity
private String helpcode;
/** 登记部门 */
@Excel(name = "登记部门")
private Long crtorgid;
/** 是否启用 */
@Excel(name = "是否启用")
private String isinuse;
/** 备注 */
@Excel(name = "备注")
private String remark;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date crtdt;
/** 创建人 */
@Excel(name = "创建人")
private String crtopr;
/** 最后修改日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "最后修改日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date lstedtdt;
/** 最后修改人 */
@Excel(name = "最后修改人")
private String lstedtopr;
public void setId(String id)
@ -192,6 +189,16 @@ public class Pounddata extends BaseEntity
return lstedtopr;
}
@Override
public String getRemark() {
return remark;
}
@Override
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

View File

@ -0,0 +1,60 @@
package com.ruoyi.util;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class Util {
@Autowired
private ISysDictTypeService dictTypeService;
/**
* 根据字典类型获取字典所有标签
* @param dictType
* @return
*/
public static String getDictLabel(String dictType){
List<SysDictData> bom_wfzbase = DictUtils.getDictCache(dictType);
String strings = "";
for (int i = 0; i < bom_wfzbase.size(); i++) {
String dictLabel = bom_wfzbase.get(i).getDictLabel();
strings += ","+dictLabel;
}
return strings;
}
/**
* 根据字典键值和类型获取字典备注
* @param dictType
* @return
*/
public String getDictRemark(String dictValue,String dictType){
List<SysDictData> bom_wfzbase1 = dictTypeService.selectDictDataByType(dictType);
for (int i = 0; i < bom_wfzbase1.size(); i++) {
SysDictData sysDictData = bom_wfzbase1.get(i);
if(dictValue.equals(sysDictData.getDictValue())){
return sysDictData.getRemark();
}
}
return "虚拟基地";
}
/**
* 根据字典类型和字典标签获取对应键值
* @param dictType
* @return
*/
public static String getDictValue(String dictType,String label){
if(StringUtils.isBlank(label)){
return null;
}
String dictValue = DictUtils.getDictValue(dictType, label);
return dictValue;
}
}

View File

@ -0,0 +1,115 @@
package com.ruoyi.util;
import com.ruoyi.basedata.domain.Pounddata;
import com.ruoyi.basedata.service.IPounddataService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
@RestController
public class importRunnable implements Runnable{
@Autowired
private IPounddataService pounddataService;
private List<Pounddata> pounddataList;
private String operName;
public List<Pounddata> getPounddataList() {
return pounddataList;
}
public void setPounddataList(List<Pounddata> pounddataList) {
this.pounddataList = pounddataList;
}
public String getOperName() {
return operName;
}
public void setOperName(String operName) {
this.operName = operName;
}
public void removeParam(){
this.pounddataList = null;
this.operName = null;
}
@Override
public void run() {
importData();
}
private void importData(){
if(this.pounddataList!=null){
List<Pounddata> importList = this.pounddataList;
for (int i = 0; i < importList.size(); i++) {
Pounddata data = importList.get(i);
try
{
// 验证是否存在这个用户
Pounddata pounddata = new Pounddata();
System.out.println( 1);
String usrcode = data.getUsrcode();
String type = Util.getDictValue("measurement_data_type", data.getType());
if (StringUtils.isBlank(usrcode)) {
Pounddata pounddata2 = new Pounddata();
pounddata2.setRemark(""+(i+1)+"条编码为空");
pounddata2.setUsrcode(data.getUsrcode()+"+"+data.getType()+":导入失败");
pounddata2.setName(data.getName());
pounddata2.setCrtopr(operName);
pounddata2.setLstedtopr(operName);
pounddata2.setCrtdt(new Date());
pounddata2.setLstedtdt(new Date());
pounddataService.insertPounddata(pounddata2);
continue;
}else if(StringUtils.isBlank(type)){
Pounddata pounddata2 = new Pounddata();
pounddata2.setRemark(""+(i+1)+"条资料类型为空或资料类型在系统内不存在");
pounddata2.setUsrcode(data.getUsrcode()+"+"+data.getType()+":导入失败");
pounddata2.setName(data.getName());
pounddata2.setCrtopr(operName);
pounddata2.setLstedtopr(operName);
pounddata2.setCrtdt(new Date());
pounddata2.setLstedtdt(new Date());
pounddataService.insertPounddata(pounddata2);
continue;
}
pounddata.setUsrcode(usrcode);
pounddata.setType(type);
List<Pounddata> pounddata1 = pounddataService.selectPounddataList(pounddata);
if (pounddata1==null||pounddata1.size()==0)
{
data.setType(type);
data.setCrtopr(operName);
data.setLstedtopr(operName);
data.setCrtdt(new Date());
data.setLstedtdt(new Date());
pounddataService.insertPounddata(data);
}
else
{
Pounddata pounddata2 = new Pounddata();
pounddata2.setRemark("已存在编码+资料类型为:"+data.getUsrcode()+data.getType()+"的数据");
pounddata2.setUsrcode(data.getUsrcode()+"+"+data.getType()+":导入失败");
pounddata2.setName(data.getName());
pounddata2.setCrtopr(operName);
pounddata2.setLstedtopr(operName);
pounddata2.setCrtdt(new Date());
pounddata2.setLstedtdt(new Date());
pounddataService.insertPounddata(pounddata2);
}
}
catch (Exception e)
{
}
}
}
}
}

View File

@ -33,6 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="poundid != null "> and poundid = #{poundid}</if>
<if test="helpcode != null and helpcode != ''"> and helpcode like concat('%', #{helpcode}, '%')</if>
</where>
order by crtdt desc
</select>
<select id="selectPounddataById" parameterType="String" resultMap="PounddataResult">

View File

@ -53,25 +53,20 @@ public class BaseEntity implements Serializable
private Map<String, Object> params;
/** 是否启用 */
@Excel(name = "是否启用")
private String isinuse;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date crtdt;
/** 创建人 */
@Excel(name = "创建人")
private String crtopr;
/** 最后修改日期 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "最后修改日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date lstedtdt;
/** 最后修改人 */
@Excel(name = "最后修改人")
private String lstedtopr;

View File

@ -92,6 +92,10 @@
v-hasPermi="['measurement/basedata:pounddata:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain size="mini" @click="importExcelsettlementrateentry">导入数据
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -188,11 +192,31 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPounddata, getPounddata, delPounddata, addPounddata, updatePounddata } from "@/api/measurement/basedata/pounddata"
import {getToken} from "@/utils/auth";
export default {
name: "Pounddata",
@ -217,6 +241,21 @@ export default {
title: "",
//
open: false,
//excel
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/measurement/basedata/pounddata/importData"
},
//
queryParams: {
pageNum: 1,
@ -347,6 +386,31 @@ export default {
this.download('measurement/basedata/pounddata/export', {
...this.queryParams
}, `pounddata_${new Date().getTime()}.xlsx`)
},
//
importTemplate() {
this.download('measurement/basedata/pounddata/importTemplate', {}, `导入模板_${new Date().getTime()}.xlsx`)
},
//
importExcelsettlementrateentry() {
this.upload.title = "导入数据"
this.upload.open = true
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false
this.upload.isUploading = false
this.$refs.upload.clearFiles()
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
this.getList()
},
//
submitFileForm() {
this.$refs.upload.submit()
}
}
}