平定住房建设局网站,四川城乡建设部网站首页,华为邮箱注册,注册个网站怎么注册300rmb掏了个javavue2的小系统#xff0c;学习代码#xff0c;调整下申请流程。
原有的入库流程是#xff0c;库管#xff08;admin#xff09;提出采购申请给采购员#xff08;caigou#xff09;#xff0c;采购员采购入库时点击入库完成采购入库流程。 想弄清后端代…300rmb掏了个javavue2的小系统学习代码调整下申请流程。
原有的入库流程是库管admin提出采购申请给采购员caigou采购员采购入库时点击入库完成采购入库流程。 想弄清后端代码怎样流转申请需要一点点找。
从vue的采购申请页面找到请求的后端api地址 采购申请页面vue路由是
/admin/rurchase
对应的组件是
admin/rurchase/Rurchase 对应的vue代码地址是
src\views\admin\rurchase\RurchaseAdd.vue templatea-drawertitle新增采购申请:maskClosablefalseplacementright:closablefalse:visibleshow:width1200closeonClosestyleheight: calc(100% - 55px);overflow: auto;padding-bottom: 53px;a-form :formform layoutverticala-row :gutter20a-col :span12a-form-item label申请人 v-bindformItemLayouta-input v-decorator[applicant,{ rules: [{ required: true, message: 请输入申请人! }] }]//a-form-item/a-cola-col :span24a-form-item label备注消息 v-bindformItemLayouta-textarea :rows4 v-decorator[content,{ rules: [{ required: true, message: 请输入备注消息! }] }]//a-form-item/a-cola-col :span24a-table :columnscolumns :data-sourcedataListtemplate slotnameShow slot-scopetext, recorda-input v-modelrecord.name/a-input/templatetemplate slottypeShow slot-scopetext, recorda-input v-modelrecord.type/a-input/templatetemplate slottypeIdShow slot-scopetext, recorda-select v-modelrecord.typeId stylewidth: 100%a-select-option v-for(item, index) in consumableType :valueitem.id :keyindex{{ item.name }}/a-select-option/a-select/templatetemplate slotunitShow slot-scopetext, recorda-input v-modelrecord.unit/a-input/templatetemplate slotamountShow slot-scopetext, recorda-input-number v-modelrecord.amount :min1 :step1//templatetemplate slotpriceShow slot-scopetext, recorda-input-number v-modelrecord.price :min1//template/a-tablea-button clickdataAdd typeprimary ghost sizelarge stylemargin-top: 10px;width: 100%新增物品/a-button/a-col/a-row/a-formdiv classdrawer-bootom-buttona-popconfirm title确定放弃编辑 confirmonClose okText确定 cancelText取消a-button stylemargin-right: .8rem取消/a-button/a-popconfirma-button clickhandleSubmit typeprimary :loadingloading提交/a-button/div/a-drawer
/templatescript
import {mapState} from vuex
const formItemLayout {labelCol: { span: 24 },wrapperCol: { span: 24 }
}
export default {name: RurchaseAdd,props: {rurchaseAddVisiable: {default: false}},computed: {...mapState({currentUser: state state.account.user}),show: {get: function () {return this.rurchaseAddVisiable},set: function () {}},columns () {return [{title: 物品名称,dataIndex: name,scopedSlots: {customRender: nameShow}}, {title: 型号,dataIndex: type,scopedSlots: {customRender: typeShow}}, {title: 数量,dataIndex: amount,scopedSlots: {customRender: amountShow}}, {title: 所属类型,dataIndex: typeId,width: 200,scopedSlots: {customRender: typeIdShow}}, {title: 单位,dataIndex: unit,scopedSlots: {customRender: unitShow}}, {title: 单价,dataIndex: price,scopedSlots: {customRender: priceShow}}]}},data () {return {formItemLayout,form: this.$form.createForm(this),loading: false,dataList: [],consumableType: []}},mounted () {this.getConsumableType()},methods: {getConsumableType () {this.$get(/cos/consumable-type/list).then((r) {this.consumableType r.data.data})},dataAdd () {this.dataList.push({name: , type: , typeId: , unit: , amount: , price: })},reset () {this.loading falsethis.form.resetFields()},onClose () {this.reset()this.$emit(close)},handleSubmit () {if (this.dataList.length ! 0) {let price 0this.dataList.forEach(item {price item.price * item.amount})this.form.validateFields((err, values) {if (!err) {values.price pricevalues.goods JSON.stringify(this.dataList)this.loading truethis.$post(/cos/rurchase-request, {...values}).then((r) {this.reset()this.$emit(success)}).catch(() {this.loading false})}})} else {this.$message.warning(请添加记录)}}}
}
/scriptstyle scoped/style在前端代码中找到提交申请的后台api接口地址是
/cos/rurchase-request
根据后台接口地址找到对应的java controller类和方法
cc.mrbird.febs.cos.controller.RurchaseRequestController#save 这里用到了RESTfultool插件 package cc.mrbird.febs.cos.controller;import cc.mrbird.febs.common.utils.R;
import cc.mrbird.febs.cos.entity.RurchaseRequest;
import cc.mrbird.febs.cos.service.IRurchaseRequestService;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.Date;
import java.util.List;/*** author FanK*/
RestController
RequestMapping(/cos/rurchase-request)
RequiredArgsConstructor(onConstructor __(Autowired))
public class RurchaseRequestController {private final IRurchaseRequestService rurchaseRequestService;/*** 采购申请入库* param rurchaseRequest* return*/PostMapping(/rurchasePut)public R rurchasePut(RurchaseRequest rurchaseRequest) {return R.ok(rurchaseRequestService.rurchasePut(rurchaseRequest));}/*** 分页获取采购申请* param page* param rurchaseRequest* return*/GetMapping(/page)public R page(Page page, RurchaseRequest rurchaseRequest) {return R.ok(rurchaseRequestService.rurchaseRequestByPage(page, rurchaseRequest));}/*** 添加采购申请* param rurchaseRequest* return*/PostMappingpublic R save(RurchaseRequest rurchaseRequest) {rurchaseRequest.setCreateDate(DateUtil.formatDateTime(new Date()));return R.ok(rurchaseRequestService.rurchaseRequestAdd(rurchaseRequest));}/*** 修改采购申请* param rurchaseRequest* return*/PutMappingpublic R edit(RurchaseRequest rurchaseRequest) {return R.ok(rurchaseRequestService.updateById(rurchaseRequest));}/*** 删除采购申请* param ids* return*/DeleteMapping(/{ids})public R deleteByIds(PathVariable(ids) ListInteger ids) {return R.ok(rurchaseRequestService.removeByIds(ids));}}通过其调用的函数
rurchaseRequestService.rurchaseRequestAdd(rurchaseRequest)
mybatis的mapper
cc.mrbird.febs.cos.service.IRurchaseRequestService
package cc.mrbird.febs.cos.service;import cc.mrbird.febs.cos.entity.RurchaseRequest;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;import java.util.LinkedHashMap;/*** author FanK*/
public interface IRurchaseRequestService extends IServiceRurchaseRequest {// 分页获取采购申请IPageLinkedHashMapString, Object rurchaseRequestByPage(Page page, RurchaseRequest rurchaseRequest);// 添加采购申请Boolean rurchaseRequestAdd(RurchaseRequest rurchaseRequest);// 采购申请入库Boolean rurchasePut(RurchaseRequest rurchaseRequest);
}IRurchaseRequestService的实现类
cc.mrbird.febs.cos.service.impl.RurchaseRequestServiceImpl
package cc.mrbird.febs.cos.service.impl;import cc.mrbird.febs.cos.entity.GoodsBelong;
import cc.mrbird.febs.cos.entity.RurchaseRequest;
import cc.mrbird.febs.cos.dao.RurchaseRequestMapper;
import cc.mrbird.febs.cos.entity.StockInfo;
import cc.mrbird.febs.cos.entity.StockPut;
import cc.mrbird.febs.cos.service.IGoodsBelongService;
import cc.mrbird.febs.cos.service.IRurchaseRequestService;
import cc.mrbird.febs.cos.service.IStockInfoService;
import cc.mrbird.febs.cos.service.IStockPutService;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;/*** author FanK*/
Service
RequiredArgsConstructor(onConstructor __(Autowired))
public class RurchaseRequestServiceImpl extends ServiceImplRurchaseRequestMapper, RurchaseRequest implements IRurchaseRequestService {private final IGoodsBelongService goodsBelongService;private final IStockPutService stockPutService;private final IStockInfoService stockInfoService;Overridepublic IPageLinkedHashMapString, Object rurchaseRequestByPage(Page page, RurchaseRequest rurchaseRequest) {return baseMapper.rurchaseRequestByPage(page, rurchaseRequest);}Overridepublic Boolean rurchaseRequestAdd(RurchaseRequest rurchaseRequest) {rurchaseRequest.setNum(RUR-new Date().getTime());JSONArray array JSONUtil.parseArray(rurchaseRequest.getGoods());ListGoodsBelong goodsBelongList JSONUtil.toList(array, GoodsBelong.class);rurchaseRequest.setStep(0);this.save(rurchaseRequest);goodsBelongList.forEach(item - {item.setCreateDate(DateUtil.formatDateTime(new Date()));item.setNum(rurchaseRequest.getNum());});return goodsBelongService.saveBatch(goodsBelongList);}Overridepublic Boolean rurchasePut(RurchaseRequest rurchaseRequest) {JSONArray array JSONUtil.parseArray(rurchaseRequest.getGoods());ListGoodsBelong goodsBelongList JSONUtil.toList(array, GoodsBelong.class);// 添加入库单StockPut stockPut new StockPut();stockPut.setContent(rurchaseRequest.getRurchaseContent());stockPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockPut.setCustodian(rurchaseRequest.getCustodian());stockPut.setPutUser(rurchaseRequest.getPutUser());stockPut.setPrice(rurchaseRequest.getPrice());stockPut.setNum(PUT-new Date().getTime());stockPutService.save(stockPut);goodsBelongList.forEach(item - {item.setCreateDate(DateUtil.formatDateTime(new Date()));item.setNum(stockPut.getNum());// 判断库房物品是否存在StockInfo stockInfo stockInfoService.getOne(Wrappers.StockInfolambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));if (stockInfo ! null) {// 更改库房数据stockInfoService.update(Wrappers.StockInfolambdaUpdate().set(StockInfo::getAmount, stockInfo.getAmount()item.getAmount()).set(StockInfo::getPrice, stockInfo.getPrice()).eq(StockInfo::getName, stockInfo.getName()));} else {// 重新添加库房数据StockInfo stock new StockInfo();stock.setName(item.getName());stock.setAmount(item.getAmount());stock.setCreateDate(DateUtil.formatDateTime(new Date()));stock.setType(item.getType());stock.setTypeId(item.getTypeId());stock.setUnit(item.getUnit());stock.setPrice(item.getPrice());stock.setIsIn(0);stockInfo stock;stockInfoService.save(stock);}// 添加入库记录StockInfo stockInfoPut new StockInfo();stockInfoPut.setParentId(stockInfo.getId());stockInfoPut.setName(item.getName());stockInfoPut.setAmount(item.getAmount());stockInfoPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockInfoPut.setType(item.getType());stockInfoPut.setTypeId(item.getTypeId());stockInfoPut.setUnit(item.getUnit());stockInfoPut.setPrice(item.getPrice());stockInfoPut.setIsIn(1);stockInfoService.save(stockInfoPut);// 添加所属信息GoodsBelong goodsBelong new GoodsBelong();goodsBelong.setNum(stockPut.getNum());goodsBelong.setCreateDate(DateUtil.formatDateTime(new Date()));goodsBelong.setAmount(item.getAmount());goodsBelong.setName(item.getName());goodsBelong.setPrice(item.getPrice());goodsBelong.setType(item.getType());goodsBelong.setTypeId(item.getTypeId());goodsBelong.setUnit(item.getUnit());goodsBelongService.save(goodsBelong);});// 修改状态this.update(Wrappers.RurchaseRequestlambdaUpdate().set(RurchaseRequest::getStep, 1).eq(RurchaseRequest::getId, rurchaseRequest.getId()));return true;}
}从RurchaseRequestServiceImpl#rurchaseRequestAdd方法中找到两个操作数据库的关键函数
this.save(rurchaseRequest);
goodsBelongService.saveBatch(goodsBelongList); 这两个方法都是继承自mybatisplus的操作数据库的公共方法可以在类的定义中找到对应的java实体类
public class RurchaseRequestServiceImpl extends ServiceImplRurchaseRequestMapper, RurchaseRequest implements IRurchaseRequestService
public interface IGoodsBelongService extends IServiceGoodsBelong
关于mybatisplus的使用方法参考
Mybatis-plus之IService的使用_iservice mybatisplus-CSDN博客
https://www.cnblogs.com/kaibindirver/p/16086336.html
不明白为什么extends ServiceImplRurchaseRequestMapper, RurchaseRequest后还要implements IRurchaseRequestService需要看源码
找到java实体类
cc.mrbird.febs.cos.entity.GoodsBelong
cc.mrbird.febs.cos.entity.RurchaseRequest package cc.mrbird.febs.cos.entity;import java.io.Serializable;
import java.math.BigDecimal;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** 物品所属** author FanK*/
Data
EqualsAndHashCode(callSuper false)
Accessors(chain true)
public class GoodsBelong implements Serializable {private static final long serialVersionUID 1L;TableId(value ID, type IdType.AUTO)private Integer id;/*** 物品名称*/private String name;/*** 型号*/private String type;/*** 单位*/private String unit;/*** 数量*/private Integer amount;/*** 耗材类型*/private Integer typeId;/*** 申请/入库单号*/private String num;/*** 单价*/private BigDecimal price;/*** 日期*/private String createDate;}package cc.mrbird.febs.cos.entity;import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serializable;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;/*** 采购申请** author FanK*/
Data
EqualsAndHashCode(callSuper false)
Accessors(chain true)
public class RurchaseRequest implements Serializable {private static final long serialVersionUID 1L;TableId(value ID, type IdType.AUTO)private Integer id;/*** 采购申请单号*/private String num;/*** 采购说明*/private String content;/*** 预计金额*/private BigDecimal price;/*** 采购流程 0是正在采购 1是入库完成*/private Integer process;/*** 当前流程*/private Integer step;/*** 申请人*/private String applicant;/*** 创建时间*/private String createDate;TableField(exist false)private String goods;TableField(exist false)private String custodian;TableField(exist false)private String putUser;TableField(exist false)private String rurchaseContent;}从mybatisplus的表名对应关系可以找到数据库的两张表
goods_belong
名类型长度小数点注释idint主键namevarchar200物品名称typevarchar200型号unitvarchar30单位amountint数量type_idint耗材类型numvarchar200申请/入库单号pricedecimal102单价create_datedatetime日期
rurchase_request
名类型长度小数点注释idint主键numvarchar200采购申请单号contentvarchar300采购说明pricedecimal102预计金额processtinyint采购流程 0是正在采购 1是入库完成steptinyint当前流程applicantvarchar200申请人create_datedatetime创建时间 库管admin新增一个采购申请会在rurchase_request增加一条数据对应这个申请同时会在goods_belong中新增若干条数据对应申请表中的若干项物资
申请记录 ps其中step字段的值表示当前流程0表示等待采购1表示入库完成
申请的物品清单 在采购员账号caigou中可以办理采购入库 当入库后库存就会增加对应的库存表会变化涉及到多张表
stock_info
stock_put
goods_belong
rurchase_request cc.mrbird.febs.cos.service.impl.RurchaseRequestServiceImpl#rurchasePut Overridepublic Boolean rurchasePut(RurchaseRequest rurchaseRequest) {JSONArray array JSONUtil.parseArray(rurchaseRequest.getGoods());ListGoodsBelong goodsBelongList JSONUtil.toList(array, GoodsBelong.class);// 添加入库单StockPut stockPut new StockPut();stockPut.setContent(rurchaseRequest.getRurchaseContent());stockPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockPut.setCustodian(rurchaseRequest.getCustodian());stockPut.setPutUser(rurchaseRequest.getPutUser());stockPut.setPrice(rurchaseRequest.getPrice());stockPut.setNum(PUT-new Date().getTime());stockPutService.save(stockPut);goodsBelongList.forEach(item - {item.setCreateDate(DateUtil.formatDateTime(new Date()));item.setNum(stockPut.getNum());// 判断库房物品是否存在StockInfo stockInfo stockInfoService.getOne(Wrappers.StockInfolambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));if (stockInfo ! null) {// 更改库房数据stockInfoService.update(Wrappers.StockInfolambdaUpdate().set(StockInfo::getAmount, stockInfo.getAmount()item.getAmount()).set(StockInfo::getPrice, stockInfo.getPrice()).eq(StockInfo::getName, stockInfo.getName()));} else {// 重新添加库房数据StockInfo stock new StockInfo();stock.setName(item.getName());stock.setAmount(item.getAmount());stock.setCreateDate(DateUtil.formatDateTime(new Date()));stock.setType(item.getType());stock.setTypeId(item.getTypeId());stock.setUnit(item.getUnit());stock.setPrice(item.getPrice());stock.setIsIn(0);stockInfo stock;stockInfoService.save(stock);}// 添加入库记录StockInfo stockInfoPut new StockInfo();stockInfoPut.setParentId(stockInfo.getId());stockInfoPut.setName(item.getName());stockInfoPut.setAmount(item.getAmount());stockInfoPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockInfoPut.setType(item.getType());stockInfoPut.setTypeId(item.getTypeId());stockInfoPut.setUnit(item.getUnit());stockInfoPut.setPrice(item.getPrice());stockInfoPut.setIsIn(1);stockInfoService.save(stockInfoPut);// 添加所属信息GoodsBelong goodsBelong new GoodsBelong();goodsBelong.setNum(stockPut.getNum());goodsBelong.setCreateDate(DateUtil.formatDateTime(new Date()));goodsBelong.setAmount(item.getAmount());goodsBelong.setName(item.getName());goodsBelong.setPrice(item.getPrice());goodsBelong.setType(item.getType());goodsBelong.setTypeId(item.getTypeId());goodsBelong.setUnit(item.getUnit());goodsBelongService.save(goodsBelong);});// 修改状态this.update(Wrappers.RurchaseRequestlambdaUpdate().set(RurchaseRequest::getStep, 1).eq(RurchaseRequest::getId, rurchaseRequest.getId()));return true;}
入库后goods_belong会增加三条入库操作记录