@@ -1737,7 +1737,7 @@
|
||||
$("#ProjectIdShow").text(depotHeadInfo[10]);
|
||||
$("#NumberShow").text(depotHeadInfo[2]);
|
||||
$("#OperTimeShow").text(depotHeadInfo[4]);
|
||||
$('#OrganIdShow').text(depotHeadInfo[11]);
|
||||
$('#OrganIdShow').text(depotHeadInfo[11]=="undefined"?'':depotHeadInfo[11]);
|
||||
$("#HandsPersonIdShow").text(depotHeadInfo[12]);
|
||||
if(depotHeadInfo[13] && depotHeadInfo[13]!="undefined"){
|
||||
$("#AccountIdShow").text(depotHeadInfo[13]); //结算账户
|
||||
|
||||
@@ -188,30 +188,42 @@
|
||||
pageList: initPageNum,
|
||||
columns: [[
|
||||
{field: 'id', width: 35, align: "center", checkbox: true},
|
||||
{field: 'depotheadId', hidden: true},
|
||||
{field: 'depotHeadType', hidden: true},
|
||||
{
|
||||
title: '操作', field: 'op', align: "center", width: 60, formatter: function (value, rec) {
|
||||
var str = '';
|
||||
var rowInfo = rec.id + 'AaBb' + rec.materialId + 'AaBb' + rec.materialName + 'AaBb' + rec.serialNumber + 'AaBb' + rec.isSell + 'AaBb' + rec.remark
|
||||
+ 'AaBb' + rec.deleteFlag + 'AaBb' + rec.createTime + 'AaBb' + rec.updateTime + 'AaBb' + rec.creator + 'AaBb' + rec.updater
|
||||
+ 'AaBb' + rec.creatorName + 'AaBb' + rec.updaterName;
|
||||
+ 'AaBb' + rec.creatorName + 'AaBb' + rec.updaterName +'AaBb' + rec.depotheadId+'AaBb' + rec.depotHeadNumber +'AaBb' + rec.depotHeadType;
|
||||
str += '<img title="编辑" src="/js/easyui-1.3.5/themes/icons/pencil.png" style="cursor: pointer;" onclick="editSerialNumber(\'' + rowInfo + '\');"/> ';
|
||||
str += '<img title="删除" src="/js/easyui-1.3.5/themes/icons/edit_remove.png" style="cursor: pointer;" onclick="deleteSerialNumber(' + rec.id + ');"/>';
|
||||
return str;
|
||||
}
|
||||
},
|
||||
{title: '商品名称', field: 'materialName', width: 100},
|
||||
{title: '序列号', field: 'serialNumber', width: 200},
|
||||
{title: '已卖出', field: 'isSell', width: 60 , formatter: function (value) {
|
||||
{title: '商品名称', align: "center",field: 'materialName', width: 100},
|
||||
{title: '序列号',align: "center", field: 'serialNumber', width: 200},
|
||||
{title: '单据编号', align: "center", field: 'depotHeadNumber', width: 140,
|
||||
formatter: function (value, row) {
|
||||
if(row.depotHeadNumber){
|
||||
|
||||
return "<a class='n-link' onclick=\"newTab('" + row.depotHeadNumber + "','../materials/bill_detail.html?n=" + row.depotHeadNumber + "&type=" + row.depotHeadType + "','')\">"
|
||||
+ row.depotHeadNumber + "</a>";
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
{title: '已卖出', align: "center", field: 'isSell', width: 60 , formatter: function (value) {
|
||||
return value=='1' ? "是" : "否";
|
||||
}
|
||||
},
|
||||
{title: '已删除', field: 'deleteFlag', width: 60, formatter: function (value) {
|
||||
{title: '已删除', align: "center", field: 'deleteFlag', width: 60, formatter: function (value) {
|
||||
return value=='1' ? "是" : "否";
|
||||
}
|
||||
},
|
||||
{title: '创建时间', field: 'createTime', width: 140,formatter: formatDatebox},
|
||||
{title: '更新时间', field: 'updateTime', width: 140,formatter: formatDatebox},
|
||||
{title: '备注', field: 'remark',width: 300}
|
||||
{title: '创建时间',align: "center", field: 'createTime', width: 140,formatter: formatDatebox},
|
||||
{title: '更新时间', align: "center", field: 'updateTime', width: 140,formatter: formatDatebox},
|
||||
{title: '备注',align: "center", field: 'remark',width: 200}
|
||||
]],
|
||||
toolbar: [
|
||||
{
|
||||
|
||||
@@ -32,10 +32,10 @@ public class ExceptionConstants {
|
||||
public static final int SERIAL_NUMBERE_ALREADY_EXISTS_CODE = 10500000;
|
||||
public static final String SERIAL_NUMBERE_ALREADY_EXISTS_MSG = "序列号已存在";
|
||||
/**序列号不能为为空*/
|
||||
public static final int SERIAL_NUMBERE_NOT_BE_EMPTY_CODE = 10500000;
|
||||
public static final int SERIAL_NUMBERE_NOT_BE_EMPTY_CODE = 10500001;
|
||||
public static final String SERIAL_NUMBERE_NOT_BE_EMPTY_MSG = "序列号不能为为空";
|
||||
/**商品%s下序列号不充足,请补充后重试*/
|
||||
public static final int MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE = 10500000;
|
||||
public static final int MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE = 10500002;
|
||||
public static final String MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG = "商品:%s下序列号不充足,请补充后重试";
|
||||
|
||||
|
||||
@@ -56,6 +56,9 @@ public class ExceptionConstants {
|
||||
//该商品已绑定序列号数量小于等于商品现有库存
|
||||
public static final int MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE = 8000003;
|
||||
public static final String MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG = "该商品已绑定序列号数量大于等于商品现有库存";
|
||||
//商品库存不足
|
||||
public static final int MATERIAL_STOCK_NOT_ENOUGH_CODE = 8000004;
|
||||
public static final String MATERIAL_STOCK_NOT_ENOUGH_MSG = "商品:%s库存不足";
|
||||
|
||||
/**
|
||||
* 标准正常返回/操作成功返回
|
||||
|
||||
@@ -19,6 +19,10 @@ public class SerialNumberEx extends SerialNumber{
|
||||
* 更新者名称
|
||||
* */
|
||||
private String updaterName;
|
||||
/**单据编号*/
|
||||
private String depotHeadNumber;
|
||||
/**单据类型(出库入库)*/
|
||||
private String depotHeadType;
|
||||
|
||||
public String getMaterialName() {
|
||||
return materialName;
|
||||
@@ -43,4 +47,20 @@ public class SerialNumberEx extends SerialNumber{
|
||||
public void setUpdaterName(String updaterName) {
|
||||
this.updaterName = updaterName;
|
||||
}
|
||||
|
||||
public String getDepotHeadNumber() {
|
||||
return depotHeadNumber;
|
||||
}
|
||||
|
||||
public void setDepotHeadNumber(String depotHeadNumber) {
|
||||
this.depotHeadNumber = depotHeadNumber;
|
||||
}
|
||||
|
||||
public String getDepotHeadType() {
|
||||
return depotHeadType;
|
||||
}
|
||||
|
||||
public void setDepotHeadType(String depotHeadType) {
|
||||
this.depotHeadType = depotHeadType;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,13 @@ package com.jsh.erp.service.depotItem;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.jsh.erp.constants.BusinessConstants;
|
||||
import com.jsh.erp.constants.ExceptionConstants;
|
||||
import com.jsh.erp.datasource.entities.*;
|
||||
import com.jsh.erp.datasource.mappers.DepotHeadMapper;
|
||||
import com.jsh.erp.datasource.mappers.DepotItemMapper;
|
||||
import com.jsh.erp.datasource.mappers.DepotItemMapperEx;
|
||||
import com.jsh.erp.datasource.mappers.SerialNumberMapperEx;
|
||||
import com.jsh.erp.exception.BusinessRunTimeException;
|
||||
import com.jsh.erp.service.material.MaterialService;
|
||||
import com.jsh.erp.service.serialNumber.SerialNumberService;
|
||||
import com.jsh.erp.service.user.UserService;
|
||||
@@ -246,8 +248,20 @@ public class DepotItemService {
|
||||
if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())
|
||||
&&!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubtype())){
|
||||
DepotItem depotItem = getDepotItem(tempDeletedJson.getLong("Id"));
|
||||
serialNumberMapperEx.cancelSerialNumber(depotItem.getMaterialid(),depotItem.getHeaderid(),depotItem.getOpernumber().intValue(),
|
||||
new Date(),userInfo==null?null:userInfo.getId());
|
||||
if(depotItem==null){
|
||||
continue;
|
||||
}
|
||||
/**
|
||||
* 判断商品是否开启序列号,开启的收回序列号,未开启的跳过
|
||||
* */
|
||||
Material material= materialService.getMaterial(depotItem.getMaterialid());
|
||||
if(material==null){
|
||||
continue;
|
||||
}
|
||||
if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())){
|
||||
serialNumberMapperEx.cancelSerialNumber(depotItem.getMaterialid(),depotItem.getHeaderid(),depotItem.getOpernumber().intValue(),
|
||||
new Date(),userInfo==null?null:userInfo.getId());
|
||||
}
|
||||
}
|
||||
this.deleteDepotItem(tempDeletedJson.getLong("Id"));
|
||||
}
|
||||
@@ -328,13 +342,34 @@ public class DepotItemService {
|
||||
if (tempInsertedJson.get("MType") != null) {
|
||||
depotItem.setMtype(tempInsertedJson.getString("MType"));
|
||||
}
|
||||
this.insertDepotItemWithObj(depotItem);
|
||||
/**出库时处理序列号*/
|
||||
if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())
|
||||
&&!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubtype())){
|
||||
//查询单据子表中开启序列号的数据列表
|
||||
serialNumberService.checkAndUpdateSerialNumber(depotItem,userInfo);
|
||||
/**
|
||||
* 出库时判断库存是否充足
|
||||
* */
|
||||
if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())){
|
||||
if(depotItem==null){
|
||||
continue;
|
||||
}
|
||||
Material material= materialService.getMaterial(depotItem.getMaterialid());
|
||||
if(material==null){
|
||||
continue;
|
||||
}
|
||||
if(getCurrentInStock(depotItem.getMaterialid())<depotItem.getOpernumber().intValue()){
|
||||
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_STOCK_NOT_ENOUGH_CODE,
|
||||
String.format(ExceptionConstants.MATERIAL_STOCK_NOT_ENOUGH_MSG,material==null?"":material.getName()));
|
||||
}
|
||||
|
||||
/**出库时处理序列号*/
|
||||
if(!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubtype())) {
|
||||
/**
|
||||
* 判断商品是否开启序列号,开启的收回序列号,未开启的跳过
|
||||
* */
|
||||
if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) {
|
||||
//查询单据子表中开启序列号的数据列表
|
||||
serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.insertDepotItemWithObj(depotItem);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,11 +377,23 @@ public class DepotItemService {
|
||||
for (int i = 0; i < updatedJson.size(); i++) {
|
||||
JSONObject tempUpdatedJson = JSONObject.parseObject(updatedJson.getString(i));
|
||||
DepotItem depotItem = this.getDepotItem(tempUpdatedJson.getLong("Id"));
|
||||
if(depotItem==null){
|
||||
continue;
|
||||
}
|
||||
Material material= materialService.getMaterial(depotItem.getMaterialid());
|
||||
if(material==null){
|
||||
continue;
|
||||
}
|
||||
//首先回收序列号
|
||||
if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())
|
||||
&&!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubtype())) {
|
||||
serialNumberMapperEx.cancelSerialNumber(depotItem.getMaterialid(), depotItem.getHeaderid(), depotItem.getOpernumber().intValue(),
|
||||
new Date(),userInfo==null?null:userInfo.getId());
|
||||
/**
|
||||
* 判断商品是否开启序列号,开启的收回序列号,未开启的跳过
|
||||
* */
|
||||
if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) {
|
||||
serialNumberMapperEx.cancelSerialNumber(depotItem.getMaterialid(), depotItem.getHeaderid(), depotItem.getOpernumber().intValue(),
|
||||
new Date(), userInfo == null ? null : userInfo.getId());
|
||||
}
|
||||
}
|
||||
depotItem.setId(tempUpdatedJson.getLong("Id"));
|
||||
depotItem.setMaterialid(tempUpdatedJson.getLong("MaterialId"));
|
||||
@@ -408,13 +455,23 @@ public class DepotItemService {
|
||||
depotItem.setOtherfield4(tempUpdatedJson.getString("OtherField4"));
|
||||
depotItem.setOtherfield5(tempUpdatedJson.getString("OtherField5"));
|
||||
depotItem.setMtype(tempUpdatedJson.getString("MType"));
|
||||
this.updateDepotItemWithObj(depotItem);
|
||||
/**出库时处理序列号*/
|
||||
if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())
|
||||
&&!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubtype())){
|
||||
//查询单据子表中开启序列号的数据列表
|
||||
serialNumberService.checkAndUpdateSerialNumber(depotItem,userInfo);
|
||||
if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(depotHead.getType())){
|
||||
if(getCurrentInStock(depotItem.getMaterialid())<depotItem.getOpernumber().intValue()){
|
||||
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_STOCK_NOT_ENOUGH_CODE,
|
||||
String.format(ExceptionConstants.MATERIAL_STOCK_NOT_ENOUGH_MSG,material==null?"":material.getName()));
|
||||
}
|
||||
if(!BusinessConstants.SUB_TYPE_TRANSFER.equals(depotHead.getSubtype())) {
|
||||
/**
|
||||
* 判断商品是否开启序列号,开启的收回序列号,未开启的跳过
|
||||
* */
|
||||
if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) {
|
||||
//查询单据子表中开启序列号的数据列表
|
||||
serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.updateDepotItemWithObj(depotItem);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@@ -439,5 +496,16 @@ public class DepotItemService {
|
||||
}
|
||||
return unitName;
|
||||
}
|
||||
/**
|
||||
* 查询商品当前库存数量是否充足,
|
||||
*
|
||||
* */
|
||||
public int getCurrentInStock(Long materialId){
|
||||
//入库数量
|
||||
int inSum = findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId);
|
||||
//出库数量
|
||||
int outSum = findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId);
|
||||
return (inSum-outSum);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,14 +6,17 @@
|
||||
<result column="materialName" jdbcType="VARCHAR" property="materialName" />
|
||||
<result column="creatorName" jdbcType="VARCHAR" property="creatorName" />
|
||||
<result column="updaterName" jdbcType="VARCHAR" property="updaterName" />
|
||||
<result column="depotHeadNumber" jdbcType="VARCHAR" property="depotHeadNumber" />
|
||||
<result column="depotHeadType" jdbcType="VARCHAR" property="depotHeadType" />
|
||||
</resultMap>
|
||||
<select id="selectByConditionSerialNumber" resultMap="SerialNumberExBaseResultMap">
|
||||
select
|
||||
ser.id, ser.material_Id, ser.serial_Number, ser.is_Sell, ser.remark, ser.delete_Flag, ser.create_Time,
|
||||
ser.update_Time,mat.name as materialName,null as creator,null as updater,null as creatorName,
|
||||
null as updaterName,ser.depothead_Id
|
||||
null as updaterName,ser.depothead_Id, dh.number as depotHeadNumber,concat(dh.SubType,dh.Type) as depotHeadType
|
||||
FROM jsh_serial_number ser
|
||||
left JOIN jsh_material mat on mat.id = ser.material_Id
|
||||
left join jsh_material mat on mat.id = ser.material_Id
|
||||
left join jsh_depothead dh on dh.id= ser.depothead_Id
|
||||
where 1=1
|
||||
<if test="serialNumber != null">
|
||||
<bind name="serialNumber" value="'%' + _parameter.serialNumber + '%'" />
|
||||
|
||||
Reference in New Issue
Block a user