批量添加序列号
This commit is contained in:
@@ -97,3 +97,6 @@
|
|||||||
.icon-page-excel{
|
.icon-page-excel{
|
||||||
background:url('icons/page_excel.png') no-repeat center center;
|
background:url('icons/page_excel.png') no-repeat center center;
|
||||||
}
|
}
|
||||||
|
.icon-basket_add{
|
||||||
|
background:url('icons/basket_add.png') no-repeat center center;
|
||||||
|
}
|
||||||
BIN
erp_web/js/easyui-1.3.5/themes/icons/basket_add.png
Normal file
BIN
erp_web/js/easyui-1.3.5/themes/icons/basket_add.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 752 B |
@@ -87,12 +87,59 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="dlg-buttons">
|
<div id="dlg-buttons">
|
||||||
<a href="javascript:void(0)" id="saveSerialNumber" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
|
<a href="javascript:void(0)" id="saveSerialNumber" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
|
||||||
<a href="javascript:void(0)" id="cancelSerialNumber" class="easyui-linkbutton" iconCls="icon-cancel"
|
<a href="javascript:void(0)" id="cancelSerialNumber" class="easyui-linkbutton" iconCls="icon-cancel"
|
||||||
onclick="javascript:$('#serialNumberDlg').dialog('close')">取消</a>
|
onclick="javascript:$('#serialNumberDlg').dialog('close')">取消</a>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="batAddSerialNumberDlg" class="easyui-dialog" style="width:860px;height:420px;padding:10px 20px"
|
||||||
|
closed="true" buttons="#bat-dlg-buttons" modal="true" collapsible="false" closable="true">
|
||||||
|
<form id="batAddserialNumberFM" method="post" novalidate>
|
||||||
|
<div id="batAddtt" class="easyui-tabs" style="width:800px;height:320px;">
|
||||||
|
<div title="批量自定义序列号" style="padding:20px;">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td style="width:60px; height:30px;">商品名称</td>
|
||||||
|
<td style="padding:5px;width:180px;">
|
||||||
|
<input name="materialName" id="batAddMaterialName" class="easyui-validatebox"
|
||||||
|
data-options="required:true,validType:'length[2,30]'"
|
||||||
|
style="width: 180px;height: 20px"/>
|
||||||
|
</td>
|
||||||
|
<td style="width:80px;">序列号前缀</td>
|
||||||
|
<td style="padding:5px;width:180px;">
|
||||||
|
<input name="serialNumber" id="batAddSerialNumberInput" class="easyui-validatebox"
|
||||||
|
data-options="required:true,validType:'length[1,30]'"
|
||||||
|
style="width: 180px;height: 20px"/>
|
||||||
|
</td>
|
||||||
|
<td style="width:200px;"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width:80px;">序列号数量</td>
|
||||||
|
<td style="padding:5px;width:180px;">
|
||||||
|
<input name="batAddTotal" id="batAddTotal" class="easyui-numberbox"
|
||||||
|
data-options="min:0,max:10000"
|
||||||
|
style="width: 180px;height: 20px"/>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="height:30px;">备注</td>
|
||||||
|
<td style="padding:5px" colspan="3">
|
||||||
|
<textarea name="remark" id="batAddremark" rows="2" cols="2" placeholder="暂无备注信息"
|
||||||
|
style="width: 468px; height:40px;"></textarea>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div id="bat-dlg-buttons">
|
||||||
|
<a href="javascript:void(0)" id="batAddSerialNumberBtn" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
|
||||||
|
<a href="javascript:void(0)" id="batCancelSerialNumberBtn" class="easyui-linkbutton" iconCls="icon-cancel"
|
||||||
|
onclick="javascript:$('#batAddSerialNumberDlg').dialog('close')">取消</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@@ -153,8 +200,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: '商品名称', field: 'materialName', width: 100},
|
{title: '商品名称', field: 'materialName', width: 100},
|
||||||
{title: '序列号', field: 'serialNumber', width: 80},
|
{title: '序列号', field: 'serialNumber', width: 200},
|
||||||
{title: '已卖出', field: 'isSell', width: 150 , formatter: function (value) {
|
{title: '已卖出', field: 'isSell', width: 60 , formatter: function (value) {
|
||||||
return value=='1' ? "是" : "否";
|
return value=='1' ? "是" : "否";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -184,6 +231,15 @@
|
|||||||
batDeleteSerialNumber();
|
batDeleteSerialNumber();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'-',
|
||||||
|
{
|
||||||
|
id: 'batAddSerialNumber',
|
||||||
|
text: '批量添加',
|
||||||
|
iconCls: 'icon-basket_add',
|
||||||
|
handler: function () {
|
||||||
|
batAddSerialNumber();
|
||||||
|
}
|
||||||
|
},
|
||||||
],
|
],
|
||||||
onLoadError: function () {
|
onLoadError: function () {
|
||||||
$.messager.alert('页面加载提示', '页面加载异常,请稍后再试!', 'error');
|
$.messager.alert('页面加载提示', '页面加载异常,请稍后再试!', 'error');
|
||||||
@@ -489,6 +545,70 @@
|
|||||||
|
|
||||||
return dt.format("yyyy-MM-dd hh:mm:ss"); //扩展的Date的format方法(上述插件实现)
|
return dt.format("yyyy-MM-dd hh:mm:ss"); //扩展的Date的format方法(上述插件实现)
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 批量添加序列号
|
||||||
|
* */
|
||||||
|
function batAddSerialNumber(){
|
||||||
|
$('#batAddSerialNumberDlg').dialog('open').dialog('setTitle', '<img src="/js/easyui-1.3.5/themes/icons/edit_add.png"/> 批量添加序列号信息');
|
||||||
|
$(".window-mask").css({width: webW, height: webH});
|
||||||
|
$('#batAddMaterialName').val('');
|
||||||
|
$('#batAddSerialNumberInput').val('');
|
||||||
|
$('#batAddTotal').val('100');
|
||||||
|
$('#batAddremark').val('');
|
||||||
|
url = '/serialNumber/batAddSerialNumber';
|
||||||
|
}
|
||||||
|
//保存信息
|
||||||
|
$("#batAddSerialNumberBtn").off("click").on("click", function () {
|
||||||
|
if (!$('#batAddMaterialName').val()) {
|
||||||
|
$.messager.alert('提示', '商品名称不能为空!', 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!$('#batAddSerialNumberInput').val()) {
|
||||||
|
$.messager.alert('提示', '序列号前缀不能为空!', 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!$('#batAddTotal').val()) {
|
||||||
|
$.messager.alert('提示', '序列号数量不能为空!', 'warning');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var materialName=$('#batAddMaterialName').val();
|
||||||
|
var serialNumberPrefix=$('#batAddSerialNumberInput').val();
|
||||||
|
var batAddTotal= $('#batAddTotal').val();
|
||||||
|
var remark=$('#batAddremark').val();
|
||||||
|
$.ajax({
|
||||||
|
type: "post",
|
||||||
|
url: url,
|
||||||
|
dataType: "json",
|
||||||
|
async: false,
|
||||||
|
data: ({
|
||||||
|
materialName:materialName,
|
||||||
|
serialNumberPrefix:serialNumberPrefix,
|
||||||
|
batAddTotal:batAddTotal,
|
||||||
|
remark:remark
|
||||||
|
}),
|
||||||
|
success: function(res) {
|
||||||
|
if(res){
|
||||||
|
if(res.code!=200){
|
||||||
|
$.messager.alert('提示', res.msg, 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(res.code === 200) {
|
||||||
|
$('#batAddSerialNumberDlg').dialog('close');
|
||||||
|
//加载完以后重新初始化
|
||||||
|
var opts = $("#tableData").datagrid('options');
|
||||||
|
showSerialNumberDetails(opts.pageNumber, opts.pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
//此处添加错误处理
|
||||||
|
error: function () {
|
||||||
|
$.messager.alert('提示', '保存序列化信息异常,请稍后再试!', 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ public class BusinessConstants {
|
|||||||
public static final String SUB_TYPE_RETAIL = "零售";
|
public static final String SUB_TYPE_RETAIL = "零售";
|
||||||
public static final String SUB_TYPE_SALES = "销售";
|
public static final String SUB_TYPE_SALES = "销售";
|
||||||
public static final String SUB_TYPE_TRANSFER = "调拨";
|
public static final String SUB_TYPE_TRANSFER = "调拨";
|
||||||
|
/**
|
||||||
|
* 批量插入sql时最大的数据条数
|
||||||
|
* */
|
||||||
|
public static final int BATCH_INSERT_MAX_NUMBER = 500;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -88,6 +88,27 @@ public class SerialNumberController {
|
|||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* create by: cjl
|
||||||
|
* description:
|
||||||
|
*批量添加序列号
|
||||||
|
* create time: 2019/1/29 15:11
|
||||||
|
* @Param: materialName
|
||||||
|
* @Param: serialNumberPrefix
|
||||||
|
* @Param: batAddTotal
|
||||||
|
* @Param: remark
|
||||||
|
* @return java.lang.Object
|
||||||
|
*/
|
||||||
|
@PostMapping("/serialNumber/batAddSerialNumber")
|
||||||
|
@ResponseBody
|
||||||
|
public Object batAddSerialNumber(@RequestParam("materialName") String materialName, @RequestParam("serialNumberPrefix") String serialNumberPrefix,
|
||||||
|
@RequestParam("batAddTotal") Integer batAddTotal,@RequestParam("remark") String remark){
|
||||||
|
|
||||||
|
JSONObject result = ExceptionConstants.standardSuccess();
|
||||||
|
serialNumberService.batAddSerialNumber(materialName,serialNumberPrefix,batAddTotal,remark);
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -56,5 +56,8 @@ public interface SerialNumberMapperEx {
|
|||||||
* and depothead_Id='depotheadId' and is_Sell !='0' and delete_Flag !='1' {limit 0,count}
|
* and depothead_Id='depotheadId' and is_Sell !='0' and delete_Flag !='1' {limit 0,count}
|
||||||
* */
|
* */
|
||||||
int cancelSerialNumber(@Param("materialId")Long materialId, @Param("depotheadId")Long depotheadId, @Param("count")Integer count, @Param("updateTime") Date updateTime,@Param("updater") Long updater);
|
int cancelSerialNumber(@Param("materialId")Long materialId, @Param("depotheadId")Long depotheadId, @Param("count")Integer count, @Param("updateTime") Date updateTime,@Param("updater") Long updater);
|
||||||
|
/**
|
||||||
|
* 批量添加序列号
|
||||||
|
* */
|
||||||
|
int batAddSerialNumber(@Param("list") List<SerialNumberEx> list);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -207,6 +208,38 @@ public class SerialNumberService {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* create by: cjl
|
||||||
|
* description:
|
||||||
|
* 根据商品名称判断商品名称是否有效
|
||||||
|
* create time: 2019/1/23 17:04
|
||||||
|
* @Param: materialName
|
||||||
|
* @return Long 满足使用条件的商品的id
|
||||||
|
*/
|
||||||
|
public Long checkMaterialName(String materialName){
|
||||||
|
if(StringUtil.isNotEmpty(materialName)) {
|
||||||
|
List<Material> mlist = materialMapperEx.findByMaterialName(materialName);
|
||||||
|
if (mlist == null || mlist.size() < 1) {
|
||||||
|
//商品名称不存在
|
||||||
|
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE,
|
||||||
|
ExceptionConstants.MATERIAL_NOT_EXISTS_MSG);
|
||||||
|
}
|
||||||
|
if (mlist.size() > 1) {
|
||||||
|
//商品信息不唯一
|
||||||
|
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE,
|
||||||
|
ExceptionConstants.MATERIAL_NOT_ONLY_MSG);
|
||||||
|
|
||||||
|
}
|
||||||
|
//获得唯一商品
|
||||||
|
if (BusinessConstants.ENABLE_SERIAL_NUMBER_NOT_ENABLED.equals(mlist.get(0).getEnableSerialNumber())) {
|
||||||
|
//商品未开启序列号
|
||||||
|
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE,
|
||||||
|
ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG);
|
||||||
|
}
|
||||||
|
return mlist.get(0).getId();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* create by: cjl
|
* create by: cjl
|
||||||
* description:
|
* description:
|
||||||
@@ -219,29 +252,11 @@ public class SerialNumberService {
|
|||||||
* @return Long 满足使用条件的商品的id
|
* @return Long 满足使用条件的商品的id
|
||||||
*/
|
*/
|
||||||
public Long getSerialNumberMaterialIdByMaterialName(String materialName){
|
public Long getSerialNumberMaterialIdByMaterialName(String materialName){
|
||||||
if(StringUtil.isNotEmpty(materialName)){
|
if(StringUtil.isNotEmpty(materialName)){
|
||||||
List<Material> mlist = materialMapperEx.findByMaterialName(materialName);
|
|
||||||
if(mlist==null||mlist.size()<1){
|
|
||||||
//商品名称不存在
|
|
||||||
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_EXISTS_CODE,
|
|
||||||
ExceptionConstants.MATERIAL_NOT_EXISTS_MSG);
|
|
||||||
}
|
|
||||||
if(mlist.size()>1){
|
|
||||||
//商品信息不唯一
|
|
||||||
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ONLY_CODE,
|
|
||||||
ExceptionConstants.MATERIAL_NOT_ONLY_MSG);
|
|
||||||
|
|
||||||
}
|
|
||||||
//获得唯一商品
|
|
||||||
if(BusinessConstants.ENABLE_SERIAL_NUMBER_NOT_ENABLED.equals(mlist.get(0).getEnableSerialNumber())){
|
|
||||||
//商品未开启序列号
|
|
||||||
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE,
|
|
||||||
ExceptionConstants.MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG);
|
|
||||||
}
|
|
||||||
//计算商品库存和目前占用的可用序列号数量关系
|
//计算商品库存和目前占用的可用序列号数量关系
|
||||||
//库存=入库-出库
|
//库存=入库-出库
|
||||||
//入库数量
|
//入库数量
|
||||||
Long materialId=mlist.get(0).getId();
|
Long materialId=checkMaterialName(materialName);
|
||||||
int inSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId);
|
int inSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId);
|
||||||
//出库数量
|
//出库数量
|
||||||
int outSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId);
|
int outSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId);
|
||||||
@@ -316,6 +331,47 @@ public class SerialNumberService {
|
|||||||
return serialNumberMapperEx.cancelSerialNumber(materialId,depotheadId,count,new Date(),user==null?null:user.getId());
|
return serialNumberMapperEx.cancelSerialNumber(materialId,depotheadId,count,new Date(),user==null?null:user.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create by: cjl
|
||||||
|
* description:
|
||||||
|
*批量添加序列号
|
||||||
|
* create time: 2019/1/29 15:11
|
||||||
|
* @Param: materialName
|
||||||
|
* @Param: serialNumberPrefix
|
||||||
|
* @Param: batAddTotal
|
||||||
|
* @Param: remark
|
||||||
|
* @return java.lang.Object
|
||||||
|
*/
|
||||||
|
public void batAddSerialNumber(String materialName, String serialNumberPrefix, Integer batAddTotal, String remark) {
|
||||||
|
if(StringUtil.isNotEmpty(materialName)){
|
||||||
|
//查询商品id
|
||||||
|
Long materialId = checkMaterialName(materialName);
|
||||||
|
List<SerialNumberEx> list=null;
|
||||||
|
//当前用户
|
||||||
|
User userInfo=userService.getCurrentUser();
|
||||||
|
Long userId=userInfo==null?null:userInfo.getId();
|
||||||
|
Date date = new Date();
|
||||||
|
Long million=date.getTime();
|
||||||
|
int insertNum=0;
|
||||||
|
StringBuffer prefixBuf=new StringBuffer(serialNumberPrefix).append(million);
|
||||||
|
do{
|
||||||
|
list=new ArrayList<SerialNumberEx>();
|
||||||
|
int forNum = BusinessConstants.BATCH_INSERT_MAX_NUMBER>=batAddTotal?batAddTotal:BusinessConstants.BATCH_INSERT_MAX_NUMBER;
|
||||||
|
for(int i=0;i<forNum;i++){
|
||||||
|
insertNum++;
|
||||||
|
SerialNumberEx each=new SerialNumberEx();
|
||||||
|
each.setMaterialId(materialId);
|
||||||
|
each.setCreator(userId);
|
||||||
|
each.setCreateTime(date);
|
||||||
|
each.setUpdater(userId);
|
||||||
|
each.setUpdateTime(date);
|
||||||
|
each.setRemark(remark);
|
||||||
|
each.setSerialNumber(new StringBuffer(prefixBuf.toString()).append(insertNum).toString());
|
||||||
|
list.add(each);
|
||||||
|
}
|
||||||
|
serialNumberMapperEx.batAddSerialNumber(list);
|
||||||
|
batAddTotal -= BusinessConstants.BATCH_INSERT_MAX_NUMBER;
|
||||||
|
}while(batAddTotal>0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,6 +204,18 @@
|
|||||||
)
|
)
|
||||||
</if>
|
</if>
|
||||||
</update>
|
</update>
|
||||||
|
<insert id="batAddSerialNumber"
|
||||||
|
useGeneratedKeys="true" keyProperty="id" keyColumn="id">
|
||||||
|
insert into jsh_serial_number
|
||||||
|
(material_Id, serial_Number, is_Sell, remark,delete_Flag,
|
||||||
|
create_Time, creator,update_Time, updater)
|
||||||
|
values
|
||||||
|
<foreach collection='list' item='each' separator=','>
|
||||||
|
(#{each.materialId},#{each.serialNumber},'0',#{each.remark},'0',
|
||||||
|
#{each.createTime},#{each.creator},#{each.updateTime},#{each.updater}
|
||||||
|
)
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user