From 05858c6f7146fdeb0273ebe62b2c0ab09bd7c3e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AD=A3=E5=9C=A3=E5=8D=8E?= <752718920@qq.com>
Date: Thu, 28 Nov 2019 23:10:12 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=95=86=E5=93=81=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/数据库更新记录-方便升级.txt | 23 +-
erp_web/pages/materials/material.html | 163 +++--
erp_web/pages/template/init_depot_list.html | 10 +
erp_web/upload/excels/goods_template.xls | Bin 0 -> 19968 bytes
.../jsh/erp/controller/DepotController.java | 34 +
.../erp/controller/MaterialController.java | 27 +-
.../jsh/erp/datasource/entities/DepotEx.java | 12 +
.../datasource/entities/MaterialStock.java | 197 +++++
.../entities/MaterialStockExample.java | 673 ++++++++++++++++++
.../entities/MaterialWithInitStock.java | 17 +
.../datasource/mappers/MaterialMapperEx.java | 2 +
.../mappers/MaterialStockMapper.java | 96 +++
.../jsh/erp/service/depot/DepotService.java | 15 +
.../service/depotItem/DepotItemService.java | 4 +-
.../erp/service/material/MaterialService.java | 279 +++++++-
.../MaterialCategoryService.java | 15 +
.../com/jsh/erp/service/unit/UnitService.java | 15 +
.../resources/mapper_xml/MaterialMapperEx.xml | 165 ++++-
.../mapper_xml/MaterialStockMapper.xml | 288 ++++++++
src/test/resources/generatorConfig.xml | 1 +
20 files changed, 1939 insertions(+), 97 deletions(-)
create mode 100644 erp_web/pages/template/init_depot_list.html
create mode 100644 erp_web/upload/excels/goods_template.xls
create mode 100644 src/main/java/com/jsh/erp/datasource/entities/MaterialStock.java
create mode 100644 src/main/java/com/jsh/erp/datasource/entities/MaterialStockExample.java
create mode 100644 src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java
create mode 100644 src/main/java/com/jsh/erp/datasource/mappers/MaterialStockMapper.java
create mode 100644 src/main/resources/mapper_xml/MaterialStockMapper.xml
diff --git a/docs/数据库更新记录-方便升级.txt b/docs/数据库更新记录-方便升级.txt
index 2314a779..a8411009 100644
--- a/docs/数据库更新记录-方便升级.txt
+++ b/docs/数据库更新记录-方便升级.txt
@@ -675,4 +675,25 @@ drop table jsh_app;
-- 时间:2019年11月28日
-- 单据编号表-改表名
-- ----------------------------
-ALTER TABLE tbl_sequence RENAME TO jsh_sequence;
\ No newline at end of file
+ALTER TABLE tbl_sequence RENAME TO jsh_sequence;
+
+-- ----------------------------
+-- 增加产品初始库存表
+-- 时间 2019-11-28
+-- by jishenghua
+-- ----------------------------
+CREATE TABLE `jsh_material_stock` (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
+`material_id` bigint(20) NULL DEFAULT NULL COMMENT '产品id' ,
+`depot_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库id' ,
+`number` decimal(24,6) NULL DEFAULT NULL COMMENT '初始库存数量' ,
+`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户id' ,
+`delete_fag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '删除标记,0未删除,1删除' ,
+PRIMARY KEY (`id`)
+)
+ENGINE=InnoDB
+DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
+COMMENT='产品初始库存'
+AUTO_INCREMENT=48
+ROW_FORMAT=COMPACT
+;
\ No newline at end of file
diff --git a/erp_web/pages/materials/material.html b/erp_web/pages/materials/material.html
index b7e03c87..43438316 100644
--- a/erp_web/pages/materials/material.html
+++ b/erp_web/pages/materials/material.html
@@ -13,6 +13,7 @@
+
@@ -125,11 +126,11 @@
- | 首选出库单位 |
+ 首选销售单位 |
|
- 首选入库单位 |
+ 首选采购单位 |
|
@@ -237,6 +238,9 @@
+
@@ -251,18 +255,12 @@
closed="true" buttons="#dlg-buttons5" modal="true" collapsible="false" closable="true">
+
@@ -517,14 +516,9 @@
columns: [[
{field: 'id', width: 35, align: "center", checkbox: true},
{
- title: '操作', field: 'op', align: "center", width: 60, formatter: function (value, rec) {
+ title: '操作', field: 'op', align: "center", width: 60, formatter: function (value, rec, index) {
var str = '';
- var rowInfo = rec.id + 'AaBb' + rec.name + 'AaBb' + rec.model + 'AaBb' + rec.color + 'AaBb' + rec.unit + 'AaBb' + rec.retailprice
- + 'AaBb' + rec.lowprice + 'AaBb' + rec.presetpriceone + 'AaBb' + rec.presetpricetwo + 'AaBb' + rec.remark + 'AaBb' + rec.standard
- + 'AaBb' + rec.color + 'AaBb' + rec.packing + 'AaBb' + rec.safetystock + 'AaBb' + rec.categoryid + 'AaBb' + rec.categoryName
- + 'AaBb' + rec.unitid + 'AaBb' + rec.unitName + 'AaBb' + rec.firstoutunit + 'AaBb' + rec.firstinunit
- + 'AaBb' + rec.mfrs + 'AaBb' + rec.otherfield1 + 'AaBb' + rec.otherfield2 + 'AaBb' + rec.otherfield3+ 'AaBb' + rec.enableserialnumber;
- str += '
';
+ str += '
';
str += '
';
return str;
}
@@ -1141,6 +1135,7 @@
oldManyUnit = "";
materialID = 0;
url = '/material/add';
+ initDepotList(materialID); //加载仓库列表页面
}
//检查商品名称是否存在 ++ 重名无法提示问题需要跟进
@@ -1245,6 +1240,17 @@
objInfo.UnitId = $("#manyUnit").val();
objInfo.CategoryId =$("#parentid").val();
objInfo.PriceStrategy = JSON.stringify(priceStrategy); //价格列表
+ //初始库存信息
+ var stockArr = [];
+ $("#initDepot input").each(function () {
+ var id = $(this).attr("data-id");
+ var val = $(this).val();
+ var stockObj = {};
+ stockObj.depotId = id;
+ stockObj.number = val;
+ stockArr.push(stockObj);
+ });
+ objInfo.stock = JSON.stringify(stockArr);
$.ajax({
type: "post",
url: url,
@@ -1291,35 +1297,35 @@
}
//编辑信息
- function editMaterial(materialTotalInfo) {
- var materialInfo = materialTotalInfo.split("AaBb");
+ function editMaterial(index) {
+ var rowsdata = $("#tableData").datagrid("getRows")[index];
bindMProperty(); //根据商品属性绑定
- $("#Name").focus().val(materialInfo[1]);
- $("#Color").focus().val(materialInfo[11]);
- $("#EnableSerialNumber").val(materialInfo[24]=='1'?'1':'0');
+ $("#Name").focus().val(rowsdata.name);
+ $("#Color").focus().val(rowsdata.color);
+ $("#EnableSerialNumber").val(rowsdata.enableserialnumber=='1'?'1':'0');
//商品类别id
- $("#parentid").val(materialInfo[14] == "undefined" ? "" : materialInfo[14]);
+ $("#parentid").val(rowsdata.categoryid);
//商品类别名称
- $("#parentName").val(materialInfo[15] == "undefined" ? "" : materialInfo[15]);
- mId = materialInfo[14];
- mName = materialInfo[15];
- $("#Packing").focus().val(materialInfo[12]);
- $("#SafetyStock").focus().val(materialInfo[13]=="undefined" ? "" : materialInfo[13]);
- $("#Model").val(materialInfo[2]);
- $("#Standard").val(materialInfo[10] == "undefined" ? "" : materialInfo[10]);
- $("#Color").val(materialInfo[3] == "undefined" ? "" : materialInfo[3]);
- $("#Mfrs").val(materialInfo[20] == "undefined" ? "" : materialInfo[20]);
- $("#OtherField1").val(materialInfo[21] == "undefined" ? "" : materialInfo[21]);
- $("#OtherField2").val(materialInfo[22] == "undefined" ? "" : materialInfo[22]);
- $("#OtherField3").val(materialInfo[23] == "undefined" ? "" : materialInfo[23]);
- $("#Unit").val(materialInfo[4] == "undefined" ? "" : materialInfo[4]);
- $("#RetailPrice").val(materialInfo[5] == "undefined" ? "" : materialInfo[5]);
- $("#LowPrice").val(materialInfo[6] == "undefined" ? "" : materialInfo[6]);
- $("#PresetPriceOne").val(materialInfo[7] == "undefined" ? "" : materialInfo[7]);
- $("#PresetPriceTwo").val(materialInfo[8] == "undefined" ? "" : materialInfo[8]);
- $("#Remark").val(materialInfo[9]);
- $("#manyUnit").val(materialInfo[16]);
- if (materialInfo[16] != "undefined") {
+ $("#parentName").val(rowsdata.categoryName);
+ mId = rowsdata.categoryid;
+ mName = rowsdata.categoryName;
+ $("#Packing").focus().val(rowsdata.packing);
+ $("#SafetyStock").focus().val(rowsdata.safetystock);
+ $("#Model").val(rowsdata.model);
+ $("#Standard").val(rowsdata.standard);
+ $("#Color").val(rowsdata.color);
+ $("#Mfrs").val(rowsdata.mfrs);
+ $("#OtherField1").val(rowsdata.otherfield1);
+ $("#OtherField2").val(rowsdata.otherfield2);
+ $("#OtherField3").val(rowsdata.otherfield3);
+ $("#Unit").val(rowsdata.unit);
+ $("#RetailPrice").val(rowsdata.retailprice);
+ $("#LowPrice").val(rowsdata.lowprice);
+ $("#PresetPriceOne").val(rowsdata.presetpriceone);
+ $("#PresetPriceTwo").val(rowsdata.presetpricetwo);
+ $("#Remark").val(rowsdata.remark);
+ $("#manyUnit").val(rowsdata.unitid);
+ if (rowsdata.unitid) {
$("#manyUnitCheck").prop("checked", true);
//当前为选中状态
$("#Unit").hide();
@@ -1336,10 +1342,10 @@
var basic = '';
var other = '';
firstOptions = firstOptions + basic + other;
- $("#FirstOutUnit").empty().append('').append(firstOptions); //首选出库单位
- $("#FirstInUnit").empty().append('').append(firstOptions); //首选入库单位
- $("#FirstOutUnit").val(materialInfo[18]);//首选出库单位
- $("#FirstInUnit").val(materialInfo[19]);//首选入库单位
+ $("#FirstOutUnit").empty().append('').append(firstOptions); //首选销售单位
+ $("#FirstInUnit").empty().append('').append(firstOptions); //首选采购单位
+ $("#FirstOutUnit").val(rowsdata.firstoutunit);//首选销售单位
+ $("#FirstInUnit").val(rowsdata.firstinunit);//首选采购单位
}
}
else {
@@ -1356,7 +1362,7 @@
$.ajax({
url: '/material/findById',
data: {
- id: materialInfo[0]
+ id: rowsdata.id
},
type: "get",
dataType: "json",
@@ -1385,26 +1391,53 @@
}
});
- oldName = materialInfo[1];
- oldModel = materialInfo[2];
- oldColor = materialInfo[11];
- oldStandard = materialInfo[10];
- oldMfrs = materialInfo[20];
- oldOtherField1 = materialInfo[21];
- oldOtherField2 = materialInfo[22];
- oldOtherField3 = materialInfo[23];
- oldUnit = materialInfo[4];
- oldManyUnit = materialInfo[16];
+ oldName = rowsdata.name;
+ oldModel = rowsdata.model;
+ oldColor = rowsdata.color;
+ oldStandard = rowsdata.standard;
+ oldMfrs = rowsdata.mfrs;
+ oldOtherField1 = rowsdata.otherfield1;
+ oldOtherField2 = rowsdata.otherfield2;
+ oldOtherField3 = rowsdata.otherfield3;
+ oldUnit = rowsdata.unit;
+ oldManyUnit = rowsdata.unitid;
$('#materialDlg').dialog('open').dialog('setTitle', '
编辑商品信息');
$(".window-mask").css({width: webW, height: webH});
- materialID = materialInfo[0];
+ materialID = rowsdata.id;
//焦点在名称输入框==定焦在输入文字后面
- $("#Name").val("").focus().val(materialInfo[1]);
+ $("#Name").val("").focus().val(rowsdata.name);
//选中基本资料tab
$("#materialFM #tt .tabs li").first().click();
- url = '/material/update?id=' + materialInfo[0];
+ url = '/material/update?id=' + rowsdata.id;
+ initDepotList(rowsdata.id); //加载仓库列表页面
}
+ function initDepotList(mId) {
+ $.ajax({
+ type: "get",
+ url: "/depot/getAllListWithStock?mId=" + mId,
+ dataType: "json",
+ async: false,
+ success: function (res) {
+ if (res && res.code == 200) {
+ var json = {};
+ json.depotList = res.data;
+ $.ajax({
+ type: "get",
+ url: "../../../pages/template/init_depot_list.html?616",
+ async: false,
+ success: function (tem) {
+ if (tem) {
+ var template = Handlebars.compile(tem);
+ var htmlValue = template(json);
+ $("#initDepot").html(htmlValue);
+ }
+ }
+ });
+ }
+ }
+ });
+ }
//搜索处理
$("#searchBtn").unbind().bind({
@@ -1501,8 +1534,8 @@
var basic = '';
var other = '';
firstOptions = firstOptions + basic + other;
- $("#FirstOutUnit").empty().append('').append(firstOptions); //首选出库单位
- $("#FirstInUnit").empty().append('').append(firstOptions); //首选入库单位
+ $("#FirstOutUnit").empty().append('').append(firstOptions); //首选销售单位
+ $("#FirstInUnit").empty().append('').append(firstOptions); //首选采购单位
$("#basicUnit").text(arr[0]);
$("#otherUnit").text(arr[1]);
}
diff --git a/erp_web/pages/template/init_depot_list.html b/erp_web/pages/template/init_depot_list.html
new file mode 100644
index 00000000..e52be2da
--- /dev/null
+++ b/erp_web/pages/template/init_depot_list.html
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/erp_web/upload/excels/goods_template.xls b/erp_web/upload/excels/goods_template.xls
new file mode 100644
index 0000000000000000000000000000000000000000..2050712c9091deed997c669f7363be7aa186b4c4
GIT binary patch
literal 19968
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
Ac>n+a
literal 0
HcmV?d00001
diff --git a/src/main/java/com/jsh/erp/controller/DepotController.java b/src/main/java/com/jsh/erp/controller/DepotController.java
index d3d5c361..2bd429ec 100644
--- a/src/main/java/com/jsh/erp/controller/DepotController.java
+++ b/src/main/java/com/jsh/erp/controller/DepotController.java
@@ -12,6 +12,7 @@ import com.jsh.erp.datasource.entities.Depot;
import com.jsh.erp.datasource.entities.DepotEx;
import com.jsh.erp.exception.BusinessRunTimeException;
import com.jsh.erp.service.depot.DepotService;
+import com.jsh.erp.service.material.MaterialService;
import com.jsh.erp.service.systemConfig.SystemConfigService;
import com.jsh.erp.service.userBusiness.UserBusinessService;
import com.jsh.erp.utils.*;
@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
+import java.math.BigDecimal;
import java.util.*;
import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
@@ -44,6 +46,9 @@ public class DepotController {
@Resource
private SystemConfigService systemConfigService;
+ @Resource
+ private MaterialService materialService;
+
@GetMapping(value = "/getAllList")
public BaseResponseInfo getAllList(HttpServletRequest request) throws Exception{
BaseResponseInfo res = new BaseResponseInfo();
@@ -232,4 +237,33 @@ public class DepotController {
return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
}
}
+
+ @GetMapping(value = "/getAllListWithStock")
+ public BaseResponseInfo getAllList(@RequestParam("mId") Long mId,
+ HttpServletRequest request) {
+ BaseResponseInfo res = new BaseResponseInfo();
+ try {
+ List list = depotService.getAllList();
+ List depotList = new ArrayList();
+ for(Depot depot: list) {
+ DepotEx de = new DepotEx();
+ if(mId!=0) {
+ BigDecimal stock = materialService.getInitStock(mId, depot.getId());
+ de.setStock(stock);
+ } else {
+ de.setStock(BigDecimal.ZERO);
+ }
+ de.setId(depot.getId());
+ de.setName(depot.getName());
+ depotList.add(de);
+ }
+ res.code = 200;
+ res.data = depotList;
+ } catch(Exception e){
+ e.printStackTrace();
+ res.code = 500;
+ res.data = "获取数据失败";
+ }
+ return res;
+ }
}
diff --git a/src/main/java/com/jsh/erp/controller/MaterialController.java b/src/main/java/com/jsh/erp/controller/MaterialController.java
index 366824bb..8640c9a2 100644
--- a/src/main/java/com/jsh/erp/controller/MaterialController.java
+++ b/src/main/java/com/jsh/erp/controller/MaterialController.java
@@ -233,7 +233,7 @@ public class MaterialController {
}
/**
- * excel表格导入
+ * excel表格导入产品(含初始库存)
* @param materialFile
* @param request
* @param response
@@ -257,30 +257,7 @@ public class MaterialController {
info.code = 400;
info.data = data;
}
- //每行中数据顺序 "品名","类型","型号","安全存量","单位","零售价","最低售价","预计采购价","批发价","备注","状态"
- List mList = new ArrayList();
- for (int i = 1; i < src.getRows(); i++) {
- Material m = new Material();
- m.setName(ExcelUtils.getContent(src, i, 0));
- m.setCategoryid(1L); //根目录
- m.setModel(ExcelUtils.getContent(src, i, 2));
- String safetyStock = ExcelUtils.getContent(src, i, 3);
- m.setSafetystock(parseBigDecimalEx(safetyStock));
- m.setUnit(ExcelUtils.getContent(src, i, 4));
- String retailprice = ExcelUtils.getContent(src, i, 5);
- m.setRetailprice(parseBigDecimalEx(retailprice));
- String lowPrice = ExcelUtils.getContent(src, i, 6);
- m.setLowprice(parseBigDecimalEx(lowPrice));
- String presetpriceone = ExcelUtils.getContent(src, i, 7);
- m.setPresetpriceone(parseBigDecimalEx(presetpriceone));
- String presetpricetwo = ExcelUtils.getContent(src, i, 8);
- m.setPresetpricetwo(parseBigDecimalEx(presetpricetwo));
- m.setRemark(ExcelUtils.getContent(src, i, 9));
- String enabled = ExcelUtils.getContent(src, i, 10);
- m.setEnabled(enabled.equals("启用")? true: false);
- mList.add(m);
- }
- info = materialService.importExcel(mList);
+ info = materialService.importExcel(src);
} catch (Exception e) {
e.printStackTrace();
message = "导入失败";
diff --git a/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java b/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java
index cd3b842a..2a66f0e9 100644
--- a/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java
+++ b/src/main/java/com/jsh/erp/datasource/entities/DepotEx.java
@@ -1,5 +1,7 @@
package com.jsh.erp.datasource.entities;
+import java.math.BigDecimal;
+
/**
* Description
*
@@ -10,6 +12,8 @@ public class DepotEx extends Depot{
//负责人名字
private String principalName;
+ private BigDecimal stock;
+
public String getPrincipalName() {
return principalName;
}
@@ -17,4 +21,12 @@ public class DepotEx extends Depot{
public void setPrincipalName(String principalName) {
this.principalName = principalName;
}
+
+ public BigDecimal getStock() {
+ return stock;
+ }
+
+ public void setStock(BigDecimal stock) {
+ this.stock = stock;
+ }
}
diff --git a/src/main/java/com/jsh/erp/datasource/entities/MaterialStock.java b/src/main/java/com/jsh/erp/datasource/entities/MaterialStock.java
new file mode 100644
index 00000000..19067781
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/entities/MaterialStock.java
@@ -0,0 +1,197 @@
+package com.jsh.erp.datasource.entities;
+
+import java.math.BigDecimal;
+
+public class MaterialStock {
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database column jsh_material_stock.id
+ *
+ * @mbggenerated
+ */
+ private Long id;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database column jsh_material_stock.material_id
+ *
+ * @mbggenerated
+ */
+ private Long materialId;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database column jsh_material_stock.depot_id
+ *
+ * @mbggenerated
+ */
+ private Long depotId;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database column jsh_material_stock.number
+ *
+ * @mbggenerated
+ */
+ private BigDecimal number;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database column jsh_material_stock.tenant_id
+ *
+ * @mbggenerated
+ */
+ private Long tenantId;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database column jsh_material_stock.delete_fag
+ *
+ * @mbggenerated
+ */
+ private String deleteFag;
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method returns the value of the database column jsh_material_stock.id
+ *
+ * @return the value of jsh_material_stock.id
+ *
+ * @mbggenerated
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method sets the value of the database column jsh_material_stock.id
+ *
+ * @param id the value for jsh_material_stock.id
+ *
+ * @mbggenerated
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method returns the value of the database column jsh_material_stock.material_id
+ *
+ * @return the value of jsh_material_stock.material_id
+ *
+ * @mbggenerated
+ */
+ public Long getMaterialId() {
+ return materialId;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method sets the value of the database column jsh_material_stock.material_id
+ *
+ * @param materialId the value for jsh_material_stock.material_id
+ *
+ * @mbggenerated
+ */
+ public void setMaterialId(Long materialId) {
+ this.materialId = materialId;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method returns the value of the database column jsh_material_stock.depot_id
+ *
+ * @return the value of jsh_material_stock.depot_id
+ *
+ * @mbggenerated
+ */
+ public Long getDepotId() {
+ return depotId;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method sets the value of the database column jsh_material_stock.depot_id
+ *
+ * @param depotId the value for jsh_material_stock.depot_id
+ *
+ * @mbggenerated
+ */
+ public void setDepotId(Long depotId) {
+ this.depotId = depotId;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method returns the value of the database column jsh_material_stock.number
+ *
+ * @return the value of jsh_material_stock.number
+ *
+ * @mbggenerated
+ */
+ public BigDecimal getNumber() {
+ return number;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method sets the value of the database column jsh_material_stock.number
+ *
+ * @param number the value for jsh_material_stock.number
+ *
+ * @mbggenerated
+ */
+ public void setNumber(BigDecimal number) {
+ this.number = number;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method returns the value of the database column jsh_material_stock.tenant_id
+ *
+ * @return the value of jsh_material_stock.tenant_id
+ *
+ * @mbggenerated
+ */
+ public Long getTenantId() {
+ return tenantId;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method sets the value of the database column jsh_material_stock.tenant_id
+ *
+ * @param tenantId the value for jsh_material_stock.tenant_id
+ *
+ * @mbggenerated
+ */
+ public void setTenantId(Long tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method returns the value of the database column jsh_material_stock.delete_fag
+ *
+ * @return the value of jsh_material_stock.delete_fag
+ *
+ * @mbggenerated
+ */
+ public String getDeleteFag() {
+ return deleteFag;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method sets the value of the database column jsh_material_stock.delete_fag
+ *
+ * @param deleteFag the value for jsh_material_stock.delete_fag
+ *
+ * @mbggenerated
+ */
+ public void setDeleteFag(String deleteFag) {
+ this.deleteFag = deleteFag == null ? null : deleteFag.trim();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/datasource/entities/MaterialStockExample.java b/src/main/java/com/jsh/erp/datasource/entities/MaterialStockExample.java
new file mode 100644
index 00000000..fe34f386
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/entities/MaterialStockExample.java
@@ -0,0 +1,673 @@
+package com.jsh.erp.datasource.entities;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MaterialStockExample {
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ protected String orderByClause;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ protected boolean distinct;
+
+ /**
+ * This field was generated by MyBatis Generator.
+ * This field corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ protected List oredCriteria;
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public MaterialStockExample() {
+ oredCriteria = new ArrayList();
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public void setOrderByClause(String orderByClause) {
+ this.orderByClause = orderByClause;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public String getOrderByClause() {
+ return orderByClause;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public void setDistinct(boolean distinct) {
+ this.distinct = distinct;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public boolean isDistinct() {
+ return distinct;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public List getOredCriteria() {
+ return oredCriteria;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public void or(Criteria criteria) {
+ oredCriteria.add(criteria);
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public Criteria or() {
+ Criteria criteria = createCriteriaInternal();
+ oredCriteria.add(criteria);
+ return criteria;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public Criteria createCriteria() {
+ Criteria criteria = createCriteriaInternal();
+ if (oredCriteria.size() == 0) {
+ oredCriteria.add(criteria);
+ }
+ return criteria;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ protected Criteria createCriteriaInternal() {
+ Criteria criteria = new Criteria();
+ return criteria;
+ }
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public void clear() {
+ oredCriteria.clear();
+ orderByClause = null;
+ distinct = false;
+ }
+
+ /**
+ * This class was generated by MyBatis Generator.
+ * This class corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ protected abstract static class GeneratedCriteria {
+ protected List criteria;
+
+ protected GeneratedCriteria() {
+ super();
+ criteria = new ArrayList();
+ }
+
+ public boolean isValid() {
+ return criteria.size() > 0;
+ }
+
+ public List getAllCriteria() {
+ return criteria;
+ }
+
+ public List getCriteria() {
+ return criteria;
+ }
+
+ protected void addCriterion(String condition) {
+ if (condition == null) {
+ throw new RuntimeException("Value for condition cannot be null");
+ }
+ criteria.add(new Criterion(condition));
+ }
+
+ protected void addCriterion(String condition, Object value, String property) {
+ if (value == null) {
+ throw new RuntimeException("Value for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value));
+ }
+
+ protected void addCriterion(String condition, Object value1, Object value2, String property) {
+ if (value1 == null || value2 == null) {
+ throw new RuntimeException("Between values for " + property + " cannot be null");
+ }
+ criteria.add(new Criterion(condition, value1, value2));
+ }
+
+ public Criteria andIdIsNull() {
+ addCriterion("id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdIsNotNull() {
+ addCriterion("id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdEqualTo(Long value) {
+ addCriterion("id =", value, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdNotEqualTo(Long value) {
+ addCriterion("id <>", value, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdGreaterThan(Long value) {
+ addCriterion("id >", value, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("id >=", value, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdLessThan(Long value) {
+ addCriterion("id <", value, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdLessThanOrEqualTo(Long value) {
+ addCriterion("id <=", value, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdIn(List values) {
+ addCriterion("id in", values, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdNotIn(List values) {
+ addCriterion("id not in", values, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdBetween(Long value1, Long value2) {
+ addCriterion("id between", value1, value2, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andIdNotBetween(Long value1, Long value2) {
+ addCriterion("id not between", value1, value2, "id");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdIsNull() {
+ addCriterion("material_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdIsNotNull() {
+ addCriterion("material_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdEqualTo(Long value) {
+ addCriterion("material_id =", value, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdNotEqualTo(Long value) {
+ addCriterion("material_id <>", value, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdGreaterThan(Long value) {
+ addCriterion("material_id >", value, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("material_id >=", value, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdLessThan(Long value) {
+ addCriterion("material_id <", value, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdLessThanOrEqualTo(Long value) {
+ addCriterion("material_id <=", value, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdIn(List values) {
+ addCriterion("material_id in", values, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdNotIn(List values) {
+ addCriterion("material_id not in", values, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdBetween(Long value1, Long value2) {
+ addCriterion("material_id between", value1, value2, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andMaterialIdNotBetween(Long value1, Long value2) {
+ addCriterion("material_id not between", value1, value2, "materialId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdIsNull() {
+ addCriterion("depot_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdIsNotNull() {
+ addCriterion("depot_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdEqualTo(Long value) {
+ addCriterion("depot_id =", value, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdNotEqualTo(Long value) {
+ addCriterion("depot_id <>", value, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdGreaterThan(Long value) {
+ addCriterion("depot_id >", value, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("depot_id >=", value, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdLessThan(Long value) {
+ addCriterion("depot_id <", value, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdLessThanOrEqualTo(Long value) {
+ addCriterion("depot_id <=", value, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdIn(List values) {
+ addCriterion("depot_id in", values, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdNotIn(List values) {
+ addCriterion("depot_id not in", values, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdBetween(Long value1, Long value2) {
+ addCriterion("depot_id between", value1, value2, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDepotIdNotBetween(Long value1, Long value2) {
+ addCriterion("depot_id not between", value1, value2, "depotId");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberIsNull() {
+ addCriterion("number is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberIsNotNull() {
+ addCriterion("number is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberEqualTo(BigDecimal value) {
+ addCriterion("number =", value, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberNotEqualTo(BigDecimal value) {
+ addCriterion("number <>", value, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberGreaterThan(BigDecimal value) {
+ addCriterion("number >", value, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberGreaterThanOrEqualTo(BigDecimal value) {
+ addCriterion("number >=", value, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberLessThan(BigDecimal value) {
+ addCriterion("number <", value, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberLessThanOrEqualTo(BigDecimal value) {
+ addCriterion("number <=", value, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberIn(List values) {
+ addCriterion("number in", values, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberNotIn(List values) {
+ addCriterion("number not in", values, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberBetween(BigDecimal value1, BigDecimal value2) {
+ addCriterion("number between", value1, value2, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andNumberNotBetween(BigDecimal value1, BigDecimal value2) {
+ addCriterion("number not between", value1, value2, "number");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdIsNull() {
+ addCriterion("tenant_id is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdIsNotNull() {
+ addCriterion("tenant_id is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdEqualTo(Long value) {
+ addCriterion("tenant_id =", value, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdNotEqualTo(Long value) {
+ addCriterion("tenant_id <>", value, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdGreaterThan(Long value) {
+ addCriterion("tenant_id >", value, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdGreaterThanOrEqualTo(Long value) {
+ addCriterion("tenant_id >=", value, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdLessThan(Long value) {
+ addCriterion("tenant_id <", value, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdLessThanOrEqualTo(Long value) {
+ addCriterion("tenant_id <=", value, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdIn(List values) {
+ addCriterion("tenant_id in", values, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdNotIn(List values) {
+ addCriterion("tenant_id not in", values, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdBetween(Long value1, Long value2) {
+ addCriterion("tenant_id between", value1, value2, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andTenantIdNotBetween(Long value1, Long value2) {
+ addCriterion("tenant_id not between", value1, value2, "tenantId");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagIsNull() {
+ addCriterion("delete_fag is null");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagIsNotNull() {
+ addCriterion("delete_fag is not null");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagEqualTo(String value) {
+ addCriterion("delete_fag =", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagNotEqualTo(String value) {
+ addCriterion("delete_fag <>", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagGreaterThan(String value) {
+ addCriterion("delete_fag >", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagGreaterThanOrEqualTo(String value) {
+ addCriterion("delete_fag >=", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagLessThan(String value) {
+ addCriterion("delete_fag <", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagLessThanOrEqualTo(String value) {
+ addCriterion("delete_fag <=", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagLike(String value) {
+ addCriterion("delete_fag like", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagNotLike(String value) {
+ addCriterion("delete_fag not like", value, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagIn(List values) {
+ addCriterion("delete_fag in", values, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagNotIn(List values) {
+ addCriterion("delete_fag not in", values, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagBetween(String value1, String value2) {
+ addCriterion("delete_fag between", value1, value2, "deleteFag");
+ return (Criteria) this;
+ }
+
+ public Criteria andDeleteFagNotBetween(String value1, String value2) {
+ addCriterion("delete_fag not between", value1, value2, "deleteFag");
+ return (Criteria) this;
+ }
+ }
+
+ /**
+ * This class was generated by MyBatis Generator.
+ * This class corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated do_not_delete_during_merge
+ */
+ public static class Criteria extends GeneratedCriteria {
+
+ protected Criteria() {
+ super();
+ }
+ }
+
+ /**
+ * This class was generated by MyBatis Generator.
+ * This class corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ public static class Criterion {
+ private String condition;
+
+ private Object value;
+
+ private Object secondValue;
+
+ private boolean noValue;
+
+ private boolean singleValue;
+
+ private boolean betweenValue;
+
+ private boolean listValue;
+
+ private String typeHandler;
+
+ public String getCondition() {
+ return condition;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object getSecondValue() {
+ return secondValue;
+ }
+
+ public boolean isNoValue() {
+ return noValue;
+ }
+
+ public boolean isSingleValue() {
+ return singleValue;
+ }
+
+ public boolean isBetweenValue() {
+ return betweenValue;
+ }
+
+ public boolean isListValue() {
+ return listValue;
+ }
+
+ public String getTypeHandler() {
+ return typeHandler;
+ }
+
+ protected Criterion(String condition) {
+ super();
+ this.condition = condition;
+ this.typeHandler = null;
+ this.noValue = true;
+ }
+
+ protected Criterion(String condition, Object value, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.typeHandler = typeHandler;
+ if (value instanceof List>) {
+ this.listValue = true;
+ } else {
+ this.singleValue = true;
+ }
+ }
+
+ protected Criterion(String condition, Object value) {
+ this(condition, value, null);
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+ super();
+ this.condition = condition;
+ this.value = value;
+ this.secondValue = secondValue;
+ this.typeHandler = typeHandler;
+ this.betweenValue = true;
+ }
+
+ protected Criterion(String condition, Object value, Object secondValue) {
+ this(condition, value, secondValue, null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java b/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java
new file mode 100644
index 00000000..63efbd6c
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/entities/MaterialWithInitStock.java
@@ -0,0 +1,17 @@
+package com.jsh.erp.datasource.entities;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+public class MaterialWithInitStock extends Material {
+
+ private Map stockMap;
+
+ public Map getStockMap() {
+ return stockMap;
+ }
+
+ public void setStockMap(Map stockMap) {
+ this.stockMap = stockMap;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java b/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java
index b565fbb4..3d85d8ff 100644
--- a/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java
+++ b/src/main/java/com/jsh/erp/datasource/mappers/MaterialMapperEx.java
@@ -59,4 +59,6 @@ public interface MaterialMapperEx {
List getMaterialListByCategoryIds(@Param("categoryIds") String[] categoryIds);
List getMaterialListByUnitIds(@Param("unitIds") String[] unitIds);
+
+ int insertSelectiveEx(Material record);
}
diff --git a/src/main/java/com/jsh/erp/datasource/mappers/MaterialStockMapper.java b/src/main/java/com/jsh/erp/datasource/mappers/MaterialStockMapper.java
new file mode 100644
index 00000000..796825e0
--- /dev/null
+++ b/src/main/java/com/jsh/erp/datasource/mappers/MaterialStockMapper.java
@@ -0,0 +1,96 @@
+package com.jsh.erp.datasource.mappers;
+
+import com.jsh.erp.datasource.entities.MaterialStock;
+import com.jsh.erp.datasource.entities.MaterialStockExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface MaterialStockMapper {
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int countByExample(MaterialStockExample example);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int deleteByExample(MaterialStockExample example);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int deleteByPrimaryKey(Long id);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int insert(MaterialStock record);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int insertSelective(MaterialStock record);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ List selectByExample(MaterialStockExample example);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ MaterialStock selectByPrimaryKey(Long id);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int updateByExampleSelective(@Param("record") MaterialStock record, @Param("example") MaterialStockExample example);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int updateByExample(@Param("record") MaterialStock record, @Param("example") MaterialStockExample example);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int updateByPrimaryKeySelective(MaterialStock record);
+
+ /**
+ * This method was generated by MyBatis Generator.
+ * This method corresponds to the database table jsh_material_stock
+ *
+ * @mbggenerated
+ */
+ int updateByPrimaryKey(MaterialStock record);
+}
\ No newline at end of file
diff --git a/src/main/java/com/jsh/erp/service/depot/DepotService.java b/src/main/java/com/jsh/erp/service/depot/DepotService.java
index 803fd70d..ccedea10 100644
--- a/src/main/java/com/jsh/erp/service/depot/DepotService.java
+++ b/src/main/java/com/jsh/erp/service/depot/DepotService.java
@@ -292,4 +292,19 @@ public class DepotService {
}
return result;
}
+
+ /**
+ * 根据名称获取id
+ * @param name
+ */
+ public Long getIdByName(String name){
+ Long id = 0L;
+ DepotExample example = new DepotExample();
+ example.createCriteria().andNameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
+ List list = depotMapper.selectByExample(example);
+ if(list!=null && list.size()>0) {
+ id = list.get(0).getId();
+ }
+ return id;
+ }
}
diff --git a/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java b/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java
index 474626e6..eafabe76 100644
--- a/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java
+++ b/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java
@@ -663,10 +663,12 @@ public class DepotItemService {
* @return
*/
public BigDecimal getStockByParam(Long depotId, Long mId, String beginTime, String endTime, Long tenantId){
+ //初始库存
+ BigDecimal initStock = materialService.getInitStockByMid(depotId, mId);
DepotItemVo4Stock stockObj = depotItemMapperEx.getStockByParam(depotId, mId, beginTime, endTime, tenantId);
BigDecimal intNum = stockObj.getInNum();
BigDecimal outNum = stockObj.getOutNum();
- return intNum.subtract(outNum);
+ return initStock.add(intNum).subtract(outNum);
}
/**
diff --git a/src/main/java/com/jsh/erp/service/material/MaterialService.java b/src/main/java/com/jsh/erp/service/material/MaterialService.java
index 5dff0edf..f3775de3 100644
--- a/src/main/java/com/jsh/erp/service/material/MaterialService.java
+++ b/src/main/java/com/jsh/erp/service/material/MaterialService.java
@@ -1,5 +1,7 @@
package com.jsh.erp.service.material;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.jsh.erp.constants.BusinessConstants;
@@ -8,13 +10,19 @@ import com.jsh.erp.datasource.entities.*;
import com.jsh.erp.datasource.mappers.DepotItemMapperEx;
import com.jsh.erp.datasource.mappers.MaterialMapper;
import com.jsh.erp.datasource.mappers.MaterialMapperEx;
+import com.jsh.erp.datasource.mappers.MaterialStockMapper;
import com.jsh.erp.exception.BusinessRunTimeException;
import com.jsh.erp.exception.JshException;
+import com.jsh.erp.service.depot.DepotService;
import com.jsh.erp.service.depotItem.DepotItemService;
import com.jsh.erp.service.log.LogService;
+import com.jsh.erp.service.materialCategory.MaterialCategoryService;
+import com.jsh.erp.service.unit.UnitService;
import com.jsh.erp.service.user.UserService;
import com.jsh.erp.utils.BaseResponseInfo;
+import com.jsh.erp.utils.ExcelUtils;
import com.jsh.erp.utils.StringUtil;
+import jxl.Sheet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@@ -24,6 +32,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
import java.util.*;
@Service
@@ -42,6 +51,14 @@ public class MaterialService {
private DepotItemMapperEx depotItemMapperEx;
@Resource
private DepotItemService depotItemService;
+ @Resource
+ private MaterialCategoryService materialCategoryService;
+ @Resource
+ private UnitService unitService;
+ @Resource
+ private MaterialStockMapper materialStockMapper;
+ @Resource
+ private DepotService depotService;
public Material getMaterial(long id)throws Exception {
Material result=null;
@@ -125,6 +142,22 @@ public class MaterialService {
int result =0;
try{
result= materialMapper.insertSelective(material);
+ JSONObject mObj = JSON.parseObject(beanJson);
+ Long mId = material.getId();
+ if(mObj.get("stock")!=null) {
+ String stockStr = mObj.getString("stock");
+ JSONArray stockArr = JSONArray.parseArray(stockStr);
+ for(Object object: stockArr) {
+ JSONObject jsonObj = (JSONObject)object;
+ if(jsonObj.get("depotId")!=null && jsonObj.get("number")!=null) {
+ String number = jsonObj.getString("number");
+ Long depotId = jsonObj.getLong("depotId");
+ if(number!=null && Double.valueOf(number)>0) {
+ insertStockByMaterialAndDepot(depotId, mId, parseBigDecimalEx(number));
+ }
+ }
+ }
+ }
logService.insertLog("商品", BusinessConstants.LOG_OPERATION_TYPE_ADD, request);
}catch(Exception e){
JshException.writeFail(logger, e);
@@ -145,6 +178,25 @@ public class MaterialService {
} else {
materialMapperEx.updateUnitIdNullByPrimaryKey(id); //将多单位置空
}
+ JSONObject mObj = JSON.parseObject(beanJson);
+ if(mObj.get("stock")!=null) {
+ String stockStr = mObj.getString("stock");
+ JSONArray stockArr = JSONArray.parseArray(stockStr);
+ for (Object object : stockArr) {
+ JSONObject jsonObj = (JSONObject) object;
+ if (jsonObj.get("depotId") != null && jsonObj.get("number") != null) {
+ String number = jsonObj.getString("number");
+ Long depotId = jsonObj.getLong("depotId");
+ //先清除再插入
+ MaterialStockExample example = new MaterialStockExample();
+ example.createCriteria().andMaterialIdEqualTo(id).andDepotIdEqualTo(depotId);
+ materialStockMapper.deleteByExample(example);
+ if (number != null && Double.valueOf(number) > 0) {
+ insertStockByMaterialAndDepot(depotId, id, parseBigDecimalEx(number));
+ }
+ }
+ }
+ }
logService.insertLog("商品",
new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_EDIT).append(id).toString(), request);
}catch(Exception e){
@@ -296,21 +348,127 @@ public class MaterialService {
}
return resList;
}
+
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
- public BaseResponseInfo importExcel(List mList) throws Exception {
+ public BaseResponseInfo importExcel(Sheet src) throws Exception {
+ List depotList= depotService.getDepot();
+ int depotCount = depotList.size();
+ List mList = new ArrayList();
+ for (int i = 2; i < src.getRows(); i++) {
+ String name = ExcelUtils.getContent(src, i, 0); //名称
+ String model = ExcelUtils.getContent(src, i, 1); //型号
+ String categoryName = ExcelUtils.getContent(src, i, 2); //类型
+ String safetyStock = ExcelUtils.getContent(src, i, 3); //安全存量
+ String color = ExcelUtils.getContent(src, i, 4); //颜色
+ String unit = ExcelUtils.getContent(src, i, 5); //单位
+ //校验名称、型号、单位是否为空
+ if(StringUtil.isNotEmpty(name) && StringUtil.isNotEmpty(model) && StringUtil.isNotEmpty(unit)) {
+ MaterialWithInitStock m = new MaterialWithInitStock();
+ m.setName(name);
+ m.setModel(model);
+ Long categoryId = materialCategoryService.getCategoryIdByName(categoryName);
+ m.setCategoryid(categoryId);
+ m.setSafetystock(parseBigDecimalEx(safetyStock));
+ m.setColor(color);
+ String manyUnit = ExcelUtils.getContent(src, i, 6); //多单位
+ String ratio = ExcelUtils.getContent(src, i, 7); //比例
+ String retailPrice = ExcelUtils.getContent(src, i, 8); //零售价
+ String lowPrice = ExcelUtils.getContent(src, i, 9); //最低售价
+ String presetpriceone = ExcelUtils.getContent(src, i, 10); //预计采购价
+ String presetpricetwo = ExcelUtils.getContent(src, i, 11); //销售价
+ if(StringUtil.isNotEmpty(manyUnit.trim())){ //多单位
+ String manyUnitAll = unit + "," + manyUnit + "(1:" + ratio + ")";
+ Long unitId = unitService.getUnitIdByName(manyUnitAll);
+ m.setUnitid(unitId);
+ m.setFirstoutunit(unit); //首选出库单位
+ m.setFirstinunit(manyUnit); //首选入库单位
+ JSONArray arr = new JSONArray();
+ JSONObject basicObj = new JSONObject();
+ basicObj.put("Unit", unit);
+ basicObj.put("RetailPrice", retailPrice);
+ basicObj.put("LowPrice", lowPrice);
+ basicObj.put("PresetPriceOne", presetpriceone);
+ basicObj.put("PresetPriceTwo", presetpricetwo);
+ JSONObject basicObjEx = new JSONObject();
+ basicObjEx.put("basic", basicObj);
+ JSONObject otherObj = new JSONObject();
+ otherObj.put("Unit", manyUnit);
+ otherObj.put("RetailPrice", parsePrice(retailPrice,ratio));
+ otherObj.put("LowPrice", parsePrice(lowPrice,ratio));
+ otherObj.put("PresetPriceOne", parsePrice(presetpriceone,ratio));
+ otherObj.put("PresetPriceTwo", parsePrice(presetpricetwo,ratio));
+ JSONObject otherObjEx = new JSONObject();
+ otherObjEx.put("other", otherObj);
+ arr.add(basicObjEx);
+ arr.add(otherObjEx);
+ m.setPricestrategy(arr.toJSONString());
+ } else {
+ m.setUnit(unit);
+ m.setRetailprice(parseBigDecimalEx(retailPrice));
+ m.setLowprice(parseBigDecimalEx(lowPrice));
+ m.setPresetpriceone(parseBigDecimalEx(presetpriceone));
+ m.setPresetpricetwo(parseBigDecimalEx(presetpricetwo));
+ }
+ String enabled = ExcelUtils.getContent(src, i, 12); //状态
+ m.setEnabled(enabled.equals("1")? true: false);
+ //缓存各个仓库的库存信息
+ Map stockMap = new HashMap();
+ for(int j=1; j<=depotCount;j++) {
+ int col = 12+j;
+ if(col <= src.getColumns()){
+ String depotName = ExcelUtils.getContent(src, 1, col); //获取仓库名称
+ Long depotId = depotService.getIdByName(depotName);
+ if(depotId!=0L){
+ String stockStr = ExcelUtils.getContent(src, i, col);
+ if(StringUtil.isNotEmpty(stockStr)) {
+ stockMap.put(depotId, parseBigDecimalEx(stockStr));
+ }
+ }
+ }
+ }
+ m.setStockMap(stockMap);
+ mList.add(m);
+ }
+ }
logService.insertLog("商品",
new StringBuffer(BusinessConstants.LOG_OPERATION_TYPE_IMPORT).append(mList.size()).append(BusinessConstants.LOG_DATA_UNIT).toString(),
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest());
BaseResponseInfo info = new BaseResponseInfo();
Map data = new HashMap();
try {
- for(Material m: mList) {
- materialMapper.insertSelective(m);
+ Long mId = 0L;
+ for(MaterialWithInitStock m: mList) {
+ //判断该商品是否存在,如果不存在就新增,如果存在就更新
+ List materials = getMaterialListByParam(m.getName(),m.getModel(),m.getColor(),m.getStandard(),
+ m.getMfrs(),m.getUnit(),m.getUnitid());
+ if(materials.size()<=0) {
+ materialMapperEx.insertSelectiveEx(m);
+ mId = m.getId();
+ } else {
+ mId = materials.get(0).getId();
+ String materialJson = JSON.toJSONString(m);
+ Material material = JSONObject.parseObject(materialJson, Material.class);
+ material.setId(mId);
+ materialMapper.updateByPrimaryKeySelective(material);
+ }
+ //给商品初始化库存
+ Map stockMap = m.getStockMap();
+ Long depotId = null;
+ for(Depot depot: depotList){
+ BigDecimal stock = stockMap.get(depot.getId());
+ //先清除再插入
+ MaterialStockExample example = new MaterialStockExample();
+ example.createCriteria().andMaterialIdEqualTo(mId).andDepotIdEqualTo(depot.getId());
+ materialStockMapper.deleteByExample(example);
+ if(stock!=null && stock.compareTo(BigDecimal.ZERO)!=0) {
+ depotId = depot.getId();
+ insertStockByMaterialAndDepot(depotId, mId, stock);
+ }
+ }
}
info.code = 200;
data.put("message", "成功");
} catch (Exception e) {
- JshException.writeFail(logger, e);
e.printStackTrace();
info.code = 500;
data.put("message", e.getMessage());
@@ -319,6 +477,57 @@ public class MaterialService {
return info;
}
+ /**
+ * 根据条件返回产品列表
+ * @param name
+ * @param model
+ * @param color
+ * @param standard
+ * @param mfrs
+ * @param unit
+ * @param unitId
+ * @return
+ */
+ private List getMaterialListByParam(String name, String model, String color,
+ String standard, String mfrs, String unit, Long unitId) {
+ MaterialExample example = new MaterialExample();
+ MaterialExample.Criteria criteria = example.createCriteria();
+ criteria.andNameEqualTo(name).andModelEqualTo(model);
+ if (StringUtil.isNotEmpty(color)) {
+ criteria.andColorEqualTo(color);
+ }
+ if (StringUtil.isNotEmpty(standard)) {
+ criteria.andStandardEqualTo(standard);
+ }
+ if (StringUtil.isNotEmpty(mfrs)) {
+ criteria.andMfrsEqualTo(mfrs);
+ }
+ if (StringUtil.isNotEmpty(unit)) {
+ criteria.andUnitEqualTo(unit);
+ }
+ if (unitId !=null) {
+ criteria.andUnitidEqualTo(unitId);
+ }
+ criteria.andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
+ List list = materialMapper.selectByExample(example);
+ return list;
+ }
+
+ /**
+ * 写入初始库存
+ * @param depotId
+ * @param mId
+ * @param stock
+ */
+ @Transactional(value = "transactionManager", rollbackFor = Exception.class)
+ public void insertStockByMaterialAndDepot(Long depotId, Long mId, BigDecimal stock){
+ MaterialStock materialStock = new MaterialStock();
+ materialStock.setDepotId(depotId);
+ materialStock.setMaterialId(mId);
+ materialStock.setNumber(stock);
+ materialStockMapper.insertSelective(materialStock); //存入初始库存
+ }
+
public List getMaterialEnableSerialNumberList(Map parameterMap)throws Exception {
List list =null;
try{
@@ -387,4 +596,66 @@ public class MaterialService {
return deleteTotal;
}
+
+ public BigDecimal parseBigDecimalEx(String str) throws Exception{
+ if(!StringUtil.isEmpty(str)) {
+ return new BigDecimal(str);
+ } else {
+ return null;
+ }
+ }
+
+ public BigDecimal parsePrice(String price, String ratio) throws Exception{
+ if(StringUtil.isEmpty(price) || StringUtil.isEmpty(ratio)) {
+ return BigDecimal.ZERO;
+ } else {
+ BigDecimal pr=new BigDecimal(price);
+ BigDecimal r=new BigDecimal(ratio);
+ return pr.multiply(r);
+ }
+ }
+
+ /**
+ * 根据产品和仓库获取初始库存
+ * @param materialId
+ * @param depotId
+ * @return
+ */
+ public BigDecimal getInitStock(Long materialId, Long depotId) {
+ BigDecimal stock = BigDecimal.ZERO;
+ MaterialStockExample example = new MaterialStockExample();
+ example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId)
+ .andDeleteFagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
+ List list = materialStockMapper.selectByExample(example);
+ if(list!=null && list.size()>0) {
+ stock = list.get(0).getNumber();
+ }
+ return stock;
+ }
+
+ /**
+ * 根据产品获取初始库存
+ * @param materialId
+ * @return
+ */
+ public BigDecimal getInitStockByMid(Long depotId, Long materialId) {
+ BigDecimal stock = BigDecimal.ZERO;
+ MaterialStockExample example = new MaterialStockExample();
+ if(depotId!=null) {
+ example.createCriteria().andMaterialIdEqualTo(materialId).andDepotIdEqualTo(depotId)
+ .andDeleteFagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
+ } else {
+ example.createCriteria().andMaterialIdEqualTo(materialId)
+ .andDeleteFagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
+ }
+ List list = materialStockMapper.selectByExample(example);
+ if(list!=null && list.size()>0) {
+ for(MaterialStock ms: list) {
+ if(ms!=null) {
+ stock = stock.add(ms.getNumber());
+ }
+ }
+ }
+ return stock;
+ }
}
diff --git a/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java b/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java
index 56bb21b9..0b6b96ea 100644
--- a/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java
+++ b/src/main/java/com/jsh/erp/service/materialCategory/MaterialCategoryService.java
@@ -388,4 +388,19 @@ public class MaterialCategoryService {
deleteTotal= batchDeleteMaterialCategoryByIds(ids);
return deleteTotal;
}
+
+ /**
+ * 根据名称获取类型
+ * @param name
+ */
+ public Long getCategoryIdByName(String name){
+ Long categoryId = 0l;
+ MaterialCategoryExample example = new MaterialCategoryExample();
+ example.createCriteria().andNameEqualTo(name).andStatusNotEqualTo(BusinessConstants.DELETE_TYPE_FORCE);
+ List list = materialCategoryMapper.selectByExample(example);
+ if(list!=null && list.size()>0) {
+ categoryId = list.get(0).getId();
+ }
+ return categoryId;
+ }
}
diff --git a/src/main/java/com/jsh/erp/service/unit/UnitService.java b/src/main/java/com/jsh/erp/service/unit/UnitService.java
index 74ed75b1..5c9c5362 100644
--- a/src/main/java/com/jsh/erp/service/unit/UnitService.java
+++ b/src/main/java/com/jsh/erp/service/unit/UnitService.java
@@ -208,4 +208,19 @@ public class UnitService {
deleteTotal= batchDeleteUnitByIds(ids);
return deleteTotal;
}
+
+ /**
+ * 根据名称获取类型
+ * @param name
+ */
+ public Long getUnitIdByName(String name){
+ Long unitId = 0l;
+ UnitExample example = new UnitExample();
+ example.createCriteria().andUnameEqualTo(name).andDeleteFlagNotEqualTo(BusinessConstants.DELETE_FLAG_DELETED);
+ List list = unitMapper.selectByExample(example);
+ if(list!=null && list.size()>0) {
+ unitId = list.get(0).getId();
+ }
+ return unitId;
+ }
}
diff --git a/src/main/resources/mapper_xml/MaterialMapperEx.xml b/src/main/resources/mapper_xml/MaterialMapperEx.xml
index 1ff82b5d..5731c1b5 100644
--- a/src/main/resources/mapper_xml/MaterialMapperEx.xml
+++ b/src/main/resources/mapper_xml/MaterialMapperEx.xml
@@ -174,5 +174,168 @@
and ifnull(delete_Flag,'0') !='1'
-
+
+ insert into jsh_material
+
+
+ Id,
+
+
+ CategoryId,
+
+
+ Name,
+
+
+ Mfrs,
+
+
+ Packing,
+
+
+ SafetyStock,
+
+
+ Model,
+
+
+ Standard,
+
+
+ Color,
+
+
+ Unit,
+
+
+ Remark,
+
+
+ RetailPrice,
+
+
+ LowPrice,
+
+
+ PresetPriceOne,
+
+
+ PresetPriceTwo,
+
+
+ UnitId,
+
+
+ FirstOutUnit,
+
+
+ FirstInUnit,
+
+
+ PriceStrategy,
+
+
+ Enabled,
+
+
+ OtherField1,
+
+
+ OtherField2,
+
+
+ OtherField3,
+
+
+ enableSerialNumber,
+
+
+ tenant_id,
+
+
+ delete_Flag,
+
+
+
+
+ #{id,jdbcType=BIGINT},
+
+
+ #{categoryid,jdbcType=BIGINT},
+
+
+ #{name,jdbcType=VARCHAR},
+
+
+ #{mfrs,jdbcType=VARCHAR},
+
+
+ #{packing,jdbcType=DECIMAL},
+
+
+ #{safetystock,jdbcType=DECIMAL},
+
+
+ #{model,jdbcType=VARCHAR},
+
+
+ #{standard,jdbcType=VARCHAR},
+
+
+ #{color,jdbcType=VARCHAR},
+
+
+ #{unit,jdbcType=VARCHAR},
+
+
+ #{remark,jdbcType=VARCHAR},
+
+
+ #{retailprice,jdbcType=DECIMAL},
+
+
+ #{lowprice,jdbcType=DECIMAL},
+
+
+ #{presetpriceone,jdbcType=DECIMAL},
+
+
+ #{presetpricetwo,jdbcType=DECIMAL},
+
+
+ #{unitid,jdbcType=BIGINT},
+
+
+ #{firstoutunit,jdbcType=VARCHAR},
+
+
+ #{firstinunit,jdbcType=VARCHAR},
+
+
+ #{pricestrategy,jdbcType=VARCHAR},
+
+
+ #{enabled,jdbcType=BIT},
+
+
+ #{otherfield1,jdbcType=VARCHAR},
+
+
+ #{otherfield2,jdbcType=VARCHAR},
+
+
+ #{otherfield3,jdbcType=VARCHAR},
+
+
+ #{enableserialnumber,jdbcType=VARCHAR},
+
+
+ #{tenantId,jdbcType=BIGINT},
+
+
+ #{deleteFlag,jdbcType=VARCHAR},
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mapper_xml/MaterialStockMapper.xml b/src/main/resources/mapper_xml/MaterialStockMapper.xml
new file mode 100644
index 00000000..9adad88c
--- /dev/null
+++ b/src/main/resources/mapper_xml/MaterialStockMapper.xml
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+
+ id, material_id, depot_id, number, tenant_id, delete_fag
+
+
+
+
+
+ delete from jsh_material_stock
+ where id = #{id,jdbcType=BIGINT}
+
+
+
+ delete from jsh_material_stock
+
+
+
+
+
+
+ insert into jsh_material_stock (id, material_id, depot_id,
+ number, tenant_id, delete_fag
+ )
+ values (#{id,jdbcType=BIGINT}, #{materialId,jdbcType=BIGINT}, #{depotId,jdbcType=BIGINT},
+ #{number,jdbcType=DECIMAL}, #{tenantId,jdbcType=BIGINT}, #{deleteFag,jdbcType=VARCHAR}
+ )
+
+
+
+ insert into jsh_material_stock
+
+
+ id,
+
+
+ material_id,
+
+
+ depot_id,
+
+
+ number,
+
+
+ tenant_id,
+
+
+ delete_fag,
+
+
+
+
+ #{id,jdbcType=BIGINT},
+
+
+ #{materialId,jdbcType=BIGINT},
+
+
+ #{depotId,jdbcType=BIGINT},
+
+
+ #{number,jdbcType=DECIMAL},
+
+
+ #{tenantId,jdbcType=BIGINT},
+
+
+ #{deleteFag,jdbcType=VARCHAR},
+
+
+
+
+
+
+ update jsh_material_stock
+
+
+ id = #{record.id,jdbcType=BIGINT},
+
+
+ material_id = #{record.materialId,jdbcType=BIGINT},
+
+
+ depot_id = #{record.depotId,jdbcType=BIGINT},
+
+
+ number = #{record.number,jdbcType=DECIMAL},
+
+
+ tenant_id = #{record.tenantId,jdbcType=BIGINT},
+
+
+ delete_fag = #{record.deleteFag,jdbcType=VARCHAR},
+
+
+
+
+
+
+
+
+ update jsh_material_stock
+ set id = #{record.id,jdbcType=BIGINT},
+ material_id = #{record.materialId,jdbcType=BIGINT},
+ depot_id = #{record.depotId,jdbcType=BIGINT},
+ number = #{record.number,jdbcType=DECIMAL},
+ tenant_id = #{record.tenantId,jdbcType=BIGINT},
+ delete_fag = #{record.deleteFag,jdbcType=VARCHAR}
+
+
+
+
+
+
+ update jsh_material_stock
+
+
+ material_id = #{materialId,jdbcType=BIGINT},
+
+
+ depot_id = #{depotId,jdbcType=BIGINT},
+
+
+ number = #{number,jdbcType=DECIMAL},
+
+
+ tenant_id = #{tenantId,jdbcType=BIGINT},
+
+
+ delete_fag = #{deleteFag,jdbcType=VARCHAR},
+
+
+ where id = #{id,jdbcType=BIGINT}
+
+
+
+ update jsh_material_stock
+ set material_id = #{materialId,jdbcType=BIGINT},
+ depot_id = #{depotId,jdbcType=BIGINT},
+ number = #{number,jdbcType=DECIMAL},
+ tenant_id = #{tenantId,jdbcType=BIGINT},
+ delete_fag = #{deleteFag,jdbcType=VARCHAR}
+ where id = #{id,jdbcType=BIGINT}
+
+
\ No newline at end of file
diff --git a/src/test/resources/generatorConfig.xml b/src/test/resources/generatorConfig.xml
index cc8718a2..868b1080 100644
--- a/src/test/resources/generatorConfig.xml
+++ b/src/test/resources/generatorConfig.xml
@@ -51,6 +51,7 @@
+