工器具管理(基于若依)

news2024/11/26 23:45:47

文章目录

  • 前言
  • 一、工器具管理
    • 项目总览
  • 二、入库功能
    • 1. 前端
      • 1.1 界面展示
      • 1.2 具体操作实现
      • 1.3 js文件
    • 2. 后端
      • 2.1 工器具信息回显
      • 2.2 工器具入库
  • 三、领用功能
    • 1. 前端
      • 1.1 界面展示
      • 1.2 具体实现操作
      • 1.3 js文件
    • 2. 后端
      • 2.1 工器具信息回显
      • 2.2 工器具领用
  • 遇到的问题
    • 1. 同一页面展示不同弹框
    • 2. 动态获取数据下拉框信息回显
    • 3. 循环依赖
    • 4. 数据库查询结果为空


前言

增删改查相关操作代码由若依框架生成,这部分主要介绍入库和领用功能,可能业务逻辑没那么清晰,主要是实现相关代码,以及在学习的过程中,自己遇到一些问题。(仅个人学习记录)


一、工器具管理

项目总览

在这部分,目前主要编写了包括工器具信息展示,以及工器具的入库和领用功能。入库和领用两个按钮是对原来的修改和删除按钮进行了修改,完成入库和领用操作后,入库记录和领用记录部分也会发生变化(其实就是涉及到对入库表和领用表插入)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、入库功能

在这里插入图片描述

1. 前端

1.1 界面展示

1.1.1 首先是要定义“入库”这个按钮,代码如下:

 <el-button
            size="mini"
            type="text"
            @click="handleStorage(scope.row)" 
            v-hasPermi="['toolManagement:tool:storage']"  <!--这个是访问权限,要和后端匹配-->
          >入库</el-button>

1.1.2 点击按钮后,弹窗按钮展示。(因为这个页面有几个不同的弹窗–新增和修改、入库以及领用,所以还需要对参数:visible.sync="libraryDialogVisible进行设置)

<!-- 入库记录对话框 -->
     <el-dialog :title="title" :visible.sync="libraryDialogVisible" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="工器型号" prop="toolModel">
          <el-input v-model="form.toolModel" placeholder="请输入工器型号" />
        </el-form-item>
        <el-form-item label="工器类型" prop="toolType">
          <el-input v-model="form.toolType" placeholder="请输入工器类型" />
        </el-form-item>
        <el-form-item label="工器名称" prop="toolName">
          <el-input v-model="form.toolName" placeholder="请输入工器名称" />
        </el-form-item>
        <el-form-item label="入库数" prop="stockInQuantity">
          <el-input-number :min="0" v-model="form.stockInQuantity" placeholder="请输入入库数" />
        </el-form-item>
        <el-form-item label="入库时间" prop="warehousingTime">
          <el-date-picker clearable
            v-model="form.warehousingTime"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="请选择入库时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="备注信息" prop="remarkInformation">
          <el-input v-model="form.remarkInformation" placeholder="请输入备注信息" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm2">确 定</el-button>
        <el-button @click="cancel2">取 消</el-button>
      </div>
    </el-dialog>

1.2 具体操作实现

实现入库按钮操作handleStorage,并且导入js文件中的getRecord方法,在方法中提供访问url以及访问方式,在后端实现点击“入库”按钮后的弹窗中信息回显
实现入库提交按钮submitForm2,并且导入storage方法,在后端实现插入入库信息到入库记录表中
在前面两个方法中都需要把libraryDialogVisible设置为true,代表显示弹框
点击取消按钮,需要把libraryDialogVisible设置为false

data() {
    return {
      ...
      // 是否显示弹出层
      open: false,     //用于修改和新增的弹框
      libraryDialogVisible:false,   //用于入库弹框
      requisitionVisible:false,    //用于领用弹框
      ....
}
//入库按钮操作
 handleStorage(row) {
      this.reset();
      this.libraryDialogVisible=true;
      const toolManagementId = row.toolManagementId || this.ids
      getRecord(toolManagementId).then(response => {
        this.form = response.data;
        this.libraryDialogVisible = true;
        this.title = "入库";
      });
    }
 /** 入库提交按钮 */
    submitForm2() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          storage(this.form).then(response => {
            this.$modal.msgSuccess("入库成功");
            this.libraryDialogVisible = false;
            this.getList();
          });
        }
      });
    },
// 取消按钮
  cancel2() {
    this.libraryDialogVisible = false;
    this.reset();
  },

1.3 js文件

在对应的js文件中写个getRecord方法和storage方法

//获取工器具记录信息
export function getRecord(toolManagementId) {
  return request({
    url: '/toolManagement/tool/storage/' + toolManagementId,
    method: 'get'
  })
}

//工器具入库
export function storage(data) {
  return request({
    url: '/toolManagement/tool/storage',
    method: 'put',
    data: data
  })
}

2. 后端

2.1 工器具信息回显

2.1.1 Controller层编写getStorageInfo方法实现信息回显,根据工器具id查询相关工器具信息,设置访问方式GetMapping,url以及访问权限一定要和前端的一样。

/**
 * 获取工器具信息(入库)
 */
@PreAuthorize("@ss.hasPermi('toolManagement:tool:queryId')")
@GetMapping(value = "/storage/{toolManagementId}")
public AjaxResult getStorageInfo(@PathVariable("toolManagementId") Long toolManagementId)
{
    StorageVO storageVO = sysToolService.getStorageInfo(toolManagementId);
    return success(storageVO);
}

2.2.2 具体的业务逻辑service-serviceImpl-mapper-mapper.xml,这部分用于信息回显,

  /**service
     * 根据id获得入库信息
      * @param toolManagementId
     * @return
     */
    StorageVO getStorageInfo(Long toolManagementId);

//serviceImp:
 @Override
    public StorageVO getStorageInfo(Long toolManagementId) {
        return sysToolMapper.getStorageInfo(toolManagementId);
    }
    
//mapper
StorageVO getStorageInfo(Long id);
 <select id="getStorageInfo" parameterType="Long" resultMap="BaseResultMap">
        select tool_model,tool_type,tool_name  from sys_tool where tool_management_id=#{id}
 </select>

2.2 工器具入库

2.2.1 前端填写好信息,点击提交按钮会有入库记录。在Controller层编写方法,StorageDTO根据前端页面展示的信息写的一个实体类

 /**
     * 工器具入库
     * @param storageDTO
     * @return
     */
    @PreAuthorize("@ss.hasPermi('toolManagement:tool:storage')")
    @Log(title = "工器具入库", businessType = BusinessType.UPDATE)
    @PutMapping("/storage")
    public AjaxResult storage(@RequestBody StorageDTO storageDTO) {
        sysToolService.storage(storageDTO);
        return success();
    }

2.2.2 具体的业务逻辑service-serviceImpl-mapper-mapper.xml,主要业务逻辑包括工器具库存的增加,工器具入库表记录插入数据

/**service
     * 工器具入库以及修改库存信息
     * @param storageDTO
     */
    void storage(StorageDTO storageDTO);

//serviceImpl
//在这里涉及到两张表的操作要加入事务处理
 @Override
 @Transactional
 public void storage(StorageDTO storageDTO) {
     int num = storageDTO.getStockInQuantity();
     String toolModel = storageDTO.getToolModel();
     //查询工器具已有库存数
     int stock = sysToolMapper.selectSysToolNumById(toolModel);
     stock = num+stock;
     //根据工器具型号工器具表sys_tool修改库存
     sysToolMapper.updateSysToolByMode(stock,toolModel);
     //在sys_warehousing_record入库表中添加记录
     WarehousingRecord warehousingRecord = new WarehousingRecord();
     BeanUtils.copyProperties(storageDTO,warehousingRecord);
     warehousingRecord.setStockInQuantity(Long.valueOf(num));
     warehousingRecord.setRecommend(0L);
     warehousingRecordService.insertWarehousingRecord(warehousingRecord);
 }

mapper文件

 /**
     * 查询表中库存信息
     * @param toolModel
     * @return
     */
    @Select("select stock from sys_tool where tool_model=#{toolModel}")
    int selectSysToolNumById(String toolModel);
  
   /**
     * 根据工器具类型修改库存数量
     * @param num
     * @param toolModel
     */
    @Update("update sys_tool set stock=#{num} where tool_model like #{toolModel}")
    void updateSysToolByMode(@Param("num") int num, @Param("toolModel") String toolModel);
    /**
     * 新增入库记录(若依代码生成)
     * @param warehousingRecord 入库记录
     */
    public int insertWarehousingRecord(WarehousingRecord warehousingRecord);

三、领用功能

这部分和入库不同的点在于,领用人是一个下拉框,要展示的是一个列表信息,而且领用人的信息存于用户表中,所以要怎么在后端定义一个实体类用于返回给前端数据是我之前不知道怎么搞的,而且这个下拉框怎么去遍历列表,需要哪些信息也是要考虑的。在实现这个功能的时候,我还出现了循环依赖问题(这个最后给出解决办法)
在这里插入图片描述

1. 前端

1.1 界面展示

1.1.1 定义“领用”这个按钮,代码如下:

 <el-button
            size="mini"
            type="text"
            @click="handlerequisition(scope.row)"
            v-hasPermi="['toolManagement:tool:requisition']"
          >领用</el-button>

1.1.2 点击按钮后,弹窗按钮展示。(重新设置了:visible.sync="requisitionVisible,由于定义了一个“领用人”下拉框信息回显,在前端代码做了修改,后端响应给前端的数据也与之对应)

<!-- 领用记录对话框 -->
   <el-dialog :title="title" :visible.sync="requisitionVisible" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="工器型号" prop="toolModel">
          <el-input v-model="form.toolModel" placeholder="请输入工器型号" />
        </el-form-item>
        <el-form-item label="工器类型" prop="toolType">
          <el-input v-model="form.toolType" placeholder="请输入工器类型" />
        </el-form-item>
        <el-form-item label="工器名称" prop="toolName">
          <el-input v-model="form.toolName" placeholder="请输入工器名称" />
        </el-form-item>
        <el-form-item label="数量" prop="number">
          <el-input-number :min="0" v-model="form.number" placeholder="请输入数量" />
        </el-form-item>
        <el-form-item label="领用时间" prop="collectionTime">
          <el-date-picker clearable
            v-model="form.collectionTime"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="请选择领用时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="领用人" prop="receiver">
          <el-select v-model="form.receiver" placeholder="请选择领用人" >
            <el-option
            v-for="item in form.users"  <!--这个users对应的后端返回的RequisitionVO中List<UserDTO> users -->
            :key="item.userId"    <!--users.userId和users.userName是从用户表中查到的信息,用于信息回显 -->
            :label="item.userName"
            :value="item.userName"></el-option>
            </el-select>
        </el-form-item>
        <el-form-item label="备注信息" prop="remarkInformation">
          <el-input v-model="form.remarkInformation" placeholder="请输入备注信息" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm3">确 定</el-button>
        <el-button @click="cancel3">取 消</el-button>
      </div>
    </el-dialog>

1.2 具体实现操作

实现领用按钮操作handlerequisition,并且导入js文件中的getrequisitionInfo方法,实现点击“领用”按钮后的弹窗中信息回显。
实现领用提交按钮操作,主要是把填入的信息插入到领用表中,在前端定义requisition方法提供接口。
领用取消按钮要把requisitionVisible置为false。

/** 领用按钮操作 */
    handlerequisition(row) {
      this.reset();
      this.requisitionVisible=true;
      const toolManagementId = row.toolManagementId || this.ids
      getrequisitionInfo(toolManagementId).then(response => {
        this.form = response.data;
        this.requisitionVisible = true;   //开启弹窗
        this.title = "领用";
      });
    },
 /** 领用提交按钮 */
     submitForm3() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          requisition(this.form).then(response => {
            this.$modal.msgSuccess("领用成功");
            this.requisitionVisible = false;  //点击提交按钮后关闭弹窗
            this.getList();
          });
        }
      });
    },
    // 领用取消按钮
    cancel3() {
      this.requisitionVisible = false;   //点击取消按钮关闭弹窗
      this.reset();
    },

1.3 js文件

在对应的js文件中写个getrequisitionInfo方法和requisition方法

//获取工器具领用信息
export function getrequisitionInfo(toolManagementId) {
  return request({
    url: '/toolManagement/tool/requisition/' + toolManagementId,
    method: 'get'
  })
}
//工器具领用
export function requisition(data) {
  return request({
    url: '/toolManagement/tool/requisition',
    method: 'put',
    data: data
  })
}

2. 后端

2.1 工器具信息回显

2.1.1 Controller层编写getrequisitionInfo方法实现信息回显,根据工器具id查询相关工器具信息,此外还要从用户表中查询所有用户信息,用于领用人下拉框列表的信息回显。

  /**
     * 获取工器具信息(领用)
     */
    @PreAuthorize("@ss.hasPermi('toolManagement:tool:queryrequisition')")
    @GetMapping(value = "/requisition/{toolManagementId}")
    public AjaxResult getrequisitionInfo(@PathVariable("toolManagementId") Long toolManagementId)
    {
        RequisitionVO requisitionVO = sysToolService.getrequisitionInfo(toolManagementId);
        return success(requisitionVO);
    }

2.2.2 具体的业务逻辑service-serviceImpl-mapper-mapper.xml,这部分用于信息回显,

    //获取领用信息
    RequisitionVO getrequisitionInfo(Long toolManagementId);
//serviceImp:
    /**
     * 领用信息回显
     * @param toolManagementId
     * @return
     */
    @Override
    public RequisitionVO getrequisitionInfo(Long toolManagementId) {
//查询所有用户信息,定义了一个UserDTO用于保存返回给前端信息,包括用户id(主要是在前端遍历的时候使用)和用户账号    
        List<UserDTO> userDTOS = userService.selectUserName(); 
//获取工器具的详细信息,这和入库中信息回显是一样的 
        StorageVO storageInfo = sysToolMapper.getStorageInfo(toolManagementId);
//RequisitionVO用于返回给前端所需的数据
        RequisitionVO requisitionVO = new RequisitionVO();
        BeanUtils.copyProperties(storageInfo,requisitionVO);
        requisitionVO.setUsers(userDTOS);
        return requisitionVO;
    }  
//mapper
 /**
     * 查询所有用户名称
     * @return
     */
    List<UserDTO> selectUserName();
	<select id="selectUserName" resultMap="UserDTOResult">
		select user_id, user_name from sys_user
	</select>

2.2 工器具领用

1、 前端填写好信息,点击提交按钮会有入库记录。在Controller层编写requisition方法,RequisitionDTO根据前端页面展示的信息写的一个实体类

public class RequisitionDTO {
    /** 工器型号 */
    private String toolModel;
    /** 工器类型 */
    private String toolType;
    /** 工器名称 */
    private String toolName;
    /** 数量 */
    private Integer number;
    /** 领用时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date collectionTime;
    /** 领用人 */
    private String receiver;
    /** 备注信息 */
    private String remarkInformation;
}
    /**
     * 工器具领用
     * @param requisitionDTO
     * @return
     */
    @PreAuthorize("@ss.hasPermi('toolManagement:tool:requisition')")
    @Log(title = "工器具领用", businessType = BusinessType.UPDATE)
    @PutMapping("/requisition")
    public AjaxResult requisition(@RequestBody RequisitionDTO requisitionDTO) {
        //工器具领用
        sysToolService.requisition(requisitionDTO);
        return success();
    }

2、具体的业务逻辑service-serviceImpl-mapper-mapper.xml,主要业务逻辑包括工器具库存的减少,工器具领用表记录插入数据

    @Transactional
    @Override
    public void requisition(RequisitionDTO requisitionDTO) {
        int num = requisitionDTO.getNumber();
        String toolModel = requisitionDTO.getToolModel();
        //查询工器具已有库存数
        int stock = sysToolMapper.selectSysToolNumById(toolModel);
        //判断库存数是否不足
        if(stock<=0){
            throw new RuntimeException("库存不足");
        }
        stock = stock-num;
        //根据工器具型号工器具表sys_tool修改库存
        sysToolMapper.updateSysToolByMode(stock,toolModel);
        //在sys_requisition_record领用表中添加记录
        RequisitionRecord requisitionRecord = new RequisitionRecord();
        BeanUtils.copyProperties(requisitionDTO,requisitionRecord);
        requisitionRecord.setNumber(Long.valueOf(num));
        requisitionRecord.setRecommend(0L);
        //若依框架代码生成
        requisitionRecordService.insertRequisitionRecord(requisitionRecord);
    }

遇到的问题

1. 同一页面展示不同弹框

因为没有接触过前端,所以一开始不知道怎么处理,这里简单的描述一下吧,前面的前端代码有展示。
1、首先就是定义不同的弹框,<el-dialog …/>,设置不同的:visible.sync=xxx
2、在export default {data(){xxx:false }}定义好数据
3、在具体的操作中设置,比如我点击入库按钮有弹窗,那么就要把xxx设置为true,点击取消按钮,弹框消失就要把它设置为false。

2. 动态获取数据下拉框信息回显

从后端数据库获取的信息全部用下拉框展示。在这部分,我需要回显的信息设置两个表的操作,所以我定义了一个VO实体类,具体如下:

public class RequisitionVO {
    //工器型号
    private String toolModel;
    /** 工器类型 */
    private String toolType;
    /** 工器名称 */
    private String toolName;
    //领用人
    //这部分是用于下拉框信息回显的数据,用的是一个列表
    private List<UserDTO> users;
}

//用户信息
public class UserDTO {
    //用户id
    private Long userId;
    //用户账号
    private String userName;
}

虽然我只需要下拉框展示用户账号,但是在这里还需要有个id与之对应,用于前端代码v-for。

 <el-form-item label="领用人" prop="receiver">
          <el-select v-model="form.receiver" placeholder="请选择领用人" >
            <el-option
            v-for="item in form.users"
            :key="item.userId"
            :label="item.userName"
            :value="item.userName">
            </el-option>
            </el-select>
        </el-form-item>

3. 循环依赖

我用的若依系统,直接用的系统原有的用户表,因为领用需要获取领用人信息,刚开始操作的时候就直接在ruo-system中的文件夹中使用了,而我之前在自己的模块中导入了ruo-system依赖,又在ruo-system导入了ruoyi-toolManagement中的类,结果造成了循环依赖的问题,具体解决办法参考以下链接https://blog.csdn.net/m0_53979927/article/details/132954989
在这里插入图片描述

4. 数据库查询结果为空

Mapper接口方法传两个参数要加Param注解,以及返回多个结果要用resultMap。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最新版守约者二级域名分发系统源码,提供全面的二级域名管理服务

主要功能 二级域名管理&#xff1a;我们的系统提供全面的二级域名管理服务&#xff0c;让您轻松管理和配置二级域名。 下 载 地 址 &#xff1a; runruncode.com/php/19756.html 域名分发&#xff1a;利用我们先进的域名分发技术&#xff0c;您可以自动化地分配和管理域名&…

【教程向】从零开始创建浏览器插件(二)深入理解 Chrome 扩展的 manifest.json 配置文件

第二步&#xff1a;深入理解 Chrome 扩展的 manifest.json 配置文件 上一次我们已经着手完成了一个自己的浏览器插件&#xff0c;链接在这里&#xff1a;我是链接 在本篇博客中&#xff0c;我们将更详细地探讨 Chrome 扩展中的 manifest.json 文件。这个文件是每个浏览器扩展…

keep健身小程序源码搭建/部署/上线/运营/售后/更新

基于FastAdminThinkPHPUniApp&#xff08;目前仅支持微信小程序和公众号&#xff09;开发的健身相关行业微信小程序&#xff0c;程序适用于健身房、瑜伽馆、游泳馆、篮球馆等健身培训场所。平台拥有课程售卖、课程预约、多门店管理、私教预约、教练端、会员卡办理、在线商城、分…

超分辨率专题 | 3 种方法、4 个教程、10 个数据集,一文 Get 核心知识点

2010 年 12 月&#xff0c;清华大学电子工程系教授苏光大接到一通不寻常的电话&#xff0c;内蒙古自治区准格尔刑警队的警员拿着一张模糊不清的犯罪嫌疑人人脸图像&#xff0c;向苏光大寻求帮助。 「这张图像是由路边的监控摄像头拍摄的&#xff0c;像素非常低&#xff0c;肉眼…

一文搞懂什么是外贸企业邮箱?

一文搞懂什么是外贸企业邮箱&#xff1f;外贸企业邮箱&#xff0c;也就是外贸行业使用的企业邮箱系统&#xff0c;一般需要具备海外抵达率高、安全稳定等特点&#xff0c;通过外贸企业邮箱&#xff0c;企业可以和国内国外的客户或者同事进行业务的沟通交流。 一、什么是外贸企…

接口自动化框架篇:使用python连接数据库 - PySQL介绍!

PySQL介绍&#xff1a;使用Python连接数据库的接口自动化框架 在接口自动化测试中&#xff0c;经常需要使用数据库来操作测试数据&#xff0c;验证接口返回的数据是否正确。Python是一种功能强大的编程语言&#xff0c;可以轻松地连接数据库&#xff0c;并进行各种数据库操作。…

林更新博士之路星途璀璨再启航

林更新&#xff1a;博士之路&#xff0c;星途璀璨再启航在这个充满机遇与挑战的时代&#xff0c;有一位演员以其出色的演技和不懈的努力&#xff0c;赢得了无数观众的喜爱。他&#xff0c;就是林更新。今日&#xff0c;一条消息如重磅炸弹般在娱乐圈炸开&#xff0c;让无数粉丝…

将AI融入项目开发工作中去吧

目录 1.提高编写开发日报的效率 2.提高编写代码注释的效率 3.提高代码重构的效率 4.编写测试用例及测试报告 5. 协助进行代码走查与工作量分析 在AI元年后&#xff0c;作为一名程序员&#xff0c;相信各位友友已经深切地感受到了它带来的变革。作为一个从小白到资深码农的…

【c++线程】condition_variable的简单使用

尝试用两个线程交替打印1-100的数字&#xff0c;要求一个线程打印奇数&#xff0c;另一个线程打印偶数&#xff0c;并且打印数字从小到大依次递增。 #include <iostream> using namespace std; #include <thread> #include <mutex> #include <condition_…

海外邮件群发工具的使用方法?有哪些限制?

海外邮件群发工具怎么选择&#xff1f;使用邮件群发工具的优势&#xff1f; 海外邮件群发工具成为了企业开展海外推广、联系客户、推广产品和服务的重要工具。但如何有效地使用这一工具&#xff0c;成为了众多营销人员关注的问题。接下来&#xff0c;AokSend将详细探讨海外邮件…

文件批量重命名技巧:文本内容即文件名,打造个性化文件命名新体验

在日常工作和学习中&#xff0c;我们经常需要处理大量的文件&#xff0c;而给这些文件命名则成为了一个既繁琐又重要的任务。传统的文件命名方式&#xff0c;如使用数字、字母或简单的描述性词汇&#xff0c;往往难以体现出文件的实际内容和特点。那么&#xff0c;有没有一种方…

搭建一个vue3+vant4+vite4+pinia 的移动端h5模板

效果图 项目的创建和组件库的安装 项目创建 pnpm create vite vue3-vant4-vite-pinia-pro-h5注意&#xff1a; node版本控制在 18&#xff0c; 可以通过nvm来管理本地的node版本&#xff0c;具体可以看这篇文章 nvm的简单使用 vant-ui库的安装【这里安装的是 ^4.6.0 版本的】…

云南区块链商户平台优化开发

背景 云南区块链商户平台是全省统一区块链服务平台。依托于云南省发改委、阿里云及蚂蚁区块链的国内首个省级区块链平台——云南省区块链平台同步上线&#xff0c;助力数字云南整体升级。 网页版并不适合妈妈那辈人使用&#xff0c;没有记忆功能&#xff0c;于是打算自己开发…

不想让Win系统更新,那就让它暂停一万年

按照下图所示进行操作 winR 输入 regedit&#xff0c;进入注册表编辑器 随后依次点击 HKEY_LOCAL_MACHINE ⬇ SOFTWARE ⬇ Microsoft ⬇ WindowsUpdate ⬇ UX ⬇ Settings 最后在右侧空白处 文件类型 新建DWORD&#xff08;32位&#xff09;值&#xff08;D&#xff09; 命名…

sharding-jdbc如何实现分页查询

写在文章开头 在之前的文章中笔者简单的介绍了sharding-jdbc的使用&#xff0c;而本文从日常使用的角度出发来剖析一下sharding-jdbc底层是如何实现分页查询的。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff0c;是 CSDN的博客…

私域流量优化:如何利用 AIPL 模型洞察客户生命周期价值

在当今这个数字化时代&#xff0c;商业战场的硝烟从未如此浓烈。随着互联网红利的逐渐消退&#xff0c;公域流量的成本水涨船高&#xff0c;企业间对于有限用户资源的争夺已进入白热化阶段。每一次点击、每一个曝光背后&#xff0c;都是企业不得不承担的高昂代价。在此背景下&a…

1725 ssm资产管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm资产管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

本安防爆手机在电力行业中的应用

在电力行业这一充满挑战与风险的领域中&#xff0c;安全始终是最为首要的考量。电力巡检、维修等作业往往涉及易燃、易爆环境&#xff0c;这就要求工作人员配备能够在极端条件下保障通讯和作业安全的专业设备。防爆手机应运而生&#xff0c;以其独特的设计和卓越的性能&#xf…

Kafka 执行命令超时异常: Timed out waiting for a node assignment

Kafka 执行命令超时异常&#xff1a; Timed out waiting for a node assignment 问题描述&#xff1a; 搭建了一个kafka集群环境&#xff0c;在使用命令行查看已有topic时&#xff0c;报错如下&#xff1a; [rootlocalhost bin]# kafka-topics.sh --list --bootstrap-server…

es关闭开启除了系统索引以外的所有索引

1、es 开启 “删除或关闭时索引名称支持通配符” 功能 2、kibanan平台执行 POST *,-.*/_close 关闭索引POST *,-.*/_open 打开索引3、其他命令 DELETE index_* // 按通配符删除以index_开头的索引 DELETE _all // 删除全部索引 DELETE *,-.* 删除全…