Browse Source

feat:车辆费用报销,物料档案,物料入库,物料库存,固定资产入库,固定资产查询

shenji 1 year ago
parent
commit
cd837eacf6
53 changed files with 3587 additions and 6 deletions
  1. 4 6
      jeecg-boot/jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActivitiModelController.java
  2. 7 0
      jeecg-boot/jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/TbTableInfoController.java
  3. 171 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/AssetController.java
  4. 261 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/AssetInController.java
  5. 171 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/AssetInDetailController.java
  6. 261 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/CarfareController.java
  7. 171 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/CarfareDetailController.java
  8. 171 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MaterialController.java
  9. 261 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MaterialInController.java
  10. 155 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MaterialInDetailController.java
  11. 156 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/Asset.java
  12. 86 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/AssetIn.java
  13. 148 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/AssetInDetail.java
  14. 80 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/Carfare.java
  15. 125 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/CarfareDetail.java
  16. 90 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/Material.java
  17. 78 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MaterialIn.java
  18. 110 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MaterialInDetail.java
  19. 19 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/AssetInDetailMapper.java
  20. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/AssetInMapper.java
  21. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/AssetMapper.java
  22. 20 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/CarfareDetailMapper.java
  23. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/CarfareMapper.java
  24. 20 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MaterialInDetailMapper.java
  25. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MaterialInMapper.java
  26. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MaterialMapper.java
  27. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/AssetInDetailMapper.xml
  28. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/AssetInMapper.xml
  29. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/AssetMapper.xml
  30. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/CarfareDetailMapper.xml
  31. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/CarfareMapper.xml
  32. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MaterialInDetailMapper.xml
  33. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MaterialInMapper.xml
  34. 5 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MaterialMapper.xml
  35. 16 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IAssetInDetailService.java
  36. 40 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IAssetInService.java
  37. 14 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IAssetService.java
  38. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/ICarfareDetailService.java
  39. 40 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/ICarfareService.java
  40. 17 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMaterialInDetailService.java
  41. 40 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMaterialInService.java
  42. 14 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMaterialService.java
  43. 27 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/AssetInDetailServiceImpl.java
  44. 91 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/AssetInServiceImpl.java
  45. 19 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/AssetServiceImpl.java
  46. 28 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/CarfareDetailServiceImpl.java
  47. 82 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/CarfareServiceImpl.java
  48. 64 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MaterialInDetailServiceImpl.java
  49. 86 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MaterialInServiceImpl.java
  50. 19 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MaterialServiceImpl.java
  51. 88 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/AssetInPage.java
  52. 82 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/CarfarePage.java
  53. 80 0
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/MaterialInPage.java

+ 4 - 6
jeecg-boot/jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActivitiModelController.java

@@ -21,14 +21,10 @@ import org.activiti.engine.repository.ProcessDefinition;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Task;
 import org.activiti.image.ProcessDiagramGenerator;
-import org.apache.shiro.SecurityUtils;
-import org.checkerframework.checker.units.qual.A;
-import org.jeecg.activitiRewrite.entity.Impl.ModelReEntity;
-import org.jeecg.activitiRewrite.entity.ModelRe;
+import org.apache.commons.lang.StringUtils;
 import org.jeecg.activitiRewrite.service.RepositoryReService;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
-import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.activiti.entity.ActNode;
 import org.jeecg.modules.activiti.entity.ActReModel;
 import org.jeecg.modules.activiti.entity.ActZprocess;
@@ -93,7 +89,9 @@ public class ActivitiModelController {
 //        }
 //        List<Model> models = modelQuery.orderByCreateTime().desc().list();
         ActReModel actReModel=new ActReModel();
-        actReModel.setName(keyWord);
+        if (StringUtils.isNotBlank(keyWord)) {
+            actReModel.setName("%"+keyWord+"%");
+        }
         actReModel.setPkOrg(orgCode);//公司id
 
         List<ActReModel> list=actReModelService.getList(actReModel);

+ 7 - 0
jeecg-boot/jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/TbTableInfoController.java

@@ -48,12 +48,19 @@ public class TbTableInfoController {
         if(StringUtils.isNotBlank(text)){
             tbTableInfo.setText(null);
         }
+        String businessTable=tbTableInfo.getBusinessTable();
+        if(StringUtils.isNotBlank(businessTable)){
+            tbTableInfo.setBusinessTable(null);
+        }
         QueryWrapper<TbTableInfo> queryWrapper = QueryGenerator.initQueryWrapper(tbTableInfo, req.getParameterMap());
 //        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
 //        queryWrapper.lambda().eq(TbTableInfo::getPkOrg,sysUser.getOrgCode());
         if(StringUtils.isNotBlank(text)){
             queryWrapper.lambda().like(TbTableInfo::getText,text);
         }
+        if(StringUtils.isNotBlank(businessTable)){
+            queryWrapper.lambda().like(TbTableInfo::getBusinessTable,businessTable);
+        }
         queryWrapper.lambda().eq(TbTableInfo::getDelFlag,'0');
         queryWrapper.lambda().orderByDesc(TbTableInfo::getCreateTime);
         Page<TbTableInfo> page = new Page<TbTableInfo>(pageNo, pageSize);

+ 171 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/AssetController.java

@@ -0,0 +1,171 @@
+package org.jeecg.modules.oa.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+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.oa.entity.Asset;
+import org.jeecg.modules.oa.service.IAssetService;
+
+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.jeecg.common.system.base.controller.JeecgController;
+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;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 固定资产
+ * @Author: jeecg-boot
+ * @Date:   2023-05-26
+ * @Version: V1.0
+ */
+@Api(tags="固定资产")
+@RestController
+@RequestMapping("/oa/asset")
+@Slf4j
+public class AssetController extends JeecgController<Asset, IAssetService> {
+	@Autowired
+	private IAssetService assetService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param asset
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "固定资产-分页列表查询")
+	@ApiOperation(value="固定资产-分页列表查询", notes="固定资产-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(Asset asset,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<Asset> queryWrapper = QueryGenerator.initQueryWrapper(asset, req.getParameterMap());
+		Page<Asset> page = new Page<Asset>(pageNo, pageSize);
+		IPage<Asset> pageList = assetService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param asset
+	 * @return
+	 */
+	@AutoLog(value = "固定资产-添加")
+	@ApiOperation(value="固定资产-添加", notes="固定资产-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody Asset asset) {
+		assetService.save(asset);
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param asset
+	 * @return
+	 */
+	@AutoLog(value = "固定资产-编辑")
+	@ApiOperation(value="固定资产-编辑", notes="固定资产-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody Asset asset) {
+		assetService.updateById(asset);
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产-通过id删除")
+	@ApiOperation(value="固定资产-通过id删除", notes="固定资产-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		assetService.removeById(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "固定资产-批量删除")
+	@ApiOperation(value="固定资产-批量删除", notes="固定资产-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.assetService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产-通过id查询")
+	@ApiOperation(value="固定资产-通过id查询", notes="固定资产-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		Asset asset = assetService.getById(id);
+		if(asset==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(asset);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param asset
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, Asset asset) {
+        return super.exportXls(request, asset, Asset.class, "固定资产");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, Asset.class);
+    }
+
+}

+ 261 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/AssetInController.java

@@ -0,0 +1,261 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+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.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import org.jeecg.modules.oa.entity.AssetIn;
+import org.jeecg.modules.oa.vo.AssetInPage;
+import org.jeecg.modules.oa.service.IAssetInService;
+import org.jeecg.modules.oa.service.IAssetInDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+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 com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 固定资产入库
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@Api(tags="固定资产入库")
+@RestController
+@RequestMapping("/oa/assetIn")
+@Slf4j
+public class AssetInController {
+	@Autowired
+	private IAssetInService assetInService;
+	@Autowired
+	private IAssetInDetailService assetInDetailService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param assetIn
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库-分页列表查询")
+	@ApiOperation(value="固定资产入库-分页列表查询", notes="固定资产入库-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(AssetIn assetIn,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<AssetIn> queryWrapper = QueryGenerator.initQueryWrapper(assetIn, req.getParameterMap());
+		Page<AssetIn> page = new Page<AssetIn>(pageNo, pageSize);
+		IPage<AssetIn> pageList = assetInService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param assetInPage
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库-添加")
+	@ApiOperation(value="固定资产入库-添加", notes="固定资产入库-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody AssetInPage assetInPage) {
+		AssetIn assetIn = new AssetIn();
+		BeanUtils.copyProperties(assetInPage, assetIn);
+		assetInService.saveMain(assetIn, assetInPage.getAssetInDetailList());
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param assetInPage
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库-编辑")
+	@ApiOperation(value="固定资产入库-编辑", notes="固定资产入库-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody AssetInPage assetInPage) {
+		AssetIn assetIn = new AssetIn();
+		BeanUtils.copyProperties(assetInPage, assetIn);
+		AssetIn assetInEntity = assetInService.getById(assetIn.getId());
+		if(assetInEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		assetInService.updateMain(assetIn, assetInPage.getAssetInDetailList());
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库-通过id删除")
+	@ApiOperation(value="固定资产入库-通过id删除", notes="固定资产入库-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		assetInService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库-批量删除")
+	@ApiOperation(value="固定资产入库-批量删除", notes="固定资产入库-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.assetInService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库-通过id查询")
+	@ApiOperation(value="固定资产入库-通过id查询", notes="固定资产入库-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		AssetIn assetIn = assetInService.getById(id);
+		if(assetIn==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(assetIn);
+
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细集合-通过id查询")
+	@ApiOperation(value="固定资产入库明细集合-通过id查询", notes="固定资产入库明细-通过id查询")
+	@GetMapping(value = "/queryAssetInDetailByMainId")
+	public Result<?> queryAssetInDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<AssetInDetail> assetInDetailList = assetInDetailService.selectByMainId(id);
+		return Result.ok(assetInDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param assetIn
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AssetIn assetIn) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<AssetIn> queryWrapper = QueryGenerator.initQueryWrapper(assetIn, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<AssetIn> queryList = assetInService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<AssetIn> assetInList = new ArrayList<AssetIn>();
+      if(oConvertUtils.isEmpty(selections)) {
+          assetInList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          assetInList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<AssetInPage> pageList = new ArrayList<AssetInPage>();
+      for (AssetIn main : assetInList) {
+          AssetInPage vo = new AssetInPage();
+          BeanUtils.copyProperties(main, vo);
+          List<AssetInDetail> assetInDetailList = assetInDetailService.selectByMainId(main.getId());
+          vo.setAssetInDetailList(assetInDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "固定资产入库列表");
+      mv.addObject(NormalExcelConstants.CLASS, AssetInPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("固定资产入库数据", "导出人:"+sysUser.getRealname(), "固定资产入库"));
+      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<AssetInPage> list = ExcelImportUtil.importExcel(file.getInputStream(), AssetInPage.class, params);
+              for (AssetInPage page : list) {
+                  AssetIn po = new AssetIn();
+                  BeanUtils.copyProperties(page, po);
+                  assetInService.saveMain(po, page.getAssetInDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 171 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/AssetInDetailController.java

@@ -0,0 +1,171 @@
+package org.jeecg.modules.oa.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+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.oa.entity.AssetInDetail;
+import org.jeecg.modules.oa.service.IAssetInDetailService;
+
+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.jeecg.common.system.base.controller.JeecgController;
+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;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 固定资产入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@Api(tags="固定资产入库明细")
+@RestController
+@RequestMapping("/oa/assetInDetail")
+@Slf4j
+public class AssetInDetailController extends JeecgController<AssetInDetail, IAssetInDetailService> {
+	@Autowired
+	private IAssetInDetailService assetInDetailService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param assetInDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细-分页列表查询")
+	@ApiOperation(value="固定资产入库明细-分页列表查询", notes="固定资产入库明细-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(AssetInDetail assetInDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<AssetInDetail> queryWrapper = QueryGenerator.initQueryWrapper(assetInDetail, req.getParameterMap());
+		Page<AssetInDetail> page = new Page<AssetInDetail>(pageNo, pageSize);
+		IPage<AssetInDetail> pageList = assetInDetailService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param assetInDetail
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细-添加")
+	@ApiOperation(value="固定资产入库明细-添加", notes="固定资产入库明细-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody AssetInDetail assetInDetail) {
+		assetInDetailService.save(assetInDetail);
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param assetInDetail
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细-编辑")
+	@ApiOperation(value="固定资产入库明细-编辑", notes="固定资产入库明细-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody AssetInDetail assetInDetail) {
+		assetInDetailService.updateById(assetInDetail);
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细-通过id删除")
+	@ApiOperation(value="固定资产入库明细-通过id删除", notes="固定资产入库明细-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		assetInDetailService.removeById(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细-批量删除")
+	@ApiOperation(value="固定资产入库明细-批量删除", notes="固定资产入库明细-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.assetInDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "固定资产入库明细-通过id查询")
+	@ApiOperation(value="固定资产入库明细-通过id查询", notes="固定资产入库明细-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		AssetInDetail assetInDetail = assetInDetailService.getById(id);
+		if(assetInDetail==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(assetInDetail);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param assetInDetail
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AssetInDetail assetInDetail) {
+        return super.exportXls(request, assetInDetail, AssetInDetail.class, "固定资产入库明细");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AssetInDetail.class);
+    }
+
+}

+ 261 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/CarfareController.java

@@ -0,0 +1,261 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+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.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.oa.entity.CarfareDetail;
+import org.jeecg.modules.oa.entity.Carfare;
+import org.jeecg.modules.oa.vo.CarfarePage;
+import org.jeecg.modules.oa.service.ICarfareService;
+import org.jeecg.modules.oa.service.ICarfareDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+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 com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 车辆费用报销
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Api(tags="车辆费用报销")
+@RestController
+@RequestMapping("/oa/carfare")
+@Slf4j
+public class CarfareController {
+	@Autowired
+	private ICarfareService carfareService;
+	@Autowired
+	private ICarfareDetailService carfareDetailService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param carfare
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销-分页列表查询")
+	@ApiOperation(value="车辆费用报销-分页列表查询", notes="车辆费用报销-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(Carfare carfare,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<Carfare> queryWrapper = QueryGenerator.initQueryWrapper(carfare, req.getParameterMap());
+		Page<Carfare> page = new Page<Carfare>(pageNo, pageSize);
+		IPage<Carfare> pageList = carfareService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param carfarePage
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销-添加")
+	@ApiOperation(value="车辆费用报销-添加", notes="车辆费用报销-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody CarfarePage carfarePage) {
+		Carfare carfare = new Carfare();
+		BeanUtils.copyProperties(carfarePage, carfare);
+		carfareService.saveMain(carfare, carfarePage.getCarfareDetailList());
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param carfarePage
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销-编辑")
+	@ApiOperation(value="车辆费用报销-编辑", notes="车辆费用报销-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody CarfarePage carfarePage) {
+		Carfare carfare = new Carfare();
+		BeanUtils.copyProperties(carfarePage, carfare);
+		Carfare carfareEntity = carfareService.getById(carfare.getId());
+		if(carfareEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		carfareService.updateMain(carfare, carfarePage.getCarfareDetailList());
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销-通过id删除")
+	@ApiOperation(value="车辆费用报销-通过id删除", notes="车辆费用报销-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		carfareService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销-批量删除")
+	@ApiOperation(value="车辆费用报销-批量删除", notes="车辆费用报销-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.carfareService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销-通过id查询")
+	@ApiOperation(value="车辆费用报销-通过id查询", notes="车辆费用报销-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		Carfare carfare = carfareService.getById(id);
+		if(carfare==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(carfare);
+
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细集合-通过id查询")
+	@ApiOperation(value="车辆费用报销明细集合-通过id查询", notes="车辆费用报销明细-通过id查询")
+	@GetMapping(value = "/queryCarfareDetailByMainId")
+	public Result<?> queryCarfareDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<CarfareDetail> carfareDetailList = carfareDetailService.selectByMainId(id);
+		return Result.ok(carfareDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param carfare
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, Carfare carfare) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<Carfare> queryWrapper = QueryGenerator.initQueryWrapper(carfare, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<Carfare> queryList = carfareService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<Carfare> carfareList = new ArrayList<Carfare>();
+      if(oConvertUtils.isEmpty(selections)) {
+          carfareList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          carfareList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<CarfarePage> pageList = new ArrayList<CarfarePage>();
+      for (Carfare main : carfareList) {
+          CarfarePage vo = new CarfarePage();
+          BeanUtils.copyProperties(main, vo);
+          List<CarfareDetail> carfareDetailList = carfareDetailService.selectByMainId(main.getId());
+          vo.setCarfareDetailList(carfareDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "车辆费用报销列表");
+      mv.addObject(NormalExcelConstants.CLASS, CarfarePage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("车辆费用报销数据", "导出人:"+sysUser.getRealname(), "车辆费用报销"));
+      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<CarfarePage> list = ExcelImportUtil.importExcel(file.getInputStream(), CarfarePage.class, params);
+              for (CarfarePage page : list) {
+                  Carfare po = new Carfare();
+                  BeanUtils.copyProperties(page, po);
+                  carfareService.saveMain(po, page.getCarfareDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 171 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/CarfareDetailController.java

@@ -0,0 +1,171 @@
+package org.jeecg.modules.oa.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+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.oa.entity.CarfareDetail;
+import org.jeecg.modules.oa.service.ICarfareDetailService;
+
+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.jeecg.common.system.base.controller.JeecgController;
+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;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 车辆费用报销明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+@Api(tags="车辆费用报销明细")
+@RestController
+@RequestMapping("/oa/carfareDetail")
+@Slf4j
+public class CarfareDetailController extends JeecgController<CarfareDetail, ICarfareDetailService> {
+	@Autowired
+	private ICarfareDetailService carfareDetailService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param carfareDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细-分页列表查询")
+	@ApiOperation(value="车辆费用报销明细-分页列表查询", notes="车辆费用报销明细-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(CarfareDetail carfareDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<CarfareDetail> queryWrapper = QueryGenerator.initQueryWrapper(carfareDetail, req.getParameterMap());
+		Page<CarfareDetail> page = new Page<CarfareDetail>(pageNo, pageSize);
+		IPage<CarfareDetail> pageList = carfareDetailService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param carfareDetail
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细-添加")
+	@ApiOperation(value="车辆费用报销明细-添加", notes="车辆费用报销明细-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody CarfareDetail carfareDetail) {
+		carfareDetailService.save(carfareDetail);
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param carfareDetail
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细-编辑")
+	@ApiOperation(value="车辆费用报销明细-编辑", notes="车辆费用报销明细-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody CarfareDetail carfareDetail) {
+		carfareDetailService.updateById(carfareDetail);
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细-通过id删除")
+	@ApiOperation(value="车辆费用报销明细-通过id删除", notes="车辆费用报销明细-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		carfareDetailService.removeById(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细-批量删除")
+	@ApiOperation(value="车辆费用报销明细-批量删除", notes="车辆费用报销明细-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.carfareDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "车辆费用报销明细-通过id查询")
+	@ApiOperation(value="车辆费用报销明细-通过id查询", notes="车辆费用报销明细-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		CarfareDetail carfareDetail = carfareDetailService.getById(id);
+		if(carfareDetail==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(carfareDetail);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param carfareDetail
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, CarfareDetail carfareDetail) {
+        return super.exportXls(request, carfareDetail, CarfareDetail.class, "车辆费用报销明细");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, CarfareDetail.class);
+    }
+
+}

+ 171 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MaterialController.java

@@ -0,0 +1,171 @@
+package org.jeecg.modules.oa.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+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.oa.entity.Material;
+import org.jeecg.modules.oa.service.IMaterialService;
+
+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.jeecg.common.system.base.controller.JeecgController;
+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;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 物料档案
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Api(tags="物料档案")
+@RestController
+@RequestMapping("/oa/material")
+@Slf4j
+public class MaterialController extends JeecgController<Material, IMaterialService> {
+	@Autowired
+	private IMaterialService materialService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param material
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "物料档案-分页列表查询")
+	@ApiOperation(value="物料档案-分页列表查询", notes="物料档案-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(Material material,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<Material> queryWrapper = QueryGenerator.initQueryWrapper(material, req.getParameterMap());
+		Page<Material> page = new Page<Material>(pageNo, pageSize);
+		IPage<Material> pageList = materialService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param material
+	 * @return
+	 */
+	@AutoLog(value = "物料档案-添加")
+	@ApiOperation(value="物料档案-添加", notes="物料档案-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody Material material) {
+		materialService.save(material);
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param material
+	 * @return
+	 */
+	@AutoLog(value = "物料档案-编辑")
+	@ApiOperation(value="物料档案-编辑", notes="物料档案-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody Material material) {
+		materialService.updateById(material);
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料档案-通过id删除")
+	@ApiOperation(value="物料档案-通过id删除", notes="物料档案-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		materialService.removeById(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "物料档案-批量删除")
+	@ApiOperation(value="物料档案-批量删除", notes="物料档案-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.materialService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料档案-通过id查询")
+	@ApiOperation(value="物料档案-通过id查询", notes="物料档案-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		Material material = materialService.getById(id);
+		if(material==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(material);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param material
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, Material material) {
+        return super.exportXls(request, material, Material.class, "物料档案");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, Material.class);
+    }
+
+}

+ 261 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MaterialInController.java

@@ -0,0 +1,261 @@
+package org.jeecg.modules.oa.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+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.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+import org.jeecg.modules.oa.entity.MaterialIn;
+import org.jeecg.modules.oa.vo.MaterialInPage;
+import org.jeecg.modules.oa.service.IMaterialInService;
+import org.jeecg.modules.oa.service.IMaterialInDetailService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+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 com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 物料入库等级
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Api(tags="物料入库等级")
+@RestController
+@RequestMapping("/oa/materialIn")
+@Slf4j
+public class MaterialInController {
+	@Autowired
+	private IMaterialInService materialInService;
+	@Autowired
+	private IMaterialInDetailService materialInDetailService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param materialIn
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "物料入库等级-分页列表查询")
+	@ApiOperation(value="物料入库等级-分页列表查询", notes="物料入库等级-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(MaterialIn materialIn,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<MaterialIn> queryWrapper = QueryGenerator.initQueryWrapper(materialIn, req.getParameterMap());
+		Page<MaterialIn> page = new Page<MaterialIn>(pageNo, pageSize);
+		IPage<MaterialIn> pageList = materialInService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param materialInPage
+	 * @return
+	 */
+	@AutoLog(value = "物料入库等级-添加")
+	@ApiOperation(value="物料入库等级-添加", notes="物料入库等级-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody MaterialInPage materialInPage) {
+		MaterialIn materialIn = new MaterialIn();
+		BeanUtils.copyProperties(materialInPage, materialIn);
+		materialInService.saveMain(materialIn, materialInPage.getMaterialInDetailList());
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param materialInPage
+	 * @return
+	 */
+	@AutoLog(value = "物料入库等级-编辑")
+	@ApiOperation(value="物料入库等级-编辑", notes="物料入库等级-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody MaterialInPage materialInPage) {
+		MaterialIn materialIn = new MaterialIn();
+		BeanUtils.copyProperties(materialInPage, materialIn);
+		MaterialIn materialInEntity = materialInService.getById(materialIn.getId());
+		if(materialInEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		materialInService.updateMain(materialIn, materialInPage.getMaterialInDetailList());
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料入库等级-通过id删除")
+	@ApiOperation(value="物料入库等级-通过id删除", notes="物料入库等级-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		materialInService.delMain(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "物料入库等级-批量删除")
+	@ApiOperation(value="物料入库等级-批量删除", notes="物料入库等级-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.materialInService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料入库等级-通过id查询")
+	@ApiOperation(value="物料入库等级-通过id查询", notes="物料入库等级-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		MaterialIn materialIn = materialInService.getById(id);
+		if(materialIn==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(materialIn);
+
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细集合-通过id查询")
+	@ApiOperation(value="物料入库明细集合-通过id查询", notes="物料入库明细-通过id查询")
+	@GetMapping(value = "/queryMaterialInDetailByMainId")
+	public Result<?> queryMaterialInDetailListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<MaterialInDetail> materialInDetailList = materialInDetailService.selectByMainId(id);
+		return Result.ok(materialInDetailList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param materialIn
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, MaterialIn materialIn) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<MaterialIn> queryWrapper = QueryGenerator.initQueryWrapper(materialIn, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //Step.2 获取导出数据
+      List<MaterialIn> queryList = materialInService.list(queryWrapper);
+      // 过滤选中数据
+      String selections = request.getParameter("selections");
+      List<MaterialIn> materialInList = new ArrayList<MaterialIn>();
+      if(oConvertUtils.isEmpty(selections)) {
+          materialInList = queryList;
+      }else {
+          List<String> selectionList = Arrays.asList(selections.split(","));
+          materialInList = queryList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
+      }
+
+      // Step.3 组装pageList
+      List<MaterialInPage> pageList = new ArrayList<MaterialInPage>();
+      for (MaterialIn main : materialInList) {
+          MaterialInPage vo = new MaterialInPage();
+          BeanUtils.copyProperties(main, vo);
+          List<MaterialInDetail> materialInDetailList = materialInDetailService.selectByMainId(main.getId());
+          vo.setMaterialInDetailList(materialInDetailList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "物料入库等级列表");
+      mv.addObject(NormalExcelConstants.CLASS, MaterialInPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("物料入库等级数据", "导出人:"+sysUser.getRealname(), "物料入库等级"));
+      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<MaterialInPage> list = ExcelImportUtil.importExcel(file.getInputStream(), MaterialInPage.class, params);
+              for (MaterialInPage page : list) {
+                  MaterialIn po = new MaterialIn();
+                  BeanUtils.copyProperties(page, po);
+                  materialInService.saveMain(po, page.getMaterialInDetailList());
+              }
+              return Result.ok("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+    }
+
+}

+ 155 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/controller/MaterialInDetailController.java

@@ -0,0 +1,155 @@
+package org.jeecg.modules.oa.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+import org.jeecg.modules.oa.service.IMaterialInDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+ /**
+ * @Description: 物料入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+@Api(tags="物料入库明细")
+@RestController
+@RequestMapping("/oa/materialInDetail")
+@Slf4j
+public class MaterialInDetailController extends JeecgController<MaterialInDetail, IMaterialInDetailService> {
+	@Autowired
+	private IMaterialInDetailService materialInDetailService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param materialInDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细-分页列表查询")
+	@ApiOperation(value="物料入库明细-分页列表查询", notes="物料入库明细-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(MaterialInDetail materialInDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<MaterialInDetail> queryWrapper = QueryGenerator.initQueryWrapper(materialInDetail, req.getParameterMap());
+		Page<MaterialInDetail> page = new Page<MaterialInDetail>(pageNo, pageSize);
+		IPage<MaterialInDetail> pageList = materialInDetailService.page(page, queryWrapper);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param materialInDetail
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细-添加")
+	@ApiOperation(value="物料入库明细-添加", notes="物料入库明细-添加")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody MaterialInDetail materialInDetail) {
+		materialInDetailService.save(materialInDetail);
+		return Result.ok("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param materialInDetail
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细-编辑")
+	@ApiOperation(value="物料入库明细-编辑", notes="物料入库明细-编辑")
+	@PutMapping(value = "/edit")
+	public Result<?> edit(@RequestBody MaterialInDetail materialInDetail) {
+		materialInDetailService.updateById(materialInDetail);
+		return Result.ok("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细-通过id删除")
+	@ApiOperation(value="物料入库明细-通过id删除", notes="物料入库明细-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		materialInDetailService.removeById(id);
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细-批量删除")
+	@ApiOperation(value="物料入库明细-批量删除", notes="物料入库明细-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.materialInDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.ok("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "物料入库明细-通过id查询")
+	@ApiOperation(value="物料入库明细-通过id查询", notes="物料入库明细-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
+		MaterialInDetail materialInDetail = materialInDetailService.getById(id);
+		if(materialInDetail==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.ok(materialInDetail);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param materialInDetail
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, MaterialInDetail materialInDetail) {
+        return super.exportXls(request, materialInDetail, MaterialInDetail.class, "物料入库明细");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, MaterialInDetail.class);
+    }
+
+}

+ 156 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/Asset.java

@@ -0,0 +1,156 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+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;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 固定资产
+ * @Author: jeecg-boot
+ * @Date:   2023-05-26
+ * @Version: V1.0
+ */
+@Data
+@TableName("cd_asset")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="cd_asset对象", description="固定资产")
+public class Asset implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**资产编号*/
+	@Excel(name = "资产编号", width = 15)
+    @ApiModelProperty(value = "资产编号")
+    private java.lang.String assetNumber;
+	/**资产名称*/
+	@Excel(name = "资产名称", width = 15)
+    @ApiModelProperty(value = "资产名称")
+    private java.lang.String assetName;
+	/**资产类别*/
+	@Excel(name = "资产类别", width = 15)
+    @ApiModelProperty(value = "资产类别")
+    private java.lang.String assetsCategory;
+	/**品牌*/
+	@Excel(name = "品牌", width = 15)
+    @ApiModelProperty(value = "品牌")
+    private java.lang.String brand;
+	/**单位名称*/
+	@Excel(name = "单位名称", width = 15)
+    @ApiModelProperty(value = "单位名称")
+    private java.lang.String unitName;
+	/**规格型号*/
+	@Excel(name = "规格型号", width = 15)
+    @ApiModelProperty(value = "规格型号")
+    private java.lang.String model;
+	/**计量单位*/
+	@Excel(name = "计量单位", width = 15)
+    @ApiModelProperty(value = "计量单位")
+    private java.lang.String unit;
+	/**数量*/
+	@Excel(name = "数量", width = 15)
+    @ApiModelProperty(value = "数量")
+    private java.math.BigDecimal quantity;
+	/**金额*/
+	@Excel(name = "金额", width = 15)
+    @ApiModelProperty(value = "金额")
+    private java.math.BigDecimal amount;
+	/**使用年限*/
+	@Excel(name = "使用年限", width = 15)
+    @ApiModelProperty(value = "使用年限")
+    private java.math.BigDecimal exp;
+	/**购置日期*/
+	@Excel(name = "购置日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "购置日期")
+    private java.util.Date purhcaseDate;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "入库日期")
+    private java.util.Date inDate;
+	/**存放地点*/
+	@Excel(name = "存放地点", width = 15)
+    @ApiModelProperty(value = "存放地点")
+    private java.lang.String place;
+	/**使用人*/
+	@Excel(name = "使用人", width = 15)
+    @ApiModelProperty(value = "使用人")
+    private java.lang.String user;
+	/**使用部门*/
+	@Excel(name = "使用部门", width = 15)
+    @ApiModelProperty(value = "使用部门")
+    private java.lang.String userDept;
+	/**资产状态*/
+	@Excel(name = "资产状态", width = 15)
+    @ApiModelProperty(value = "资产状态")
+    private java.lang.String state;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+    @ApiModelProperty(value = "附件")
+    private java.lang.String attachment;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+    @ApiModelProperty(value = "入库人")
+    private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+    @ApiModelProperty(value = "入库部门")
+    private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "入库日期")
+    private java.util.Date operatorDate;
+	/**入库id*/
+	@Excel(name = "入库id", width = 15)
+    @ApiModelProperty(value = "入库id")
+    private java.lang.String cdAssetInId;
+}

+ 86 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/AssetIn.java

@@ -0,0 +1,86 @@
+package org.jeecg.modules.oa.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;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 固定资产入库
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@ApiModel(value="cd_asset_in对象", description="固定资产入库")
+@Data
+@TableName("cd_asset_in")
+public class AssetIn implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**标题*/
+	@Excel(name = "标题", width = 15)
+    @ApiModelProperty(value = "标题")
+    private java.lang.String title;
+	/**单据号*/
+	@Excel(name = "单据号", width = 15)
+    @ApiModelProperty(value = "单据号")
+    private java.lang.String inNo;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private java.lang.String creater;
+	/**创建部门*/
+	@Excel(name = "创建部门", width = 15)
+    @ApiModelProperty(value = "创建部门")
+    private java.lang.String createrDept;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+    @ApiModelProperty(value = "入库人")
+    private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+    @ApiModelProperty(value = "入库部门")
+    private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "入库日期")
+    private java.util.Date operatorDate;
+}

+ 148 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/AssetInDetail.java

@@ -0,0 +1,148 @@
+package org.jeecg.modules.oa.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 固定资产入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@ApiModel(value="cd_asset_in对象", description="固定资产入库")
+@Data
+@TableName("cd_asset_in_detail")
+public class AssetInDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+	@ApiModelProperty(value = "主键")
+	private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	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")
+	@ApiModelProperty(value = "创建日期")
+	private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private java.lang.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")
+	@ApiModelProperty(value = "更新日期")
+	private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private java.lang.String sysOrgCode;
+	/**资产编号*/
+	@Excel(name = "资产编号", width = 15)
+	@ApiModelProperty(value = "资产编号")
+	private java.lang.String assetNumber;
+	/**资产名称*/
+	@Excel(name = "资产名称", width = 15)
+	@ApiModelProperty(value = "资产名称")
+	private java.lang.String assetName;
+	/**资产类别*/
+	@Excel(name = "资产类别", width = 15)
+	@ApiModelProperty(value = "资产类别")
+	private java.lang.String assetsCategory;
+	/**品牌*/
+	@Excel(name = "品牌", width = 15)
+	@ApiModelProperty(value = "品牌")
+	private java.lang.String brand;
+	/**单位名称*/
+	@Excel(name = "单位名称", width = 15)
+	@ApiModelProperty(value = "单位名称")
+	private java.lang.String unitName;
+	/**规格型号*/
+	@Excel(name = "规格型号", width = 15)
+	@ApiModelProperty(value = "规格型号")
+	private java.lang.String model;
+	/**计量单位*/
+	@Excel(name = "计量单位", width = 15)
+	@ApiModelProperty(value = "计量单位")
+	private java.lang.String unit;
+	/**数量*/
+	@Excel(name = "数量", width = 15)
+	@ApiModelProperty(value = "数量")
+	private java.math.BigDecimal quantity;
+	/**金额*/
+	@Excel(name = "金额", width = 15)
+	@ApiModelProperty(value = "金额")
+	private java.math.BigDecimal amount;
+	/**使用年限*/
+	@Excel(name = "使用年限", width = 15)
+	@ApiModelProperty(value = "使用年限")
+	private java.math.BigDecimal exp;
+	/**购置日期*/
+	@Excel(name = "购置日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "购置日期")
+	private java.util.Date purhcaseDate;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "入库日期")
+	private java.util.Date inDate;
+	/**存放地点*/
+	@Excel(name = "存放地点", width = 15)
+	@ApiModelProperty(value = "存放地点")
+	private java.lang.String place;
+	/**使用人*/
+	@Excel(name = "使用人", width = 15)
+	@ApiModelProperty(value = "使用人")
+	private java.lang.String user;
+	/**使用部门*/
+	@Excel(name = "使用部门", width = 15)
+	@ApiModelProperty(value = "使用部门")
+	private java.lang.String userDept;
+	/**资产状态*/
+	@Excel(name = "资产状态", width = 15)
+	@ApiModelProperty(value = "资产状态")
+	private java.lang.String state;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private java.lang.String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+	@ApiModelProperty(value = "附件")
+	private java.lang.String attachment;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+	@ApiModelProperty(value = "入库人")
+	private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+	@ApiModelProperty(value = "入库部门")
+	private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "入库日期")
+	private java.util.Date operatorDate;
+	/**入库id*/
+	@ApiModelProperty(value = "入库id")
+	private java.lang.String cdAssetInId;
+}

+ 80 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/Carfare.java

@@ -0,0 +1,80 @@
+package org.jeecg.modules.oa.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;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 车辆费用报销
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@ApiModel(value="cd_carfare对象", description="车辆费用报销")
+@Data
+@TableName("cd_carfare")
+public class Carfare implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+    @ApiModelProperty(value = "登记人")
+    private java.lang.String registrant;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+    @ApiModelProperty(value = "登记部门")
+    private java.lang.String registrantDept;
+	/**报销总额*/
+	@Excel(name = "报销总额", width = 15)
+    @ApiModelProperty(value = "报销总额")
+    private java.math.BigDecimal totalAmount;
+	/**财务经办人*/
+	@Excel(name = "财务经办人", width = 15)
+    @ApiModelProperty(value = "财务经办人")
+    private java.lang.String financeOperator;
+	/**财务经办部门*/
+	@Excel(name = "财务经办部门", width = 15)
+    @ApiModelProperty(value = "财务经办部门")
+    private java.lang.String financeDept;
+	/**财务负责人*/
+	@Excel(name = "财务负责人", width = 15)
+    @ApiModelProperty(value = "财务负责人")
+    private java.lang.String financeHead;
+}

+ 125 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/CarfareDetail.java

@@ -0,0 +1,125 @@
+package org.jeecg.modules.oa.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 车辆费用报销明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("cd_carfare_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="cd_carfare_detail对象", description="车辆费用报销明细")
+public class CarfareDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**报销日期*/
+    @Excel(name = "报销日期", width = 15, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "报销日期")
+    private java.util.Date reimbursementDate;
+	/**支付凭证编号*/
+	@Excel(name = "支付凭证编号", width = 15)
+    @ApiModelProperty(value = "支付凭证编号")
+    private java.lang.String paymentNo;
+	/**车牌号*/
+	@Excel(name = "车牌号", width = 15)
+    @ApiModelProperty(value = "车牌号")
+    private java.lang.String carNo;
+	/**报销人*/
+	@Excel(name = "报销人", width = 15)
+    @ApiModelProperty(value = "报销人")
+    private java.lang.String submitter;
+	/**部门*/
+	@Excel(name = "部门", width = 15)
+    @ApiModelProperty(value = "部门")
+    private java.lang.String dept;
+	/**报销内容*/
+	@Excel(name = "报销内容", width = 15)
+    @ApiModelProperty(value = "报销内容")
+    private java.lang.String content;
+	/**金额*/
+	@Excel(name = "金额", width = 15)
+    @ApiModelProperty(value = "金额")
+    private java.math.BigDecimal amount;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+    @ApiModelProperty(value = "附件")
+    private java.lang.String attachment;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+	/**车辆费用报销id*/
+	@Excel(name = "车辆费用报销id", width = 15)
+    @ApiModelProperty(value = "车辆费用报销id")
+    private java.lang.String cdCarfareId;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+    @ApiModelProperty(value = "登记人")
+    private java.lang.String registrant;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+    @ApiModelProperty(value = "登记部门")
+    private java.lang.String registrantDept;
+	/**报销总额*/
+	@Excel(name = "报销总额", width = 15)
+    @ApiModelProperty(value = "报销总额")
+    private java.math.BigDecimal totalAmount;
+	/**财务经办人*/
+	@Excel(name = "财务经办人", width = 15)
+    @ApiModelProperty(value = "财务经办人")
+    private java.lang.String financeOperator;
+	/**财务经办部门*/
+	@Excel(name = "财务经办部门", width = 15)
+    @ApiModelProperty(value = "财务经办部门")
+    private java.lang.String financeDept;
+	/**财务负责人*/
+	@Excel(name = "财务负责人", width = 15)
+    @ApiModelProperty(value = "财务负责人")
+    private java.lang.String financeHead;
+}

+ 90 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/Material.java

@@ -0,0 +1,90 @@
+package org.jeecg.modules.oa.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+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;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 物料档案
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Data
+@TableName("cd_material")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="cd_material对象", description="物料档案")
+public class Material implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**物料名称*/
+	@Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private java.lang.String materialName;
+	/**品牌*/
+	@Excel(name = "品牌", width = 15)
+    @ApiModelProperty(value = "品牌")
+    private java.lang.String brand;
+	/**类别*/
+	@Excel(name = "类别", width = 15)
+    @ApiModelProperty(value = "类别")
+    private java.lang.String category;
+	/**规格型号*/
+	@Excel(name = "规格型号", width = 15)
+    @ApiModelProperty(value = "规格型号")
+    private java.lang.String model;
+	/**计量单位*/
+	@Excel(name = "计量单位", width = 15)
+    @ApiModelProperty(value = "计量单位")
+    private java.lang.String unit;
+	/**剩余数量*/
+	@Excel(name = "剩余数量", width = 15)
+    @ApiModelProperty(value = "剩余数量")
+    private java.math.BigDecimal quantity;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+}

+ 78 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MaterialIn.java

@@ -0,0 +1,78 @@
+package org.jeecg.modules.oa.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;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 物料入库等级
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@ApiModel(value="cd_material_in对象", description="物料入库等级")
+@Data
+@TableName("cd_material_in")
+public class MaterialIn implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+    @ApiModelProperty(value = "入库人")
+    private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+    @ApiModelProperty(value = "入库部门")
+    private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "入库日期")
+    private java.util.Date operateDate;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+    @ApiModelProperty(value = "附件")
+    private java.lang.String attachment;
+}

+ 110 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/entity/MaterialInDetail.java

@@ -0,0 +1,110 @@
+package org.jeecg.modules.oa.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 物料入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("cd_material_in_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="cd_material_in_detail对象", description="物料入库明细")
+public class MaterialInDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ID_WORKER_STR)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    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")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private java.lang.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")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**物料ID*/
+    @ApiModelProperty(value = "物料ID")
+    private java.lang.String cdMaterialId;
+	/**入库ID*/
+    @ApiModelProperty(value = "入库ID")
+    private java.lang.String cdMaterialInId;
+	/**入库数量*/
+	@Excel(name = "入库数量", width = 15)
+    @ApiModelProperty(value = "入库数量")
+    private java.math.BigDecimal quantity;
+	/**物料名称*/
+	@Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private java.lang.String materialName;
+	/**品牌*/
+	@Excel(name = "品牌", width = 15)
+    @ApiModelProperty(value = "品牌")
+    private java.lang.String brand;
+	/**类别*/
+	@Excel(name = "类别", width = 15)
+    @ApiModelProperty(value = "类别")
+    private java.lang.String category;
+	/**规格型号*/
+	@Excel(name = "规格型号", width = 15)
+    @ApiModelProperty(value = "规格型号")
+    private java.lang.String model;
+	/**计量单位*/
+	@Excel(name = "计量单位", width = 15)
+    @ApiModelProperty(value = "计量单位")
+    private java.lang.String unit;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+    @ApiModelProperty(value = "入库人")
+    private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+    @ApiModelProperty(value = "入库部门")
+    private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "入库日期")
+    private java.util.Date operateDate;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+	/**附件*/
+    @ApiModelProperty(value = "附件")
+    private java.lang.String attachment;
+}

+ 19 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/AssetInDetailMapper.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 固定资产入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+public interface AssetInDetailMapper extends BaseMapper<AssetInDetail> {
+
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+    
+	public List<AssetInDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/AssetInMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.AssetIn;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 固定资产入库
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+public interface AssetInMapper extends BaseMapper<AssetIn> {
+
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/AssetMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.Asset;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 固定资产
+ * @Author: jeecg-boot
+ * @Date:   2023-05-26
+ * @Version: V1.0
+ */
+public interface AssetMapper extends BaseMapper<Asset> {
+
+}

+ 20 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/CarfareDetailMapper.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.oa.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.CarfareDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 车辆费用报销明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+public interface CarfareDetailMapper extends BaseMapper<CarfareDetail> {
+
+    public boolean deleteByMainId(@Param("mainId") String mainId);
+
+    public List<CarfareDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/CarfareMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.Carfare;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 车辆费用报销
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+public interface CarfareMapper extends BaseMapper<Carfare> {
+
+}

+ 20 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MaterialInDetailMapper.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.oa.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 物料入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+public interface MaterialInDetailMapper extends BaseMapper<MaterialInDetail> {
+
+    public boolean deleteByMainId(@Param("mainId") String mainId);
+
+    public List<MaterialInDetail> selectByMainId(@Param("mainId") String mainId);
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MaterialInMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.MaterialIn;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 物料入库等级
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+public interface MaterialInMapper extends BaseMapper<MaterialIn> {
+
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/MaterialMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.oa.entity.Material;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 物料档案
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+public interface MaterialMapper extends BaseMapper<Material> {
+
+}

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/AssetInDetailMapper.xml

@@ -0,0 +1,16 @@
+<?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.oa.mapper.AssetInDetailMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  cd_asset_in_detail 
+		WHERE
+			 cd_asset_in_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.AssetInDetail">
+		SELECT * 
+		FROM  cd_asset_in_detail
+		WHERE
+			 cd_asset_in_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/AssetInMapper.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.oa.mapper.AssetInMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/AssetMapper.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.oa.mapper.AssetMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/CarfareDetailMapper.xml

@@ -0,0 +1,16 @@
+<?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.oa.mapper.CarfareDetailMapper">
+
+    <delete id="deleteByMainId" parameterType="java.lang.String">
+        DELETE
+        FROM  cd_carfare_detail
+        WHERE
+        carfare_id = #{mainId} 	</delete>
+
+    <select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.CarfareDetail">
+        SELECT *
+        FROM  cd_carfare_detail
+        WHERE
+        carfare_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/CarfareMapper.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.oa.mapper.CarfareMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MaterialInDetailMapper.xml

@@ -0,0 +1,16 @@
+<?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.oa.mapper.MaterialInDetailMapper">
+
+    <delete id="deleteByMainId" parameterType="java.lang.String">
+        DELETE
+        FROM  cd_material_in_detail
+        WHERE
+        material_in_id = #{mainId} 	</delete>
+
+    <select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.oa.entity.MaterialInDetail">
+        SELECT *
+        FROM  cd_material_in_detail
+        WHERE
+        material_in_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MaterialInMapper.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.oa.mapper.MaterialInMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/mapper/xml/MaterialMapper.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.oa.mapper.MaterialMapper">
+
+</mapper>

+ 16 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IAssetInDetailService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 固定资产入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+public interface IAssetInDetailService extends IService<AssetInDetail> {
+
+	public List<AssetInDetail> selectByMainId(String mainId);
+}

+ 40 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IAssetInService.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import org.jeecg.modules.oa.entity.AssetIn;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 固定资产入库
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+public interface IAssetInService extends IService<AssetIn> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(AssetIn assetIn,List<AssetInDetail> assetInDetailList) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(AssetIn assetIn,List<AssetInDetail> assetInDetailList);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 14 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IAssetService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.Asset;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 固定资产
+ * @Author: jeecg-boot
+ * @Date:   2023-05-26
+ * @Version: V1.0
+ */
+public interface IAssetService extends IService<Asset> {
+
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/ICarfareDetailService.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.oa.entity.CarfareDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 车辆费用报销明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+public interface ICarfareDetailService extends IService<CarfareDetail> {
+
+    public List<CarfareDetail> selectByMainId(String mainId);
+}

+ 40 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/ICarfareService.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.CarfareDetail;
+import org.jeecg.modules.oa.entity.Carfare;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 车辆费用报销
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+public interface ICarfareService extends IService<Carfare> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(Carfare carfare,List<CarfareDetail> carfareDetailList) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(Carfare carfare,List<CarfareDetail> carfareDetailList);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 17 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMaterialInDetailService.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.oa.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+
+import java.util.List;
+
+/**
+ * @Description: 物料入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+public interface IMaterialInDetailService extends IService<MaterialInDetail> {
+
+    public List<MaterialInDetail> selectByMainId(String mainId);
+}

+ 40 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMaterialInService.java

@@ -0,0 +1,40 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+import org.jeecg.modules.oa.entity.MaterialIn;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 物料入库等级
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+public interface IMaterialInService extends IService<MaterialIn> {
+
+	/**
+	 * 添加一对多
+	 * 
+	 */
+	public void saveMain(MaterialIn materialIn,List<MaterialInDetail> materialInDetailList) ;
+	
+	/**
+	 * 修改一对多
+	 * 
+	 */
+	public void updateMain(MaterialIn materialIn,List<MaterialInDetail> materialInDetailList);
+	
+	/**
+	 * 删除一对多
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 14 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/IMaterialService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.oa.service;
+
+import org.jeecg.modules.oa.entity.Material;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 物料档案
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+public interface IMaterialService extends IService<Material> {
+
+}

+ 27 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/AssetInDetailServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import org.jeecg.modules.oa.mapper.AssetInDetailMapper;
+import org.jeecg.modules.oa.service.IAssetInDetailService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 固定资产入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@Service
+public class AssetInDetailServiceImpl extends ServiceImpl<AssetInDetailMapper, AssetInDetail> implements IAssetInDetailService {
+	
+	@Autowired
+	private AssetInDetailMapper assetInDetailMapper;
+	
+	@Override
+	public List<AssetInDetail> selectByMainId(String mainId) {
+		return assetInDetailMapper.selectByMainId(mainId);
+	}
+}

+ 91 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/AssetInServiceImpl.java

@@ -0,0 +1,91 @@
+package org.jeecg.modules.oa.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.oa.entity.Asset;
+import org.jeecg.modules.oa.entity.AssetIn;
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import org.jeecg.modules.oa.mapper.AssetInDetailMapper;
+import org.jeecg.modules.oa.mapper.AssetInMapper;
+import org.jeecg.modules.oa.service.IAssetInService;
+import org.jeecg.modules.oa.service.IAssetService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 固定资产入库
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@Service
+public class AssetInServiceImpl extends ServiceImpl<AssetInMapper, AssetIn> implements IAssetInService {
+
+	@Autowired
+	private AssetInMapper assetInMapper;
+	@Autowired
+	private AssetInDetailMapper assetInDetailMapper;
+
+	@Autowired
+	private IAssetService assetService;
+	
+	@Override
+	@Transactional
+	public void saveMain(AssetIn assetIn, List<AssetInDetail> assetInDetailList) {
+		assetInMapper.insert(assetIn);
+		if(assetInDetailList!=null && assetInDetailList.size()>0) {
+			for(AssetInDetail entity:assetInDetailList) {
+				//外键设置
+				entity.setCdAssetInId(assetIn.getId());
+				entity.setOperator(assetIn.getOperator());
+				entity.setOperatorDept(assetIn.getOperatorDept());
+				entity.setOperatorDate(assetIn.getOperatorDate());
+
+				Asset asset = new Asset();
+				BeanUtils.copyProperties(entity, asset);
+				this.assetService.save(asset);
+				assetInDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(AssetIn assetIn,List<AssetInDetail> assetInDetailList) {
+		assetInMapper.updateById(assetIn);
+		
+		//1.先删除子表数据
+		assetInDetailMapper.deleteByMainId(assetIn.getId());
+		
+		//2.子表数据重新插入
+		if(assetInDetailList!=null && assetInDetailList.size()>0) {
+			for(AssetInDetail entity:assetInDetailList) {
+				//外键设置
+				entity.setCdAssetInId(assetIn.getId());
+				assetInDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		assetInDetailMapper.deleteByMainId(id);
+		assetInMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			assetInDetailMapper.deleteByMainId(id.toString());
+			assetInMapper.deleteById(id);
+		}
+	}
+	
+}

+ 19 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/AssetServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.Asset;
+import org.jeecg.modules.oa.mapper.AssetMapper;
+import org.jeecg.modules.oa.service.IAssetService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 固定资产
+ * @Author: jeecg-boot
+ * @Date:   2023-05-26
+ * @Version: V1.0
+ */
+@Service
+public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements IAssetService {
+
+}

+ 28 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/CarfareDetailServiceImpl.java

@@ -0,0 +1,28 @@
+package org.jeecg.modules.oa.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.oa.entity.CarfareDetail;
+import org.jeecg.modules.oa.mapper.CarfareDetailMapper;
+import org.jeecg.modules.oa.service.ICarfareDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 车辆费用报销明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+@Service
+public class CarfareDetailServiceImpl extends ServiceImpl<CarfareDetailMapper, CarfareDetail> implements ICarfareDetailService {
+
+    @Autowired
+    private CarfareDetailMapper carfareDetailMapper;
+
+    @Override
+    public List<CarfareDetail> selectByMainId(String mainId) {
+        return carfareDetailMapper.selectByMainId(mainId);
+    }
+}

+ 82 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/CarfareServiceImpl.java

@@ -0,0 +1,82 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.Carfare;
+import org.jeecg.modules.oa.entity.CarfareDetail;
+import org.jeecg.modules.oa.mapper.CarfareDetailMapper;
+import org.jeecg.modules.oa.mapper.CarfareMapper;
+import org.jeecg.modules.oa.service.ICarfareService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 车辆费用报销
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Service
+public class CarfareServiceImpl extends ServiceImpl<CarfareMapper, Carfare> implements ICarfareService {
+
+	@Autowired
+	private CarfareMapper carfareMapper;
+	@Autowired
+	private CarfareDetailMapper carfareDetailMapper;
+	
+	@Override
+	@Transactional
+	public void saveMain(Carfare carfare, List<CarfareDetail> carfareDetailList) {
+		carfareMapper.insert(carfare);
+		if(carfareDetailList!=null && carfareDetailList.size()>0) {
+			for(CarfareDetail entity:carfareDetailList) {
+				//外键设置
+				entity.setCdCarfareId(carfare.getId());
+				entity.setRegistrant(carfare.getRegistrant());
+				entity.setRegistrantDept(carfare.getRegistrantDept());
+				entity.setFinanceOperator(carfare.getFinanceOperator());
+				entity.setFinanceDept(carfare.getFinanceDept());
+				entity.setFinanceHead(carfare.getFinanceHead());
+				carfareDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(Carfare carfare,List<CarfareDetail> carfareDetailList) {
+		carfareMapper.updateById(carfare);
+		
+		//1.先删除子表数据
+		carfareDetailMapper.deleteByMainId(carfare.getId());
+		
+		//2.子表数据重新插入
+		if(carfareDetailList!=null && carfareDetailList.size()>0) {
+			for(CarfareDetail entity:carfareDetailList) {
+				//外键设置
+				entity.setCdCarfareId(carfare.getId());
+				carfareDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		carfareDetailMapper.deleteByMainId(id);
+		carfareMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			carfareDetailMapper.deleteByMainId(id.toString());
+			carfareMapper.deleteById(id);
+		}
+	}
+	
+}

+ 64 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MaterialInDetailServiceImpl.java

@@ -0,0 +1,64 @@
+package org.jeecg.modules.oa.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.oa.entity.Material;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+import org.jeecg.modules.oa.mapper.MaterialInDetailMapper;
+import org.jeecg.modules.oa.service.IMaterialInDetailService;
+import org.jeecg.modules.oa.service.IMaterialService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description: 物料入库明细
+ * @Author: jeecg-boot
+ * @Date:   2023-05-22
+ * @Version: V1.0
+ */
+@Service
+public class MaterialInDetailServiceImpl extends ServiceImpl<MaterialInDetailMapper, MaterialInDetail> implements IMaterialInDetailService {
+
+    @Autowired
+    private MaterialInDetailMapper materialInDetailMapper;
+
+    @Autowired
+    private IMaterialService materialService;
+
+    @Override
+    public List<MaterialInDetail> selectByMainId(String mainId) {
+        return materialInDetailMapper.selectByMainId(mainId);
+    }
+
+    @Override
+    @Transactional
+    public boolean save(MaterialInDetail entity) {
+        super.save(entity);
+        Material material = materialService.getById(entity.getCdMaterialId());
+        material.setQuantity(material.getQuantity().add(entity.getQuantity()));
+        return materialService.saveOrUpdate(material);
+    }
+
+    @Override
+    @Transactional
+    public boolean updateById(MaterialInDetail entity) {
+        MaterialInDetail existedDetail = this.getById(entity.getId());
+        if(entity.getCdMaterialId()!=null){
+            Material materialOld = materialService.getById(existedDetail.getCdMaterialId());
+            materialOld.setQuantity(materialOld.getQuantity().subtract(existedDetail.getQuantity()));
+            materialService.saveOrUpdate(materialOld);
+
+            Material materialNew = materialService.getById(entity.getCdMaterialId());
+            materialNew.setQuantity(materialNew.getQuantity().add(entity.getQuantity()));
+            materialService.saveOrUpdate(materialNew);
+
+        }else if(! existedDetail.getQuantity().equals(entity.getQuantity())){
+            Material material = materialService.getById(existedDetail.getCdMaterialId());
+            material.setQuantity(material.getQuantity().add(entity.getQuantity().subtract(existedDetail.getQuantity())));
+            materialService.saveOrUpdate(material);
+        }
+        return super.updateById(entity);
+    }
+}

+ 86 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MaterialInServiceImpl.java

@@ -0,0 +1,86 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.MaterialIn;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+import org.jeecg.modules.oa.mapper.MaterialInDetailMapper;
+import org.jeecg.modules.oa.mapper.MaterialInMapper;
+import org.jeecg.modules.oa.service.IMaterialInDetailService;
+import org.jeecg.modules.oa.service.IMaterialInService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 物料入库等级
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Service
+public class MaterialInServiceImpl extends ServiceImpl<MaterialInMapper, MaterialIn> implements IMaterialInService {
+
+	@Autowired
+	private MaterialInMapper materialInMapper;
+	@Autowired
+	private MaterialInDetailMapper materialInDetailMapper;
+
+	@Autowired
+	private IMaterialInDetailService materialInDetailService;
+	
+	@Override
+	@Transactional
+	public void saveMain(MaterialIn materialIn, List<MaterialInDetail> materialInDetailList) {
+		materialInMapper.insert(materialIn);
+		if(materialInDetailList!=null && materialInDetailList.size()>0) {
+			for(MaterialInDetail entity:materialInDetailList) {
+				//外键设置
+				entity.setCdMaterialInId(materialIn.getId());
+				entity.setOperator(materialIn.getOperator());
+				entity.setOperatorDept(materialIn.getOperatorDept());
+				entity.setOperateDate(materialIn.getOperateDate());
+				entity.setRemark(materialIn.getRemark());
+				entity.setAttachment(materialIn.getAttachment());
+				materialInDetailService.save(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void updateMain(MaterialIn materialIn,List<MaterialInDetail> materialInDetailList) {
+		materialInMapper.updateById(materialIn);
+		
+		//1.先删除子表数据
+		materialInDetailMapper.deleteByMainId(materialIn.getId());
+		
+		//2.子表数据重新插入
+		if(materialInDetailList!=null && materialInDetailList.size()>0) {
+			for(MaterialInDetail entity:materialInDetailList) {
+				//外键设置
+				entity.setCdMaterialInId(materialIn.getId());
+				materialInDetailMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional
+	public void delMain(String id) {
+		materialInDetailMapper.deleteByMainId(id);
+		materialInMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			materialInDetailMapper.deleteByMainId(id.toString());
+			materialInMapper.deleteById(id);
+		}
+	}
+	
+}

+ 19 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/service/impl/MaterialServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.oa.service.impl;
+
+import org.jeecg.modules.oa.entity.Material;
+import org.jeecg.modules.oa.mapper.MaterialMapper;
+import org.jeecg.modules.oa.service.IMaterialService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 物料档案
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Service
+public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> implements IMaterialService {
+
+}

+ 88 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/AssetInPage.java

@@ -0,0 +1,88 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.AssetIn;
+import org.jeecg.modules.oa.entity.AssetInDetail;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 固定资产入库
+ * @Author: jeecg-boot
+ * @Date:   2023-05-25
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="cd_asset_inPage对象", description="固定资产入库")
+public class AssetInPage {
+	
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	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")
+	@ApiModelProperty(value = "创建日期")
+	private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private java.lang.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")
+	@ApiModelProperty(value = "更新日期")
+	private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private java.lang.String sysOrgCode;
+	/**标题*/
+	@Excel(name = "标题", width = 15)
+	@ApiModelProperty(value = "标题")
+	private java.lang.String title;
+	/**单据号*/
+	@Excel(name = "单据号", width = 15)
+	@ApiModelProperty(value = "单据号")
+	private java.lang.String inNo;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	private java.lang.String creater;
+	/**创建部门*/
+	@Excel(name = "创建部门", width = 15)
+	@ApiModelProperty(value = "创建部门")
+	private java.lang.String createrDept;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+	@ApiModelProperty(value = "入库人")
+	private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+	@ApiModelProperty(value = "入库部门")
+	private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "入库日期")
+	private java.util.Date operatorDate;
+	
+	@ExcelCollection(name="固定资产入库明细")
+	@ApiModelProperty(value = "固定资产入库明细")
+	private List<AssetInDetail> assetInDetailList;
+	
+}

+ 82 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/CarfarePage.java

@@ -0,0 +1,82 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.Carfare;
+import org.jeecg.modules.oa.entity.CarfareDetail;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 车辆费用报销
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="cd_carfarePage对象", description="车辆费用报销")
+public class CarfarePage {
+	
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	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")
+	@ApiModelProperty(value = "创建日期")
+	private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private java.lang.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")
+	@ApiModelProperty(value = "更新日期")
+	private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private java.lang.String sysOrgCode;
+	/**登记人*/
+	@Excel(name = "登记人", width = 15)
+	@ApiModelProperty(value = "登记人")
+	private java.lang.String registrant;
+	/**登记部门*/
+	@Excel(name = "登记部门", width = 15)
+	@ApiModelProperty(value = "登记部门")
+	private java.lang.String registrantDept;
+	/**报销总额*/
+	@Excel(name = "报销总额", width = 15)
+	@ApiModelProperty(value = "报销总额")
+	private java.math.BigDecimal totalAmount;
+	/**财务经办人*/
+	@Excel(name = "财务经办人", width = 15)
+	@ApiModelProperty(value = "财务经办人")
+	private java.lang.String financeOperator;
+	/**财务经办部门*/
+	@Excel(name = "财务经办部门", width = 15)
+	@ApiModelProperty(value = "财务经办部门")
+	private java.lang.String financeDept;
+	/**财务负责人*/
+	@Excel(name = "财务负责人", width = 15)
+	@ApiModelProperty(value = "财务负责人")
+	private java.lang.String financeHead;
+	
+	@ExcelCollection(name="车辆费用报销明细")
+	@ApiModelProperty(value = "车辆费用报销明细")
+	private List<CarfareDetail> carfareDetailList;
+	
+}

+ 80 - 0
jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/oa/vo/MaterialInPage.java

@@ -0,0 +1,80 @@
+package org.jeecg.modules.oa.vo;
+
+import java.util.List;
+import org.jeecg.modules.oa.entity.MaterialIn;
+import org.jeecg.modules.oa.entity.MaterialInDetail;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 物料入库等级
+ * @Author: jeecg-boot
+ * @Date:   2023-05-21
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="cd_material_inPage对象", description="物料入库等级")
+public class MaterialInPage {
+	
+	/**主键*/
+	@ApiModelProperty(value = "主键")
+	private java.lang.String id;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+	@ApiModelProperty(value = "创建人")
+	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")
+	@ApiModelProperty(value = "创建日期")
+	private java.util.Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+	@ApiModelProperty(value = "更新人")
+	private java.lang.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")
+	@ApiModelProperty(value = "更新日期")
+	private java.util.Date updateTime;
+	/**所属部门*/
+	@Excel(name = "所属部门", width = 15)
+	@ApiModelProperty(value = "所属部门")
+	private java.lang.String sysOrgCode;
+	/**入库人*/
+	@Excel(name = "入库人", width = 15)
+	@ApiModelProperty(value = "入库人")
+	private java.lang.String operator;
+	/**入库部门*/
+	@Excel(name = "入库部门", width = 15)
+	@ApiModelProperty(value = "入库部门")
+	private java.lang.String operatorDept;
+	/**入库日期*/
+	@Excel(name = "入库日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "入库日期")
+	private java.util.Date operateDate;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+	@ApiModelProperty(value = "备注")
+	private java.lang.String remark;
+	/**附件*/
+	@Excel(name = "附件", width = 15)
+	@ApiModelProperty(value = "附件")
+	private java.lang.String attachment;
+	
+	@ExcelCollection(name="物料入库明细")
+	@ApiModelProperty(value = "物料入库明细")
+	private List<MaterialInDetail> materialInDetailList;
+	
+}