Commit e4b1e93e sunke

物料维护界面导出所有数据

运行统计界面报警删除
已在库位中提示信息添加线别
条码设置,出库策略移入系统菜单
MiniStock时间可在系统设置页面进行配置
轻工单页面出库后不需要再次选择线体
操作界面出库流程修改:选择单个物料后弹出输入工号框进行验证

单独出库增加线别和在库时间展示,去除供应商
保存产品后自动进入下一个新增产品页面
出库授权码只允许使用当前登陆用户
1 个父辈 90a52008
正在显示 22 个修改的文件 包含 120 行增加68 行删除
2020-12-23 13:36:09 INFO [BarcodeRule.java:394] - 准备发送到ministock
2020-12-23 13:37:26 INFO [BarcodeRule.java:394] - 准备发送到ministock
2021-03-03 09:09:50 INFO [BarcodeRule.java:52] - 开始解析二维码规则:1@2@3@PN@5@6@7@8@9@10@xxPRODATEyyyyMMdd@xxxEXPDATEyyyyMMdd@13@14@15@16@17@RI@xQTYxxxxxx@20@21@22@23
2021-03-03 09:09:50 INFO [BarcodeRule.java:77] - 分割符为:@长度为:23
2021-03-03 09:09:50 INFO [BarcodeRule.java:81] - partNumber: 为{name='PN', index=3, prefix='', suffix=''}
2021-03-03 09:09:50 INFO [BarcodeRule.java:94] - produceDate: 为{name='PRODATE', index=10, prefix='xx', suffix='yyyyMMdd'}
2021-03-03 09:09:50 INFO [BarcodeRule.java:96] - expireDate: 为{name='EXPDATE', index=11, prefix='xxx', suffix='yyyyMMdd'}
2021-03-03 09:09:50 INFO [BarcodeRule.java:83] - reelId: 为{name='RI', index=17, prefix='', suffix=''}
2021-03-03 09:09:50 INFO [BarcodeRule.java:88] - quantity: 为{name='QTY', index=18, prefix='x', suffix='xxxxxx'}
2021-03-03 09:09:50 INFO [BarcodeRule.java:220] - 开始解析条码[[)>@06@12S0002@P1267370498@1PGCM31CR71E475KA51K@31PGCM31CR71E475KA51K@12V690588124@10VJPN-IA@2P@20P@6D20210114@14D20220714@30PY@Z1@K0@16K0@V97294419@3SS2871011499X9@Q6000NAR000@20T1@1TIA1107LX5@2T@1Z@@]
......@@ -132,7 +132,7 @@ public class Settings extends BaseMongoBean {
/**
* 备份周期
*/
private int backupHours = 0;
private int backupHours = 10;
/**
* 维护周期
......
......@@ -71,8 +71,18 @@ public class ComponentManagerImpl implements IComponentManager {
{
log.debug("Search components with Query " + query.toString());
pageList.setList(componentDao.findByQuery(query, pageList.getPageNumber(), pageList.getObjectsPerPage()));
pageList.setFullListSize(componentDao.countByQuery(query));
int sizePerPage = pageList.getObjectsPerPage();
int totalSize = componentDao.countByQuery(query);
pageList.setFullListSize(totalSize);
int pageNumber = pageList.getPageNumber();
if(pageNumber == -1){
sizePerPage = totalSize;
pageNumber = 1;
}
pageList.setList(componentDao.findByQuery(query, pageNumber, sizePerPage));
log.debug("Search returns " + pageList.getFullListSize() + " components");
return pageList;
}
......
......@@ -18,7 +18,7 @@ import javax.validation.Valid;
@Controller
@RequestMapping("/barcode/barcodeSettings.html")
@RequestMapping("/system/barcodeSettings.html")
public class BarcodeSettingsController extends SettingsController {
......
......@@ -7,6 +7,7 @@ import com.myproject.bean.search.PageList;
import com.myproject.manager.IComponentManager;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.FileUpload;
import org.displaytag.tags.TableTagParameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -89,8 +90,13 @@ public class ComponentSearchController extends BaseSearchController {
request.setAttribute("type", componentType);
}
PageList pageList = searchCriteria.getPageList();
if (request.getParameter(TableTagParameters.PARAMETER_EXPORTING) != null){
pageList.setPageNumber(-1);
}
query.with(new Sort(Sort.Direction.DESC, "updateDate"));
searchCriteria.setPageList(componentmanager.findByQuery(query, searchCriteria.getPageList()));
searchCriteria.setPageList(componentmanager.findByQuery(query, pageList));
//model.addAttribute("searchResult", searchCriteria.getPageList());
// return new ModelAndView(getSuccessView(), model.asMap());
......
......@@ -28,6 +28,7 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.FileOutputStream;
......@@ -91,7 +92,7 @@ public class ComponentUpdateController extends BaseUpdateController{
@RequestMapping(method = RequestMethod.POST)
public String submit(@Valid Component component, BindingResult result,
HttpServletRequest request) throws Exception {
HttpServletRequest request, HttpServletResponse response) throws Exception {
if(result.hasErrors()) {
return getSuccessView();
} else {
......@@ -149,7 +150,11 @@ public class ComponentUpdateController extends BaseUpdateController{
}
}
saveMessage(request, getText("component.saveSuccess", request.getLocale()));
break;
//return "/component/componentSearch.html";
//break;
response.sendRedirect(request.getContextPath() + "/component/componentUpdate.html");
//return StorageConstants.COMPONENT_SEARCH_VIEW;
return null;
case StorageConstants.DELETE:
componentmanager.delete(component);
saveMessage(request, getText("component.deleteSuccess", request.getLocale()));
......
......@@ -32,7 +32,6 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Controller
......@@ -135,7 +134,8 @@ public class SzShelfController extends BaseController {
private void sendToMiniStock(){
try{
//2个小时还在库中的,发送到MiniStock
List<StoragePos> posListToSend = storagePosManager.findBeforePutinTime(10);
int miniStockHours = dataCache.getSettings().getBackupHours();
List<StoragePos> posListToSend = storagePosManager.findBeforePutinTime(miniStockHours);
sendToMiniStock(posListToSend);
}catch (Exception e){
log.error("发送到MiniStock出错",e);
......@@ -492,30 +492,30 @@ public class SzShelfController extends BaseController {
@ResponseBody
public String outFromShelf(HttpServletRequest request){
final String cid = request.getParameter("cid");
String partnumber = request.getParameter("pn");
String opUser = request.getParameter("opUser");
if(Strings.isNullOrEmpty(opUser)){
String outPosId = request.getParameter("outPosId");
String authCode = request.getParameter("opUser");
if(Strings.isNullOrEmpty(authCode)){
return getText("shelf.msg.emptyEmployeeNo",request.getLocale(),"请输入工号");
}
User user = userManager.findByAuthCode(opUser);
User user = StorageDataController.getLoginUser();
if(user == null){
return getText("shelf.msg.noPermission",request.getLocale(),"无权执行此操作");
}
if(partnumber != null){
partnumber = partnumber.trim();
}
Storage storage = dataCache.getStorage(cid);
if(storage == null){
String msg = getText("shelf.msg.notFound",request.getLocale(),"未找到料架");
return msg;
return getText("shelf.msg.noPermission",request.getLocale(),"无权执行此操作,请重新登陆");
}else{
if(!user.getAuthCode().equals(authCode)){
return getText("shelf.msg.authCodeError",request.getLocale(),"授权码错误");
}
}
String storageId = storage.getId();
String areaId = storage.getAreaId();
StorageConstants.CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
Collection<String> excludePosIds = taskService.excludePosIds(areaId);
StoragePos pos = storagePosManager.findPartNumberPos(storageId,partnumber,excludePosIds, checkoutType);
StoragePos pos = storagePosManager.get(outPosId);
if(pos != null){
Storage storage = dataCache.getStorage(cid);
if(storage == null){
String msg = getText("shelf.msg.notFound",request.getLocale(),"未找到料架");
return msg;
}else if(!storage.getId().equals(pos.getStorageId())){
return getText("shelf.msg.noPermission",request.getLocale(),"无权执行此操作,该物料不属于该料架");
}
log.info(pos.getBarcode().getBarcode() + " 从["+pos.getPosName()+"]手动出库,点亮对应库位");
int delayCloseTime = 10000;
......@@ -527,7 +527,7 @@ public class SzShelfController extends BaseController {
}
openAndCloseLights(storage,posNames,delayCloseTime,color);
taskService.addTaskToFinished(pos,null,opUser);
taskService.addTaskToFinished(pos,null,authCode);
return "OK"+getText("shelf.msg.outOk",new String[]{pos.getShortPosName()},request.getLocale(),"操作成功,请从库位["+pos.getPosName()+"]中取出物料");
}else{
......@@ -649,7 +649,9 @@ public class SzShelfController extends BaseController {
}
posName = posName.substring(1);
}
return getText("shelf.msg.alreadyInPos",new String[]{inPos.getShortPosName()},request.getLocale(),"该物料已在库位["+posName+"]中");
String lineName = inPos.getBarcode().getLineInfoStr();
String inName = lineName +"(" + inPos.getShortPosName() + ")";
return getText("shelf.msg.alreadyInPos",new String[]{inName},request.getLocale(),"该物料已在["+posName+"]中");
}
String putInColor = "red";
......@@ -676,7 +678,7 @@ public class SzShelfController extends BaseController {
//线别信息不一致
if(Strings.isNullOrEmpty(lineInfoStr)){
log.error("["+packageId+"]线别信息与配置不一致");
return "n"+getText("shelf.msg.erroLine",new String[]{ecall.getSmtLineNo()}, request.getLocale(),"该物料是"+ecall.getSmtLineNo()+"物料,如确认入库请选择对应线别");
return "n"+getText("shelf.msg.erroLine",new String[]{ecall.getSmtLineNo()}, request.getLocale(),"该物料是"+ecall.getSmtLineNo()+"线物料,如确认入库请选择对应线别");
}
}
}else{
......@@ -787,6 +789,14 @@ public class SzShelfController extends BaseController {
}
}
@RequestMapping("/service/store/shelfInventory")
@ResponseBody
public List<StoragePos> shelfInventory(HttpServletRequest request) {
String cid = request.getParameter("cid");
String storageId = dataCache.getStorage(cid).getId();
return storagePosManager.findNotEmptyByStorageId(storageId);
}
@RequestMapping("/service/store/testNet")
@ResponseBody
public String testNet(HttpServletRequest request) {
......
......@@ -8,6 +8,7 @@ import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.storage.BaseSearchController;
import org.displaytag.properties.SortOrderEnum;
import org.displaytag.tags.TableTagParameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
......@@ -70,15 +71,20 @@ public class DataLogSearchController extends BaseSearchController {
criteria.and("partNumber").regex(pattern);
}
query.addCriteria(criteria);
PageList pageList = searchCriteria.getPageList();
if(pageList.getSortCriterion().equals("id")){
pageList.setSortCriterion("updateDate");
pageList.setSortDirection(SortOrderEnum.DESCENDING);
searchCriteria.setPageList(pageList);
}
searchCriteria.setPageList(dataLogDao.findByQuery(query, searchCriteria.getPageList()));
if (request.getParameter(TableTagParameters.PARAMETER_EXPORTING) != null){
pageList.setPageNumber(-1);
}
searchCriteria.setPageList(dataLogDao.findByQuery(query, pageList));
return SUCCESS_VIEW;
}
......
......@@ -15,7 +15,7 @@ import javax.validation.Valid;
@Controller
@RequestMapping("/workOrder/checkOutSettings.html")
@RequestMapping("/system/checkOutSettings.html")
public class CheckOutSettingsController extends SettingsController {
......
......@@ -304,6 +304,7 @@ settings.pcbEmail.everyday=Everyday
settings.pcbEmail.reminder=Remind
settings.pcbEmail.reminderDay=Before Due
settings.remind.deadday=days dead metiral remind
settings.miniStock.hours=hours to MiniStock
settings.pcbEmail.expire=PCB expiration
settings.pcbEmail.adress=Emails (seperated by ;)
barCodeSettings.rule=Barcode Rules
......
......@@ -409,4 +409,5 @@ settings.restore.warning=Warning\: This operation cannot be undone. \!\!\!
settings.restore.confirm=Would you like to proceed?
settings.restore.success=Operation succeeded
checkout.sucess=Add task list successn
settings.remind.deadday=days dead metiral remind
\ No newline at end of file
settings.remind.deadday=days dead metiral remind
settings.miniStock.hours=hours to MiniStock
\ No newline at end of file
......@@ -366,4 +366,5 @@ settings.restore.warning=\u8B66\u544A\:\u8FD8\u539F\u540E,\u7CFB\u7EDF\u5C06\u8F
settings.restore.confirm=\u786E\u5B9A\u8981\u8FD8\u539F\u5230\u6B64\u7248\u672C
settings.restore.success=\u64CD\u4F5C\u6210\u529F
checkout.sucess=\u52A0\u5165\u51FA\u5E93\u4EFB\u52A1\u5217\u8868\u6210\u529F
settings.remind.deadday=\u5929\u524D\u5446\u6EDE\u7269\u6599\u63D0\u9192
\ No newline at end of file
settings.remind.deadday=\u5929\u524D\u5446\u6EDE\u7269\u6599\u63D0\u9192
settings.miniStock.hours=\u5C0F\u65F6\u524D\u7269\u6599\u53D1\u9001\u5230MiniStock
\ No newline at end of file
......@@ -361,11 +361,12 @@ shelf.employeeNo=Employee No.
shelf.msg.opSucess=Operation complete
shelf.msg.notFound=Shelf not found.
shelf.msg.emptyEmployeeNo=Employee No. is required.
shelf.msg.noPermission=No permission to operate.
shelf.msg.noPermission=No permission to operate, please relogin.
shelf.msg.authCodeError=The auth code is error.
shelf.msg.outOk=Please take out the material from the location [{0}]
shelf.msg.outError=No material is found.
shelf.msg.noLine=The line information is not found, please select the line if confirmed.
shelf.msg.erroLine=The material is for {0}, please select the line if confirmed.
shelf.msg.erroLine=The material is for Line {0}, please select the line if confirmed.
shelf.msg.alreadyInPos=The material is already exists in [{0}]
shelf.msg.inOk=Please put the material in the location [{0}]
shelf.msg.inMergeOk=Please merge the location [{0}], then put in the material.
......
......@@ -360,11 +360,12 @@ shelf.employeeNo=Employee No.
shelf.msg.opSucess=Operation complete
shelf.msg.notFound=Shelf not found.
shelf.msg.emptyEmployeeNo=Employee No. is required.
shelf.msg.noPermission=No permission to operate.
shelf.msg.noPermission=No permission to operate, please relogin.
shelf.msg.authCodeError=The auth code is error.
shelf.msg.outOk=Please take out the material from the location [{0}]
shelf.msg.outError=No material is found.
shelf.msg.noLine=The line information is not found, please select the line if confirmed.
shelf.msg.erroLine=The material is for {0}, please select the line if confirmed.
shelf.msg.erroLine=The material is for Line {0}, please select the line if confirmed.
shelf.msg.alreadyInPos=The material is already exists in [{0}]
shelf.msg.inOk=Please put the material in the location [{0}]
shelf.msg.inMergeOk=Please merge the location [{0}], then put in the material.
......
......@@ -360,11 +360,12 @@ shelf.employeeNo=\u5458\u5DE5\u5DE5\u53F7
shelf.msg.opSucess=\u64CD\u4F5C\u5B8C\u6210
shelf.msg.notFound=\u672A\u627E\u5230\u6599\u67B6
shelf.msg.emptyEmployeeNo=\u8BF7\u8F93\u5165\u5DE5\u53F7
shelf.msg.noPermission=\u65E0\u6743\u6267\u884C\u6B64\u64CD\u4F5C
shelf.msg.noPermission=\u65E0\u6743\u6267\u884C\u6B64\u64CD\u4F5C,\u8BF7\u91CD\u65B0\u767B\u9646
shelf.msg.authCodeError=\u6388\u6743\u7801\u9519\u8BEF
shelf.msg.outOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u4ECE\u5E93\u4F4D[{0}]\u4E2D\u53D6\u51FA\u7269\u6599
shelf.msg.outError=\u64CD\u4F5C\u5931\u8D25,\u672A\u627E\u5230\u53EF\u4EE5\u51FA\u5E93\u7684\u7269\u6599
shelf.msg.noLine=\u672A\u67E5\u5230\u8BE5\u7269\u6599\u7684\u7EBF\u522B\u4FE1\u606F,\u5982\u786E\u8BA4\u5165\u5E93\u8BF7\u9009\u62E9\u5BF9\u5E94\u7EBF\u522B
shelf.msg.erroLine=\u8BE5\u7269\u6599\u662F{0}\u7269\u6599,\u5982\u786E\u8BA4\u5165\u5E93\u8BF7\u9009\u62E9\u5BF9\u5E94\u7EBF\u522B
shelf.msg.erroLine=\u8BE5\u7269\u6599\u662F{0}\u7EBF\u7269\u6599,\u5982\u786E\u8BA4\u5165\u5E93\u8BF7\u9009\u62E9\u5BF9\u5E94\u7EBF\u522B
shelf.msg.alreadyInPos=\u8BE5\u7269\u6599\u5DF2\u5728\u5E93\u4F4D[{0}]\u4E2D
shelf.msg.inOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u653E\u5165\u5E93\u4F4D[{0}]
shelf.msg.inMergeOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u5408\u5E76\u5E93\u4F4D[{0}]\u5E76\u653E\u5165\u6599\u76D8
......
......@@ -94,11 +94,15 @@
<div class="table-scrollable">
<display:table name="searchCriteria.pageList" cellspacing="0" cellpadding="0" requestURI="componentSearch.html?type=${type}"
sort="external"
defaultsort="1" class="table table-striped table-bordered table-hover" export="false" id="component">
defaultsort="1" class="table table-striped table-bordered table-hover" export="true" id="component">
<%--<display:column property="name" titleKey="component.name"/>--%>
<display:column titleKey="component.partNumber">
<display:setProperty name="export.csv.filename" value="components.csv" />
<display:column titleKey="component.partNumber" media="html">
<a href="${ctx}/component/componentUpdate.html?type=${component.type}&id=${component.id}">${component.partNumber}</a>
</display:column>
<display:column titleKey="component.partNumber" media="csv">
${component.partNumber}
</display:column>
<display:column property="provider" titleKey="component.provider"/>
<display:column titleKey="component.plate.size">
${component.plateSize} x ${component.height}
......
......@@ -287,7 +287,8 @@
$("#btn"+ids[i]).parent().parent().attr("class","hide");
}
$.post("${ctx}/service/store/clearInactionPos", {pids: posId}, function (data) {
window.location.href="";
//window.location.href="";
$("#btn"+ids[i]).parent().parent().attr("class","hide");
});
}
......
......@@ -71,17 +71,6 @@
<a href="#" onclick="cancelTask('${dataLog.id}')"><fmt:message key="button.cancel"/></a>
</c:if>
</display:column>
<display:column titleKey="dataLog.orderSource" sortable="true" sortProperty="sourceName" media="html">
${dataLog.sourceStr}
</display:column>
<display:column titleKey="dataLog.batch" sortable="true" sortProperty="batchInfo" property="batchInfo" media="html"/>
<%--<display:column titleKey="产品工程"></display:column>--%>
<%--<display:column titleKey="产品代号"></display:column>--%>
<%--<display:column titleKey="产品印制板代号"></display:column>--%>
<%--<display:column titleKey="印制板编号"></display:column>--%>
<%--<display:column titleKey="代料名称"></display:column>--%>
<%--<display:column titleKey="代料型号"></display:column>--%>
<%--<display:column titleKey="代料单"></display:column>--%>
<display:column property="operator" titleKey="操作人" sortable="true" sortProperty="operator"/>
<display:column titleKey="dataLog.date" sortable="true" sortProperty="updateDate">
<fmt:formatDate value="${dataLog.updateDate}" pattern="yyyy-MM-dd HH:mm"/>
......
......@@ -39,6 +39,12 @@
<span class="input-group-addon"><fmt:message key="settings.remind.deadday"/></span>
</div>
</div>
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<form:input path="backupHours" cssClass="form-control input-small"/>
<span class="input-group-addon"><fmt:message key="settings.miniStock.hours"/></span>
</div>
</div>
</div>
<div class="portlet-title">
......
......@@ -52,11 +52,7 @@
<%--</a>--%>
<%--</li>--%>
<li class="classic-menu-dropdown">
<a href="${ctx}/workOrder/checkOutSettings.html" name="workOrder">
<fmt:message key="menu.outRule"/><span class="selected"></span>
</a>
</li>
</security:authorize>
</ul>
</security:authorize>
......@@ -89,12 +85,6 @@
<fmt:message key="menu.barCode.search"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/barcode/barcodeSettings.html" name="barcode">
<fmt:message key="menu.barCode.settings"/><span class="selected"></span>
</a>
</li>
</ul>
</security:authorize>
......@@ -151,6 +141,17 @@
</security:authorize>
<li class="classic-menu-dropdown">
<a href="${ctx}/system/barcodeSettings.html" name="system">
<fmt:message key="menu.barCode.settings"/><span class="selected"></span>
</a>
</li>
<li class="classic-menu-dropdown">
<a href="${ctx}/system/checkOutSettings.html" name="system">
<fmt:message key="menu.outRule"/><span class="selected"></span>
</a>
</li>
<security:authorize ifAnyGranted="ROLE_MANAGE_ROLE,ROLE_MANAGE_USER">
<li class="classic-menu-dropdown">
<a href="${ctx}/system/storageSearch.html" name="system">
......@@ -158,6 +159,8 @@
</a>
</li>
</security:authorize>
</ul>
</div>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!