Browse Source

首页 仓库报表 扫码工时调整

chenc 4 years ago
parent
commit
5eafc9756f

+ 27 - 0
src/main/java/org/jeecg/modules/appInterface/controller/FbsWorkingStatisticsController.java

@@ -1275,4 +1275,31 @@ public class FbsWorkingStatisticsController {
 //         System.out.println(getFileBefore("sssss.jpj"));
 	 }
 
+	 /**
+	 * @Author chenchuang
+	 * @Description //TODO 修改扫码时间
+	 * @Date 2021/1/20 11:59
+	 * @Param [fbsWorkingStatistics]
+	 * @return org.jeecg.common.api.vo.Result
+	 */
+	 @PutMapping(value = "/updateTime")
+	 public Result updateTime(@RequestBody FbsWorkingStatistics fbsWorkingStatistics){
+		 Result result =new Result();
+		 if(fbsWorkingStatistics.getFirstTime()==null){
+			 result.error500("上岗时间不能为空");
+		 }
+		 if(fbsWorkingStatistics.getFinalTime()==null){
+			 result.error500("下岗时间不能为空");
+		 }
+		 try {
+			 fbsWorkingStatisticsService.updateTime(fbsWorkingStatistics);
+			 result.success("操作成功");
+		 } catch (Exception e) {
+			 e.printStackTrace();
+			 result.error500("操作失败:"+e.getMessage());
+		 }
+
+		 return result;
+	 }
+
  }

+ 9 - 0
src/main/java/org/jeecg/modules/appInterface/service/IFbsWorkingStatisticsService.java

@@ -32,4 +32,13 @@ public interface IFbsWorkingStatisticsService extends IService<FbsWorkingStatist
     List<FbsWorkingStatistics> getWorkingHours();
 
     List<FbsWorkshopDispatchList> getWorkingHoursGroupProjectName();
+
+    /**
+    * @Author chenchuang
+    * @Description //TODO 修改扫码上下岗时间
+    * @Date 2021/1/20 11:37
+    * @Param []
+    * @return void
+    */
+    void updateTime(FbsWorkingStatistics fbsWorkingStatistics);
 }

+ 44 - 5
src/main/java/org/jeecg/modules/appInterface/service/impl/FbsWorkingStatisticsServiceImpl.java

@@ -5,15 +5,15 @@ import org.jeecg.modules.appInterface.entity.FbsWorkingStatistics;
 import org.jeecg.modules.appInterface.mapper.FbsWorkingStatisticsMapper;
 import org.jeecg.modules.appInterface.service.IFbsWorkingStatisticsService;
 import org.jeecg.modules.fbsWorkshopDispatchList.entity.FbsWorkshopDispatchList;
+import org.jeecg.modules.fbsWorkshopDispatchList.service.IFbsWorkshopDispatchListService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * @Description: 工时统计接口
@@ -22,12 +22,15 @@ import java.util.Map;
  * @version: V1.0
  */
 @Service
-//@DS("multi-datasource1")
+@Transactional
 public class FbsWorkingStatisticsServiceImpl extends ServiceImpl<FbsWorkingStatisticsMapper, FbsWorkingStatistics> implements IFbsWorkingStatisticsService {
 
     @Resource
     FbsWorkingStatisticsMapper fbsWorkingStatisticsMapper;
 
+    @Resource
+    IFbsWorkshopDispatchListService iFbsWorkshopDispatchListService;
+
     @Override
     public Map<String,Object> getByMaterial(String dateString) {
 //        List<FbsWorkingStatistics> fbsWorkingStatisticsList=fbsWorkingStatisticsMapper.getByMaterial(dateString);
@@ -67,4 +70,40 @@ public class FbsWorkingStatisticsServiceImpl extends ServiceImpl<FbsWorkingStati
     public List<FbsWorkshopDispatchList> getWorkingHoursGroupProjectName() {
         return fbsWorkingStatisticsMapper.getWorkingHoursGroupProjectName();
     }
+
+    @Override
+    public void updateTime(FbsWorkingStatistics fbsWorkingStatistics) {
+        BigDecimal workingHoursBefore=new BigDecimal("0.0");
+        workingHoursBefore=workingHoursBefore.add(fbsWorkingStatistics.getWorkingHours());
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        Date firstTime = fbsWorkingStatistics.getFirstTime();
+        Date finalTime = fbsWorkingStatistics.getFinalTime();
+        long diff = finalTime.getTime() - firstTime.getTime();
+        // 计算差多少分钟
+        long min = diff / nm;
+        BigDecimal aa = new BigDecimal(min).divide(new BigDecimal("60"), 2, BigDecimal.ROUND_HALF_UP);
+        if(aa.doubleValue()>8.0){//超过八小时按照8小时计算
+            aa=new BigDecimal("8.0");
+        }
+        fbsWorkingStatistics.setWorkingHours(aa);//时间差
+        fbsWorkingStatisticsMapper.updateById(fbsWorkingStatistics);
+        //获取对应的派工单
+        FbsWorkshopDispatchList fbsWorkshopDispatchList=iFbsWorkshopDispatchListService.getById(fbsWorkingStatistics.getPkWorkshopDispatchList());
+        if(fbsWorkshopDispatchList!=null){
+            BigDecimal manHoursCompleted=getDecimalNew(fbsWorkshopDispatchList.getManHoursCompleted());
+            BigDecimal manHoursCompletedBefore=manHoursCompleted.subtract(workingHoursBefore);
+            BigDecimal manHoursCompletedNow=manHoursCompletedBefore.add(fbsWorkingStatistics.getWorkingHours());
+            fbsWorkshopDispatchList.setManHoursCompleted(manHoursCompletedNow.doubleValue()+"");
+            iFbsWorkshopDispatchListService.updateById(fbsWorkshopDispatchList);
+        }else{
+            throw new RuntimeException("找不到对应的派工单!");
+        }
+    }
+
+    public BigDecimal getDecimalNew(String d){
+        BigDecimal decimal= new BigDecimal(d);
+        return decimal;
+    }
 }

+ 261 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/controller/FbsWarehouseController.java

@@ -0,0 +1,261 @@
+package org.jeecg.modules.fbsWarehouse.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.fbsWarehouse.entity.FbsWarehouse;
+import org.jeecg.modules.fbsWarehouse.service.IFbsWarehouseService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+
+ /**
+ * @Title: Controller
+ * @Description: 仓库报表
+ * @author: jeecg-boot
+ * @date:   2021-01-20
+ * @version: V1.0
+ */
+@RestController
+@RequestMapping("/fbsWarehouse/fbsWarehouse")
+@Slf4j
+public class FbsWarehouseController {
+	@Autowired
+	private IFbsWarehouseService fbsWarehouseService;
+	
+	/**
+	  * 分页列表查询
+	 * @param fbsWarehouse
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<FbsWarehouse>> queryPageList(FbsWarehouse fbsWarehouse,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<FbsWarehouse>> result = new Result<IPage<FbsWarehouse>>();
+		QueryWrapper<FbsWarehouse> queryWrapper = QueryGenerator.initQueryWrapper(fbsWarehouse, req.getParameterMap());
+		queryWrapper.lambda().eq(FbsWarehouse::getDelFlag,"0");
+		Page<FbsWarehouse> page = new Page<FbsWarehouse>(pageNo, pageSize);
+		IPage<FbsWarehouse> pageList = fbsWarehouseService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param fbsWarehouse
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result<FbsWarehouse> add(@RequestBody FbsWarehouse fbsWarehouse) {
+		Result<FbsWarehouse> result = new Result<FbsWarehouse>();
+		try {
+			fbsWarehouseService.save(fbsWarehouse);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			e.printStackTrace();
+			log.info(e.getMessage());
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param fbsWarehouse
+	 * @return
+	 */
+	@PutMapping(value = "/edit")
+	public Result<FbsWarehouse> edit(@RequestBody FbsWarehouse fbsWarehouse) {
+		Result<FbsWarehouse> result = new Result<FbsWarehouse>();
+		FbsWarehouse fbsWarehouseEntity = fbsWarehouseService.getById(fbsWarehouse.getId());
+		if(fbsWarehouseEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = fbsWarehouseService.updateById(fbsWarehouse);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<FbsWarehouse> delete(@RequestParam(name="id",required=true) String id) {
+		Result<FbsWarehouse> result = new Result<FbsWarehouse>();
+		FbsWarehouse fbsWarehouse = fbsWarehouseService.getById(id);
+		if(fbsWarehouse==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = fbsWarehouseService.removeById(id);
+			if(ok) {
+				result.success("删除成功!");
+			}
+		}
+		
+		return result;
+	}
+
+	 /**
+	  *   通过id删除
+	  * @param id
+	  * @return
+	  */
+	 @DeleteMapping(value = "/deleteD")
+	 public Result<FbsWarehouse> deleteD(@RequestParam(name="id",required=true) String id) {
+		 Result<FbsWarehouse> result = new Result<FbsWarehouse>();
+		 FbsWarehouse fbsWarehouse = fbsWarehouseService.getById(id);
+		 if(fbsWarehouse==null) {
+			 result.error500("未找到对应实体");
+		 }else {
+//			 boolean ok = fbsWarehouseService.removeById(id);
+			 fbsWarehouse.setDelFlag("1");
+			 boolean ok = fbsWarehouseService.updateById(fbsWarehouse);
+			 if(ok) {
+				 result.success("删除成功!");
+			 }
+		 }
+
+		 return result;
+	 }
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<FbsWarehouse> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<FbsWarehouse> result = new Result<FbsWarehouse>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.fbsWarehouseService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<FbsWarehouse> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<FbsWarehouse> result = new Result<FbsWarehouse>();
+		FbsWarehouse fbsWarehouse = fbsWarehouseService.getById(id);
+		if(fbsWarehouse==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(fbsWarehouse);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<FbsWarehouse> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              FbsWarehouse fbsWarehouse = JSON.parseObject(deString, FbsWarehouse.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(fbsWarehouse, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<FbsWarehouse> pageList = fbsWarehouseService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "仓库报表列表");
+      mv.addObject(NormalExcelConstants.CLASS, FbsWarehouse.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("仓库报表列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<FbsWarehouse> listFbsWarehouses = ExcelImportUtil.importExcel(file.getInputStream(), FbsWarehouse.class, params);
+              for (FbsWarehouse fbsWarehouseExcel : listFbsWarehouses) {
+                  fbsWarehouseService.save(fbsWarehouseExcel);
+              }
+              return Result.ok("文件导入成功!数据行数:" + listFbsWarehouses.size());
+          } catch (Exception e) {
+              log.error(e.getMessage());
+              return Result.error("文件导入失败!");
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 174 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/entity/FbsWarehouse.java

@@ -0,0 +1,174 @@
+package org.jeecg.modules.fbsWarehouse.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: 仓库报表
+ * @author: jeecg-boot
+ * @date:   2021-01-20
+ * @version: V1.0
+ */
+@Data
+@TableName("fbs_warehouse")
+public class FbsWarehouse implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+	/**仓库主键*/
+	@TableId(type = IdType.UUID)
+	private String id;
+	/**日期*/
+	@Excel(name = "日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date date;
+	/**应到人数*/
+	@Excel(name = "应到人数", width = 15)
+	private java.lang.Integer numberOfPeopleToArrive;
+	/**实到人数*/
+	@Excel(name = "实到人数", width = 15)
+	private java.lang.Integer actualNumberOfPeople;
+	/**请假*/
+	@Excel(name = "请假", width = 15)
+	private java.lang.Integer lleave;
+	/**旷工*/
+	@Excel(name = "旷工", width = 15)
+	private java.lang.Integer absenteeism;
+	/**离职*/
+	@Excel(name = "离职", width = 15)
+	private java.lang.Integer quit;
+	/**出勤工时*/
+	@Excel(name = "出勤工时", width = 15)
+	private java.lang.Double attendanceHours;
+	/**加班人数*/
+	@Excel(name = "加班人数", width = 15)
+	private java.lang.Integer overtimePeople;
+	/**加班工时*/
+	@Excel(name = "加班工时", width = 15)
+	private java.lang.Double overtimeHours;
+	/**加班原因*/
+	@Excel(name = "加班原因", width = 15)
+	private java.lang.String overtimeReason;
+	/**工单配料*/
+	@Excel(name = "工单配料", width = 15)
+	private java.lang.Double workOrderBatching;
+	/**工单配料-生产订单号*/
+	@Excel(name = "工单配料-生产订单号", width = 15)
+	private java.lang.String batchingProductionOrderNumberCode;
+	/**成品收存*/
+	@Excel(name = "成品收存", width = 15)
+	private java.lang.Double storageFinishedProducts;
+	/**成品收存-生产订单号*/
+	@Excel(name = "成品收存-生产订单号", width = 15)
+	private java.lang.String productsProductionOrderNumberCode;
+	/**原材料收存*/
+	@Excel(name = "原材料收存", width = 15)
+	private java.lang.Double storageRawMaterials;
+	/**入库单号*/
+	@Excel(name = "入库单号", width = 15)
+	private java.lang.String stockInNumber;
+	/**研发领用*/
+	@Excel(name = "研发领用", width = 15)
+	private java.lang.Double researchAndDevelopment;
+	/**研发领用-出库单号*/
+	@Excel(name = "研发领用-出库单号", width = 15)
+	private java.lang.String developmentDeliveryOrderNo;
+	/**项目配料*/
+	@Excel(name = "项目配料", width = 15)
+	private java.lang.Double projectIngredients;
+	/**项目配料-出库单号*/
+	@Excel(name = "项目配料-出库单号", width = 15)
+	private java.lang.String projectDeliveryOrderNo;
+	/**项目发货*/
+	@Excel(name = "项目发货", width = 15)
+	private java.lang.Double projectDelivery;
+	/**项目发货-项目名称*/
+	@Excel(name = "项目发货-项目名称", width = 15)
+	private java.lang.String deliveryProjectName;
+	/**项目打包*/
+	@Excel(name = "项目打包", width = 15)
+		private java.lang.Double packProject;
+	/**项目打包-项目名称*/
+	@Excel(name = "项目打包-项目名称", width = 15)
+	private java.lang.String packProjectName;
+	/**装车*/
+	@Excel(name = "装车", width = 15)
+	private java.lang.Double loading;
+	/**装车-项目名称*/
+	@Excel(name = "装车-项目名称", width = 15)
+	private java.lang.String loadingProjectName;
+	/**盘点*/
+	@Excel(name = "盘点", width = 15)
+	private java.lang.Double inventory;
+	/**物料编号*/
+	@Excel(name = "物料编号", width = 15)
+	private java.lang.String itemNumber;
+	/**培训*/
+	@Excel(name = "培训", width = 15)
+	private java.lang.Double train;
+	/**培训-备注*/
+	@Excel(name = "培训-备注", width = 15)
+	private java.lang.String trainMemo;
+	/**会议*/
+	@Excel(name = "会议", width = 15)
+	private java.lang.Double meeting;
+	/**会议-备注*/
+	@Excel(name = "会议-备注", width = 15)
+	private java.lang.String meetingMemo;
+	/**5S*/
+	@Excel(name = "5S", width = 15)
+	private java.lang.Double fiveS;
+	/**5S-备注*/
+	@Excel(name = "5S-备注", width = 15)
+	private java.lang.String fiveSMemo;
+	/**其他*/
+	@Excel(name = "其他", width = 15)
+	private java.lang.Double other;
+	/**其他-备注*/
+	@Excel(name = "其他-备注", width = 15)
+	private java.lang.String otherMemo;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	private java.lang.String memo;
+	/**删除标记0正常1删除*/
+	@Excel(name = "删除标记0正常1删除", width = 15)
+	private java.lang.String delFlag;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	private java.lang.String createBy;
+	/**创建时间*/
+	@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	/**最后修改人*/
+	@Excel(name = "最后修改人", width = 15)
+	private String updateBy;
+	/**最后修改时间*/
+	@Excel(name = "最后修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	/**自定义字段1*/
+	@Excel(name = "自定义字段1", width = 15)
+	private String def1;
+	/**自定义字段2*/
+	@Excel(name = "自定义字段2", width = 15)
+	private String def2;
+	/**自定义字段3*/
+	@Excel(name = "自定义字段3", width = 15)
+	private String def3;
+	/**自定义字段4*/
+	@Excel(name = "自定义字段4", width = 15)
+	private String def4;
+	/**自定义字段5*/
+	@Excel(name = "自定义字段5", width = 15)
+	private String def5;
+}

+ 17 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/mapper/FbsWarehouseMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.fbsWarehouse.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.fbsWarehouse.entity.FbsWarehouse;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 仓库报表
+ * @author: jeecg-boot
+ * @date:   2021-01-20
+ * @version: V1.0
+ */
+public interface FbsWarehouseMapper extends BaseMapper<FbsWarehouse> {
+
+}

+ 5 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/mapper/xml/FbsWarehouseMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.fbsWarehouse.mapper.FbsWarehouseMapper">
+
+</mapper>

+ 14 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/service/IFbsWarehouseService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.fbsWarehouse.service;
+
+import org.jeecg.modules.fbsWarehouse.entity.FbsWarehouse;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 仓库报表
+ * @author: jeecg-boot
+ * @date:   2021-01-20
+ * @version: V1.0
+ */
+public interface IFbsWarehouseService extends IService<FbsWarehouse> {
+
+}

+ 19 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/service/impl/FbsWarehouseServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.fbsWarehouse.service.impl;
+
+import org.jeecg.modules.fbsWarehouse.entity.FbsWarehouse;
+import org.jeecg.modules.fbsWarehouse.mapper.FbsWarehouseMapper;
+import org.jeecg.modules.fbsWarehouse.service.IFbsWarehouseService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 仓库报表
+ * @author: jeecg-boot
+ * @date:   2021-01-20
+ * @version: V1.0
+ */
+@Service
+public class FbsWarehouseServiceImpl extends ServiceImpl<FbsWarehouseMapper, FbsWarehouse> implements IFbsWarehouseService {
+
+}

+ 392 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/vue/FbsWarehouseList.vue

@@ -0,0 +1,392 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="应到人数
+应到人数">
+              <a-input placeholder="请输入应到人数
+应到人数" v-model="queryParam.numberOfPeopleToArrive"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="实到人数">
+              <a-input placeholder="请输入实到人数" v-model="queryParam.actualNumberOfPeople"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="请假">
+              <a-input placeholder="请输入请假" v-model="queryParam.leave"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="旷工">
+              <a-input placeholder="请输入旷工" v-model="queryParam.absenteeism"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="离职">
+              <a-input placeholder="请输入离职" v-model="queryParam.quit"></a-input>
+            </a-form-item>
+          </a-col>
+        </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <fbsWarehouse-modal ref="modalForm" @ok="modalFormOk"></fbsWarehouse-modal>
+  </a-card>
+</template>
+
+<script>
+  import FbsWarehouseModal from './modules/FbsWarehouseModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "FbsWarehouseList",
+    mixins:[JeecgListMixin],
+    components: {
+      FbsWarehouseModal
+    },
+    data () {
+      return {
+        description: '仓库报表管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '应到人数
+应到人数',
+            align:"center",
+            dataIndex: 'numberOfPeopleToArrive'
+           },
+		   {
+            title: '实到人数',
+            align:"center",
+            dataIndex: 'actualNumberOfPeople'
+           },
+		   {
+            title: '请假',
+            align:"center",
+            dataIndex: 'leave'
+           },
+		   {
+            title: '旷工',
+            align:"center",
+            dataIndex: 'absenteeism'
+           },
+		   {
+            title: '离职',
+            align:"center",
+            dataIndex: 'quit'
+           },
+		   {
+            title: '出勤工时',
+            align:"center",
+            dataIndex: 'attendanceHours'
+           },
+		   {
+            title: '加班人数',
+            align:"center",
+            dataIndex: 'overtimePeople'
+           },
+		   {
+            title: '加班工时',
+            align:"center",
+            dataIndex: 'overtimeHours'
+           },
+		   {
+            title: '加班原因',
+            align:"center",
+            dataIndex: 'overtimeReason'
+           },
+		   {
+            title: '工单配料',
+            align:"center",
+            dataIndex: 'workOrderBatching'
+           },
+		   {
+            title: '工单配料-生产订单号',
+            align:"center",
+            dataIndex: 'batchingProductionOrderNumberCode'
+           },
+		   {
+            title: '成品收存',
+            align:"center",
+            dataIndex: 'storageFinishedProducts'
+           },
+		   {
+            title: '成品收存-生产订单号',
+            align:"center",
+            dataIndex: 'productsProductionOrderNumberCode'
+           },
+		   {
+            title: '原材料收存',
+            align:"center",
+            dataIndex: 'storageRawMaterials'
+           },
+		   {
+            title: '入库单号',
+            align:"center",
+            dataIndex: 'stockInNumber'
+           },
+		   {
+            title: '研发领用',
+            align:"center",
+            dataIndex: 'researchAndDevelopment'
+           },
+		   {
+            title: '研发领用-出库单号',
+            align:"center",
+            dataIndex: 'developmentDeliveryOrderNo'
+           },
+		   {
+            title: '项目配料',
+            align:"center",
+            dataIndex: 'projectIngredients'
+           },
+		   {
+            title: '项目配料-出库单号',
+            align:"center",
+            dataIndex: 'projectDeliveryOrderNo'
+           },
+		   {
+            title: '项目发货',
+            align:"center",
+            dataIndex: 'projectDelivery'
+           },
+		   {
+            title: '项目发货-项目名称',
+            align:"center",
+            dataIndex: 'deliveryProjectName'
+           },
+		   {
+            title: '项目打包',
+            align:"center",
+            dataIndex: 'packProject'
+           },
+		   {
+            title: '项目打包-项目名称',
+            align:"center",
+            dataIndex: 'packProjectName'
+           },
+		   {
+            title: '装车',
+            align:"center",
+            dataIndex: 'loading'
+           },
+		   {
+            title: '装车-项目名称',
+            align:"center",
+            dataIndex: 'loadingProjectName'
+           },
+		   {
+            title: '盘点',
+            align:"center",
+            dataIndex: 'inventory'
+           },
+		   {
+            title: '物料编号',
+            align:"center",
+            dataIndex: 'itemNumber'
+           },
+		   {
+            title: '培训',
+            align:"center",
+            dataIndex: 'train'
+           },
+		   {
+            title: '培训-备注',
+            align:"center",
+            dataIndex: 'trainMemo'
+           },
+		   {
+            title: '会议',
+            align:"center",
+            dataIndex: 'meeting'
+           },
+		   {
+            title: '会议-备注',
+            align:"center",
+            dataIndex: 'meetingMemo'
+           },
+		   {
+            title: '5S',
+            align:"center",
+            dataIndex: 'fiveS'
+           },
+		   {
+            title: '5S-备注',
+            align:"center",
+            dataIndex: 'fiveSMemo'
+           },
+		   {
+            title: '其他',
+            align:"center",
+            dataIndex: 'other'
+           },
+		   {
+            title: '其他-备注',
+            align:"center",
+            dataIndex: 'otherMemo'
+           },
+		   {
+            title: '备注',
+            align:"center",
+            dataIndex: 'memo'
+           },
+		   {
+            title: '删除标记0正常1删除',
+            align:"center",
+            dataIndex: 'delFlag'
+           },
+		   {
+            title: '自定义字段1',
+            align:"center",
+            dataIndex: 'def1'
+           },
+		   {
+            title: '自定义字段2',
+            align:"center",
+            dataIndex: 'def2'
+           },
+		   {
+            title: '自定义字段3',
+            align:"center",
+            dataIndex: 'def3'
+           },
+		   {
+            title: '自定义字段4',
+            align:"center",
+            dataIndex: 'def4'
+           },
+		   {
+            title: '自定义字段5',
+            align:"center",
+            dataIndex: 'def5'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/fbsWarehouse/fbsWarehouse/list",
+          delete: "/fbsWarehouse/fbsWarehouse/delete",
+          deleteBatch: "/fbsWarehouse/fbsWarehouse/deleteBatch",
+          exportXlsUrl: "fbsWarehouse/fbsWarehouse/exportXls",
+          importExcelUrl: "fbsWarehouse/fbsWarehouse/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 3px
+  }
+  .ant-card-body .table-operator{
+    margin-bottom: 18px;
+  }
+  .ant-table-tbody .ant-table-row td{
+    padding-top:15px;
+    padding-bottom:15px;
+  }
+  .anty-row-operator button{margin: 0 5px}
+  .ant-btn-danger{background-color: #ffffff}
+
+  .ant-modal-cust-warp{height: 100%}
+  .ant-modal-cust-warp .ant-modal-body{height:calc(100% - 110px) !important;overflow-y: auto}
+  .ant-modal-cust-warp .ant-modal-content{height:90% !important;overflow-y: hidden}
+</style>

+ 372 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/vue/modules/FbsWarehouseModal.vue

@@ -0,0 +1,372 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="应到人数
+应到人数">
+          <a-input-number v-decorator="[ 'numberOfPeopleToArrive', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="实到人数">
+          <a-input-number v-decorator="[ 'actualNumberOfPeople', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="请假">
+          <a-input-number v-decorator="[ 'leave', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="旷工">
+          <a-input-number v-decorator="[ 'absenteeism', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="离职">
+          <a-input-number v-decorator="[ 'quit', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="出勤工时">
+          <a-input-number v-decorator="[ 'attendanceHours', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="加班人数">
+          <a-input-number v-decorator="[ 'overtimePeople', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="加班工时">
+          <a-input-number v-decorator="[ 'overtimeHours', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="加班原因">
+          <a-input placeholder="请输入加班原因" v-decorator="['overtimeReason', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="工单配料">
+          <a-input-number v-decorator="[ 'workOrderBatching', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="工单配料-生产订单号">
+          <a-input placeholder="请输入工单配料-生产订单号" v-decorator="['batchingProductionOrderNumberCode', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="成品收存">
+          <a-input-number v-decorator="[ 'storageFinishedProducts', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="成品收存-生产订单号">
+          <a-input placeholder="请输入成品收存-生产订单号" v-decorator="['productsProductionOrderNumberCode', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="原材料收存">
+          <a-input-number v-decorator="[ 'storageRawMaterials', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="入库单号">
+          <a-input placeholder="请输入入库单号" v-decorator="['stockInNumber', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="研发领用">
+          <a-input-number v-decorator="[ 'researchAndDevelopment', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="研发领用-出库单号">
+          <a-input placeholder="请输入研发领用-出库单号" v-decorator="['developmentDeliveryOrderNo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目配料">
+          <a-input-number v-decorator="[ 'projectIngredients', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目配料-出库单号">
+          <a-input placeholder="请输入项目配料-出库单号" v-decorator="['projectDeliveryOrderNo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目发货">
+          <a-input-number v-decorator="[ 'projectDelivery', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目发货-项目名称">
+          <a-input placeholder="请输入项目发货-项目名称" v-decorator="['deliveryProjectName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目打包">
+          <a-input-number v-decorator="[ 'packProject', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目打包-项目名称">
+          <a-input placeholder="请输入项目打包-项目名称" v-decorator="['packProjectName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="装车">
+          <a-input-number v-decorator="[ 'loading', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="装车-项目名称">
+          <a-input placeholder="请输入装车-项目名称" v-decorator="['loadingProjectName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="盘点">
+          <a-input-number v-decorator="[ 'inventory', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="物料编号">
+          <a-input placeholder="请输入物料编号" v-decorator="['itemNumber', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="培训">
+          <a-input-number v-decorator="[ 'train', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="培训-备注">
+          <a-input placeholder="请输入培训-备注" v-decorator="['trainMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="会议">
+          <a-input-number v-decorator="[ 'meeting', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="会议-备注">
+          <a-input placeholder="请输入会议-备注" v-decorator="['meetingMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="5S">
+          <a-input-number v-decorator="[ 'fiveS', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="5S-备注">
+          <a-input placeholder="请输入5S-备注" v-decorator="['fiveSMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="其他">
+          <a-input-number v-decorator="[ 'other', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="其他-备注">
+          <a-input placeholder="请输入其他-备注" v-decorator="['otherMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="备注">
+          <a-input placeholder="请输入备注" v-decorator="['memo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="删除标记0正常1删除">
+          <a-input placeholder="请输入删除标记0正常1删除" v-decorator="['delFlag', validatorRules.delFlag ]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段1">
+          <a-input placeholder="请输入自定义字段1" v-decorator="['def1', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段2">
+          <a-input placeholder="请输入自定义字段2" v-decorator="['def2', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段3">
+          <a-input placeholder="请输入自定义字段3" v-decorator="['def3', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段4">
+          <a-input placeholder="请输入自定义字段4" v-decorator="['def4', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段5">
+          <a-input placeholder="请输入自定义字段5" v-decorator="['def5', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "FbsWarehouseModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        delFlag:{rules: [{ required: true, message: '请输入删除标记0正常1删除!' }]},
+        },
+        url: {
+          add: "/fbsWarehouse/fbsWarehouse/add",
+          edit: "/fbsWarehouse/fbsWarehouse/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'numberOfPeopleToArrive','actualNumberOfPeople','leave','absenteeism','quit','attendanceHours','overtimePeople','overtimeHours','overtimeReason','workOrderBatching','batchingProductionOrderNumberCode','storageFinishedProducts','productsProductionOrderNumberCode','storageRawMaterials','stockInNumber','researchAndDevelopment','developmentDeliveryOrderNo','projectIngredients','projectDeliveryOrderNo','projectDelivery','deliveryProjectName','packProject','packProjectName','loading','loadingProjectName','inventory','itemNumber','train','trainMemo','meeting','meetingMemo','fiveS','fiveSMemo','other','otherMemo','memo','delFlag','def1','def2','def3','def4','def5'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 379 - 0
src/main/java/org/jeecg/modules/fbsWarehouse/vue/modules/FbsWarehouseModal__Style#Drawer.vue

@@ -0,0 +1,379 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="应到人数
+应到人数">
+          <a-input-number v-decorator="[ 'numberOfPeopleToArrive', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="实到人数">
+          <a-input-number v-decorator="[ 'actualNumberOfPeople', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="请假">
+          <a-input-number v-decorator="[ 'leave', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="旷工">
+          <a-input-number v-decorator="[ 'absenteeism', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="离职">
+          <a-input-number v-decorator="[ 'quit', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="出勤工时">
+          <a-input-number v-decorator="[ 'attendanceHours', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="加班人数">
+          <a-input-number v-decorator="[ 'overtimePeople', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="加班工时">
+          <a-input-number v-decorator="[ 'overtimeHours', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="加班原因">
+          <a-input placeholder="请输入加班原因" v-decorator="['overtimeReason', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="工单配料">
+          <a-input-number v-decorator="[ 'workOrderBatching', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="工单配料-生产订单号">
+          <a-input placeholder="请输入工单配料-生产订单号" v-decorator="['batchingProductionOrderNumberCode', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="成品收存">
+          <a-input-number v-decorator="[ 'storageFinishedProducts', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="成品收存-生产订单号">
+          <a-input placeholder="请输入成品收存-生产订单号" v-decorator="['productsProductionOrderNumberCode', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="原材料收存">
+          <a-input-number v-decorator="[ 'storageRawMaterials', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="入库单号">
+          <a-input placeholder="请输入入库单号" v-decorator="['stockInNumber', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="研发领用">
+          <a-input-number v-decorator="[ 'researchAndDevelopment', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="研发领用-出库单号">
+          <a-input placeholder="请输入研发领用-出库单号" v-decorator="['developmentDeliveryOrderNo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目配料">
+          <a-input-number v-decorator="[ 'projectIngredients', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目配料-出库单号">
+          <a-input placeholder="请输入项目配料-出库单号" v-decorator="['projectDeliveryOrderNo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目发货">
+          <a-input-number v-decorator="[ 'projectDelivery', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目发货-项目名称">
+          <a-input placeholder="请输入项目发货-项目名称" v-decorator="['deliveryProjectName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目打包">
+          <a-input-number v-decorator="[ 'packProject', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="项目打包-项目名称">
+          <a-input placeholder="请输入项目打包-项目名称" v-decorator="['packProjectName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="装车">
+          <a-input-number v-decorator="[ 'loading', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="装车-项目名称">
+          <a-input placeholder="请输入装车-项目名称" v-decorator="['loadingProjectName', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="盘点">
+          <a-input-number v-decorator="[ 'inventory', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="物料编号">
+          <a-input placeholder="请输入物料编号" v-decorator="['itemNumber', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="培训">
+          <a-input-number v-decorator="[ 'train', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="培训-备注">
+          <a-input placeholder="请输入培训-备注" v-decorator="['trainMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="会议">
+          <a-input-number v-decorator="[ 'meeting', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="会议-备注">
+          <a-input placeholder="请输入会议-备注" v-decorator="['meetingMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="5S">
+          <a-input-number v-decorator="[ 'fiveS', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="5S-备注">
+          <a-input placeholder="请输入5S-备注" v-decorator="['fiveSMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="其他">
+          <a-input-number v-decorator="[ 'other', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="其他-备注">
+          <a-input placeholder="请输入其他-备注" v-decorator="['otherMemo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="备注">
+          <a-input placeholder="请输入备注" v-decorator="['memo', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="删除标记0正常1删除">
+          <a-input placeholder="请输入删除标记0正常1删除" v-decorator="['delFlag', validatorRules.delFlag ]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段1">
+          <a-input placeholder="请输入自定义字段1" v-decorator="['def1', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段2">
+          <a-input placeholder="请输入自定义字段2" v-decorator="['def2', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段3">
+          <a-input placeholder="请输入自定义字段3" v-decorator="['def3', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段4">
+          <a-input placeholder="请输入自定义字段4" v-decorator="['def4', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="自定义字段5">
+          <a-input placeholder="请输入自定义字段5" v-decorator="['def5', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "FbsWarehouseModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        delFlag:{rules: [{ required: true, message: '请输入删除标记0正常1删除!' }]},
+        },
+        url: {
+          add: "/fbsWarehouse/fbsWarehouse/add",
+          edit: "/fbsWarehouse/fbsWarehouse/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'numberOfPeopleToArrive','actualNumberOfPeople','leave','absenteeism','quit','attendanceHours','overtimePeople','overtimeHours','overtimeReason','workOrderBatching','batchingProductionOrderNumberCode','storageFinishedProducts','productsProductionOrderNumberCode','storageRawMaterials','stockInNumber','researchAndDevelopment','developmentDeliveryOrderNo','projectIngredients','projectDeliveryOrderNo','projectDelivery','deliveryProjectName','packProject','packProjectName','loading','loadingProjectName','inventory','itemNumber','train','trainMemo','meeting','meetingMemo','fiveS','fiveSMemo','other','otherMemo','memo','delFlag','def1','def2','def3','def4','def5'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>