From 20427934b518f0b6590df64689243cb5418005af Mon Sep 17 00:00:00 2001 From: zhangzq Date: Mon, 1 Dec 2025 11:04:35 +0800 Subject: [PATCH] =?UTF-8?q?add:=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/boge/common/query/QueryTEnum.java | 16 +- .../car/service/impl/CarServiceImpl.java | 11 +- .../client/controller/ClientController.java | 12 +- .../modules/client/entity/ClientQuery.java | 31 + .../service/impl/ClientServiceImpl.java | 2 +- .../controller/ContractController.java | 11 +- .../contract/entity/ContractQuery.java | 35 + .../modules/dict/service/ISysDictService.java | 7 + .../dict/service/impl/SysDictServiceImpl.java | 16 +- .../controller/MaterialController.java | 42 +- .../controller/MaterialPriceController.java | 126 +++ .../material/dao/MaterialPriceDao.java | 18 + .../material/dao/MaterialPriceQuery.java | 19 + .../modules/material/dao/MaterialQuery.java | 26 + .../material/entity/MaterialEntity.java | 16 +- .../material/entity/MaterialPriceEntity.java | 51 + .../service/MaterialPriceService.java | 23 + .../material/service/MaterialService.java | 6 +- .../impl/MaterialPriceServiceImpl.java | 66 ++ .../service/impl/MaterialServiceImpl.java | 94 +- .../modules/price/entity/PriceEntity.java | 20 +- .../controller/ProjectContractController.java | 13 +- .../entity/ProjectContractEntity.java | 4 + .../contract/entity/ProjectContractQuery.java | 33 + .../sys/service/impl/SysUserServiceImpl.java | 1 - base-vue/src/main.js | 2 +- base-vue/src/views/common/UploadDialog.vue | 128 +++ .../aftersales/aftersales-add-or-update.vue | 4 +- base-vue/src/views/modules/car/car.vue | 6 +- base-vue/src/views/modules/client/client.vue | 6 +- .../contract/contract-add-or-update.vue | 4 +- .../src/views/modules/knowledge/knowledge.vue | 4 +- .../src/views/modules/material/material.vue | 27 +- .../modules/material/物料导入模版.xlsx | Bin 0 -> 9541 bytes .../materialprice/material-add-or-update.vue | 127 +++ .../modules/materialprice/materialprice.vue | 224 ++++ .../modules/materialprice/price-list.vue | 171 +++ .../modules/price/price-add-or-update.vue | 981 +++++++++--------- base-vue/src/views/modules/price/price.vue | 2 +- .../contract/contract-add-or-update.vue | 9 +- .../modules/project/contract/contract.vue | 71 +- base-vue/src/views/modules/spare/spare.vue | 4 +- base-vue/src/views/modules/sys/config.vue | 4 +- base-vue/src/views/modules/sys/log.vue | 4 +- base-vue/src/views/modules/sys/role.vue | 4 +- base-vue/src/views/modules/sys/user.vue | 4 +- base-vue/src/views/modules/sys/usermy.vue | 4 +- base-vue/test/unit/setup.js | 2 +- 48 files changed, 1905 insertions(+), 586 deletions(-) create mode 100644 base-fast/src/main/java/com/boge/modules/client/entity/ClientQuery.java create mode 100644 base-fast/src/main/java/com/boge/modules/contract/entity/ContractQuery.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/controller/MaterialPriceController.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceDao.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceQuery.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/dao/MaterialQuery.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/entity/MaterialPriceEntity.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/service/MaterialPriceService.java create mode 100644 base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialPriceServiceImpl.java create mode 100644 base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractQuery.java create mode 100644 base-vue/src/views/common/UploadDialog.vue create mode 100644 base-vue/src/views/modules/material/物料导入模版.xlsx create mode 100644 base-vue/src/views/modules/materialprice/material-add-or-update.vue create mode 100644 base-vue/src/views/modules/materialprice/materialprice.vue create mode 100644 base-vue/src/views/modules/materialprice/price-list.vue diff --git a/base-fast/src/main/java/com/boge/common/query/QueryTEnum.java b/base-fast/src/main/java/com/boge/common/query/QueryTEnum.java index e509afd..704ec56 100644 --- a/base-fast/src/main/java/com/boge/common/query/QueryTEnum.java +++ b/base-fast/src/main/java/com/boge/common/query/QueryTEnum.java @@ -5,6 +5,7 @@ import lombok.Getter; import org.apache.commons.lang3.StringUtils; import java.util.Collection; +import java.util.function.Consumer; /** * s @@ -16,11 +17,24 @@ public enum QueryTEnum { // EQ((q, k, v) -> { q.eq(k[0],v); }), IN((q, key, o) -> { if (o instanceof Collection){ q.in(key[0],(Collection) o); } }), - LK((q, keys, o) -> { for (String key : keys) { q.like(key,o); } }), + LK((queryWrapper, keys, val) -> { + queryWrapper.nested((Consumer) query -> { + query.like(keys[0], val); + for (int i = 1; i < keys.length; i++) { + query.or(true).like(keys[i], val); + } + }); + }), LE((q, k, v) -> { q.le(k[0],v); }), + GE((q, k, v) -> { q.ge(k[0],v); }), BY((q, k, v) -> { q.orderByDesc(k[0],v); }), NO((q, k, v) -> { q.isNull(k[0]); }), LT((q, k, v) -> { q.lt(k[0],v); }), + BT((q, k, v) -> { q.between(k[0],((Object[])v)[0],((Object[])v)[1]); }), + LASTSQL((q, k, o) -> { + q.eq("1","1"); + q.last(String.valueOf(k[0])); + }), OREQ((q, k, v) -> { if (StringUtils.isBlank((String)v)){ q.isNull(k[0]); }else { q.eq(k[0],v); } }); private LConsumer doP; diff --git a/base-fast/src/main/java/com/boge/modules/car/service/impl/CarServiceImpl.java b/base-fast/src/main/java/com/boge/modules/car/service/impl/CarServiceImpl.java index 4648b98..e3c996b 100644 --- a/base-fast/src/main/java/com/boge/modules/car/service/impl/CarServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/car/service/impl/CarServiceImpl.java @@ -1,5 +1,6 @@ package com.boge.modules.car.service.impl; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -18,12 +19,14 @@ public class CarServiceImpl extends ServiceImpl implements Ca @Override public PageUtils queryPage(Map params) { + QueryWrapper query = new QueryWrapper<>(); + if (params.get("key") != null){ + query.like("car_name",params.get("key")); + } IPage page = this.page( - new Query().getPage(params), - new QueryWrapper() + new Query().getPage(params),query ); - return new PageUtils(page); } -} \ No newline at end of file +} diff --git a/base-fast/src/main/java/com/boge/modules/client/controller/ClientController.java b/base-fast/src/main/java/com/boge/modules/client/controller/ClientController.java index a2e6dd7..a630adb 100644 --- a/base-fast/src/main/java/com/boge/modules/client/controller/ClientController.java +++ b/base-fast/src/main/java/com/boge/modules/client/controller/ClientController.java @@ -3,6 +3,9 @@ package com.boge.modules.client.controller; import java.util.Arrays; import java.util.Map; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.boge.common.query.PageQuery; +import com.boge.modules.client.entity.ClientQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -18,7 +21,7 @@ import com.boge.common.utils.R; /** - * + * * * @author ls * @email dengpbs@163.com @@ -35,10 +38,9 @@ public class ClientController { */ @RequestMapping("/list") //@RequiresPermissions("client:client:list") - public R list(@RequestParam Map params){ - PageUtils page = clientService.queryPage(params); - - return R.ok().put("page", page); + public R list(PageQuery page, ClientQuery query){ + Page result = clientService.page(page.build(), query.build()); + return R.ok().put("page", new PageUtils(result)); } diff --git a/base-fast/src/main/java/com/boge/modules/client/entity/ClientQuery.java b/base-fast/src/main/java/com/boge/modules/client/entity/ClientQuery.java new file mode 100644 index 0000000..0fb5eb7 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/client/entity/ClientQuery.java @@ -0,0 +1,31 @@ +package com.boge.modules.client.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.boge.common.query.BaseQuery; +import com.boge.common.query.QParam; +import com.boge.common.query.QueryTEnum; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 公司 + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:46:19 + */ +@Data +public class ClientQuery extends BaseQuery { + + private String key; + + + @Override + public void paramMapping() { + super.doP.put("key", QParam.builder().k(new String[]{"client_name"}).type(QueryTEnum.LK).build()); + } + +} diff --git a/base-fast/src/main/java/com/boge/modules/client/service/impl/ClientServiceImpl.java b/base-fast/src/main/java/com/boge/modules/client/service/impl/ClientServiceImpl.java index e169fc6..34a8980 100644 --- a/base-fast/src/main/java/com/boge/modules/client/service/impl/ClientServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/client/service/impl/ClientServiceImpl.java @@ -26,4 +26,4 @@ public class ClientServiceImpl extends ServiceImpl impl return new PageUtils(page); } -} \ No newline at end of file +} diff --git a/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java b/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java index be483c1..a5aa45d 100644 --- a/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java +++ b/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java @@ -1,8 +1,12 @@ package com.boge.modules.contract.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.boge.common.query.PageQuery; import com.boge.common.utils.PageUtils; import com.boge.common.utils.R; +import com.boge.modules.client.entity.ClientQuery; import com.boge.modules.contract.entity.ContractEntity; +import com.boge.modules.contract.entity.ContractQuery; import com.boge.modules.contract.service.ContractService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -30,10 +34,9 @@ public class ContractController { */ @RequestMapping("/list") //@RequiresPermissions("flow:contract:list") - public R list(@RequestParam Map params){ - PageUtils page = contractService.queryPage(params); - - return R.ok().put("page", page); + public R list(PageQuery page, ContractQuery query){ + Page entityPage = contractService.page(page.build(), query.build()); + return R.ok().put("page", new PageUtils(entityPage)); } diff --git a/base-fast/src/main/java/com/boge/modules/contract/entity/ContractQuery.java b/base-fast/src/main/java/com/boge/modules/contract/entity/ContractQuery.java new file mode 100644 index 0000000..0c3bc1e --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/contract/entity/ContractQuery.java @@ -0,0 +1,35 @@ +package com.boge.modules.contract.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.boge.common.query.BaseQuery; +import com.boge.common.query.QParam; +import com.boge.common.query.QueryTEnum; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@Data +public class ContractQuery extends BaseQuery { + private Integer isValidity; + private Integer isAcceptance; + private Integer contractType; + private String contractNumber; + private String clientName; + + @Override + public void paramMapping() { + super.doP.put("contractNumber", QParam.builder().k(new String[]{"contract_number"}).type(QueryTEnum.LK).build()); + super.doP.put("clientName", QParam.builder().k(new String[]{"client_name"}).type(QueryTEnum.LK).build()); + super.doP.put("startTime", QParam.builder().k(new String[]{"acceptance_time"}).type(QueryTEnum.LT).build()); + super.doP.put("endTime", QParam.builder().k(new String[]{"acceptance_time"}).type(QueryTEnum.LE).build()); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/dict/service/ISysDictService.java b/base-fast/src/main/java/com/boge/modules/dict/service/ISysDictService.java index 1992566..6d44b10 100644 --- a/base-fast/src/main/java/com/boge/modules/dict/service/ISysDictService.java +++ b/base-fast/src/main/java/com/boge/modules/dict/service/ISysDictService.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.boge.common.query.PageQuery; import com.boge.modules.dict.dao.Dict; import com.boge.modules.dict.dto.DictQuery; +import liquibase.pro.packaged.I; import java.util.List; @@ -85,4 +86,10 @@ public interface ISysDictService extends IService { * @return */ List queryAll(); + + /** + * 查询label,value + * @return + */ + Map getAllLable(); } diff --git a/base-fast/src/main/java/com/boge/modules/dict/service/impl/SysDictServiceImpl.java b/base-fast/src/main/java/com/boge/modules/dict/service/impl/SysDictServiceImpl.java index 450724e..a4a16b8 100644 --- a/base-fast/src/main/java/com/boge/modules/dict/service/impl/SysDictServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/dict/service/impl/SysDictServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.boge.common.exception.RRException; +import com.boge.common.query.MapOf; import com.boge.common.query.PageQuery; import com.boge.common.utils.ShiroUtils; import com.boge.modules.dict.dao.Dict; @@ -17,14 +18,12 @@ import com.boge.modules.dict.dao.mapper.SysDictMapper; import com.boge.modules.dict.dto.DictQuery; import com.boge.modules.dict.service.ISysDictService; import com.boge.modules.sys.entity.SysUserEntity; +import liquibase.pro.packaged.S; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; /** *

@@ -202,4 +201,13 @@ public class SysDictServiceImpl extends ServiceImpl impleme .groupBy(Dict::getCode, Dict::getName)); } + @Override + public Map getAllLable() { + List dicts = sysDictMapper.selectList(new QueryWrapper().select("value", "label")); + Map result = new HashMap<>(); + for (Dict dict : dicts) { + result.put(dict.getLabel(),dict.getValue()); + } + return result; + } } diff --git a/base-fast/src/main/java/com/boge/modules/material/controller/MaterialController.java b/base-fast/src/main/java/com/boge/modules/material/controller/MaterialController.java index 897c723..9defb96 100644 --- a/base-fast/src/main/java/com/boge/modules/material/controller/MaterialController.java +++ b/base-fast/src/main/java/com/boge/modules/material/controller/MaterialController.java @@ -1,24 +1,32 @@ package com.boge.modules.material.controller; import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.boge.common.query.PageQuery; +import com.boge.modules.dept.util.PageUtil; +import com.boge.modules.material.dao.MaterialQuery; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; import com.boge.modules.material.entity.MaterialEntity; import com.boge.modules.material.service.MaterialService; import com.boge.common.utils.PageUtils; import com.boge.common.utils.R; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** - * + * * * @author ls * @email dengpbs@163.com @@ -35,13 +43,11 @@ public class MaterialController { */ @RequestMapping("/list") //@RequiresPermissions("material:material:list") - public R list(@RequestParam Map params){ - PageUtils page = materialService.queryPage(params); - - return R.ok().put("page", page); + public R list(PageQuery page, MaterialQuery query){ + Page entityPage = materialService.page(page.build(), query.build()); + return R.ok().put("page", new PageUtils(entityPage)); } - /** * 信息 */ @@ -64,6 +70,20 @@ public class MaterialController { return R.ok(); } + /** + * 批量导入 + * @param + * @return + */ + @PostMapping("/importExcel") + //@RequiresPermissions("material:material:save") + public R batchSave(@RequestParam("file") MultipartFile file){ + List list = materialService.importMarial(file); + if (!CollectionUtils.isEmpty(list)){ + return R.error(list.stream().collect(Collectors.joining(","))); + } + return R.ok(); + } /** * 修改 */ diff --git a/base-fast/src/main/java/com/boge/modules/material/controller/MaterialPriceController.java b/base-fast/src/main/java/com/boge/modules/material/controller/MaterialPriceController.java new file mode 100644 index 0000000..b11db3c --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/controller/MaterialPriceController.java @@ -0,0 +1,126 @@ +package com.boge.modules.material.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.boge.common.base.TableDataInfo; +import com.boge.common.query.PageQuery; +import com.boge.common.utils.R; +import com.boge.common.utils.ShiroUtils; +import com.boge.modules.material.dao.MaterialPriceQuery; +import com.boge.modules.material.entity.MaterialEntity; +import com.boge.modules.material.entity.MaterialPriceEntity; +import com.boge.modules.material.service.MaterialPriceService; +import com.boge.modules.material.service.MaterialService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 20:06:39 + */ +@RestController +@RequestMapping("materialPrice") +public class MaterialPriceController { + @Autowired + private MaterialService materialService; + @Autowired + private MaterialPriceService materialPriceService; + + /** + * 信息 + */ + @RequestMapping("/info") + //@RequiresPermissions("material:material:info") + public R info(PageQuery page, MaterialPriceQuery query){ + page.setSort("id,desc"); + Page entityPage = materialPriceService.page(page.build(), query.build()); + return R.ok().put("data",entityPage.getRecords()) + .put("page",page.getPage()) + .put("size",page.getSize()).put("total",entityPage.getTotal()); + } + + /** + * 保存 + */ + @RequestMapping("/save") + //@RequiresPermissions("material:material:save") + public R save(@RequestBody MaterialPriceEntity material){ + material.setCreateTime(new Date()); + material.setCreateName(ShiroUtils.getUserEntity().getNickname()); + materialPriceService.save(material); + return R.ok(); + } + /** + * 价格变动 + */ + @RequestMapping("/use") + //@RequiresPermissions("material:material:save") + public R use(@RequestBody MaterialPriceEntity price){ + materialService.update(new UpdateWrapper() + .set("cost_price",price.getCostPrice()) + .set("sale_price",price.getSalePrice()) + .set("update_time",new Date()) + .set("update_Name", ShiroUtils.getUserEntity().getNickname()) + .set("sale_price",price.getSalePrice()) + .eq("material_code",price.getMaterialCode())); + return R.ok(); + } + /** + * 批量导入 + * @param + * @return + */ + @PostMapping("/importExcel") + //@RequiresPermissions("material:material:save") + public R batchSave(@RequestParam("file") MultipartFile file){ + List list = materialService.importMarial(file); + if (!CollectionUtils.isEmpty(list)){ + return R.error(list.stream().collect(Collectors.joining(","))); + } + return R.ok(); + } + /** + * 修改单价 + */ + @RequestMapping("/update") + //@RequiresPermissions("material:material:update") + public R update(@RequestBody MaterialEntity price){ + Date date = new Date(); + MaterialPriceEntity priceEntity = new MaterialPriceEntity(); + priceEntity.setCostPrice(price.getCostPrice()); + priceEntity.setSalePrice(price.getSalePrice()); + priceEntity.setMaterialCode(price.getMaterialCode()); + priceEntity.setCreateTime(date); + priceEntity.setCreateName(ShiroUtils.getUserEntity().getNickname()); + materialPriceService.save(priceEntity); + price.setUpdateTime(date); + price.setUpdateName(ShiroUtils.getUserEntity().getNickname()); + materialService.updateById(price); + return R.ok(); + } + + /** + * 删除 + */ + @RequestMapping("/delete") + //@RequiresPermissions("material:material:delete") + public R delete(@RequestBody Long[] materialIds){ + materialPriceService.removeByIds(Arrays.asList(materialIds)); + return R.ok(); + } + +} diff --git a/base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceDao.java b/base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceDao.java new file mode 100644 index 0000000..4d1cdda --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceDao.java @@ -0,0 +1,18 @@ +package com.boge.modules.material.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.modules.material.entity.MaterialEntity; +import com.boge.modules.material.entity.MaterialPriceEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 20:06:39 + */ +@Mapper +public interface MaterialPriceDao extends BaseMapper { + +} diff --git a/base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceQuery.java b/base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceQuery.java new file mode 100644 index 0000000..e9e7b37 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/dao/MaterialPriceQuery.java @@ -0,0 +1,19 @@ +package com.boge.modules.material.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.common.query.BaseQuery; +import com.boge.modules.material.entity.MaterialPriceEntity; +import lombok.Data; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 20:06:39 + */ +@Data +public class MaterialPriceQuery extends BaseQuery { + private String materialCode; +} diff --git a/base-fast/src/main/java/com/boge/modules/material/dao/MaterialQuery.java b/base-fast/src/main/java/com/boge/modules/material/dao/MaterialQuery.java new file mode 100644 index 0000000..6b0c431 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/dao/MaterialQuery.java @@ -0,0 +1,26 @@ +package com.boge.modules.material.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.common.query.BaseQuery; +import com.boge.common.query.QParam; +import com.boge.common.query.QueryTEnum; +import com.boge.modules.material.entity.MaterialEntity; +import lombok.Data; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 20:06:39 + */ +@Data +public class MaterialQuery extends BaseQuery { + private String key; + + @Override + public void paramMapping() { + super.doP.put("key", QParam.builder().k(new String[]{"material_code","material_name"}).type(QueryTEnum.LK).build()); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/material/entity/MaterialEntity.java b/base-fast/src/main/java/com/boge/modules/material/entity/MaterialEntity.java index 951a2f2..eb2c258 100644 --- a/base-fast/src/main/java/com/boge/modules/material/entity/MaterialEntity.java +++ b/base-fast/src/main/java/com/boge/modules/material/entity/MaterialEntity.java @@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; -import liquibase.pro.packaged.S; import lombok.Data; /** @@ -53,6 +53,18 @@ public class MaterialEntity implements Serializable { /** * 创建时间 */ - private Date createTime; + private Date updateTime; + /** + * 创建人 + */ + private String updateName; + /** + * 成本价 + */ + private BigDecimal costPrice; + /** + * 销售价 + */ + private BigDecimal salePrice; } diff --git a/base-fast/src/main/java/com/boge/modules/material/entity/MaterialPriceEntity.java b/base-fast/src/main/java/com/boge/modules/material/entity/MaterialPriceEntity.java new file mode 100644 index 0000000..b6628e9 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/entity/MaterialPriceEntity.java @@ -0,0 +1,51 @@ +package com.boge.modules.material.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 20:06:39 + */ +@Data +@TableName("sys_material_price") +public class MaterialPriceEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId + private Long id; + /** + * 物料编码 + */ + private String materialCode; + + /** + * 成本价 + */ + private BigDecimal costPrice; + /** + * 销售价 + */ + private BigDecimal salePrice; + + /** + * 创建时间 + */ + private Date createTime; + /** + * 物料编码 + */ + private String createName; + +} diff --git a/base-fast/src/main/java/com/boge/modules/material/service/MaterialPriceService.java b/base-fast/src/main/java/com/boge/modules/material/service/MaterialPriceService.java new file mode 100644 index 0000000..1a5921d --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/service/MaterialPriceService.java @@ -0,0 +1,23 @@ +package com.boge.modules.material.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.boge.common.utils.PageUtils; +import com.boge.modules.material.entity.MaterialEntity; +import com.boge.modules.material.entity.MaterialPriceEntity; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 20:06:39 + */ +public interface MaterialPriceService extends IService { + + List importMarial(MultipartFile file); +} + diff --git a/base-fast/src/main/java/com/boge/modules/material/service/MaterialService.java b/base-fast/src/main/java/com/boge/modules/material/service/MaterialService.java index 1140b2d..dfc211f 100644 --- a/base-fast/src/main/java/com/boge/modules/material/service/MaterialService.java +++ b/base-fast/src/main/java/com/boge/modules/material/service/MaterialService.java @@ -3,11 +3,13 @@ package com.boge.modules.material.service; import com.baomidou.mybatisplus.extension.service.IService; import com.boge.common.utils.PageUtils; import com.boge.modules.material.entity.MaterialEntity; +import org.springframework.web.multipart.MultipartFile; +import java.util.List; import java.util.Map; /** - * + * * * @author ls * @email dengpbs@163.com @@ -16,5 +18,7 @@ import java.util.Map; public interface MaterialService extends IService { PageUtils queryPage(Map params); + + List importMarial(MultipartFile file); } diff --git a/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialPriceServiceImpl.java b/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialPriceServiceImpl.java new file mode 100644 index 0000000..f460a64 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialPriceServiceImpl.java @@ -0,0 +1,66 @@ +package com.boge.modules.material.service.impl; + +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.boge.common.exception.RRException; +import com.boge.common.utils.PageUtils; +import com.boge.common.utils.Query; +import com.boge.modules.dict.service.ISysDictService; +import com.boge.modules.material.dao.MaterialDao; +import com.boge.modules.material.dao.MaterialPriceDao; +import com.boge.modules.material.entity.MaterialEntity; +import com.boge.modules.material.entity.MaterialPriceEntity; +import com.boge.modules.material.service.MaterialPriceService; +import com.boge.modules.material.service.MaterialService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; + + +@Service() +public class MaterialPriceServiceImpl extends ServiceImpl implements MaterialPriceService { + + @Override + public List importMarial(MultipartFile file){ + if (file==null){ + throw new RRException("文件不存在"); + } + List errorInfo = new ArrayList<>(); + List entitys = new ArrayList<>(); + Map codeLine = new HashMap<>(); + InputStream inputStream = null; + try { + inputStream = file.getInputStream(); + ExcelReader excelReader = ExcelUtil.getReader(inputStream); + List> read = excelReader.read(); + Date date = new Date(); + for (int i = 1; i < read.size(); i++) { + List row = read.get(i); + } + if (CollectionUtils.isEmpty(errorInfo)){ + + } + }catch (Exception ex){ + throw new RRException(ex.getMessage()); + }finally { + if (inputStream!=null){ + try { + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + return errorInfo; + } +} diff --git a/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialServiceImpl.java b/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialServiceImpl.java index 581c277..30a02be 100644 --- a/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/material/service/impl/MaterialServiceImpl.java @@ -1,7 +1,24 @@ package com.boge.modules.material.service.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import com.alibaba.fastjson.JSON; +import com.boge.common.exception.RRException; +import com.boge.common.utils.ShiroUtils; +import com.boge.modules.dict.service.ISysDictService; +import lombok.val; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Map; + +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.stream.Collectors; + import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -11,11 +28,16 @@ import com.boge.common.utils.Query; import com.boge.modules.material.dao.MaterialDao; import com.boge.modules.material.entity.MaterialEntity; import com.boge.modules.material.service.MaterialService; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; @Service("materialService") public class MaterialServiceImpl extends ServiceImpl implements MaterialService { + @Autowired + private ISysDictService iSysDictService; + @Override public PageUtils queryPage(Map params) { IPage page = this.page( @@ -26,4 +48,72 @@ public class MaterialServiceImpl extends ServiceImpl importMarial(MultipartFile file){ + if (file==null){ + throw new RRException("文件不存在"); + } + List errorInfo = new ArrayList<>(); + InputStream inputStream = null; + try { + inputStream = file.getInputStream(); + ExcelReader excelReader = ExcelUtil.getReader(inputStream); + List> read = excelReader.read(); + + List entitys = new ArrayList<>(); + Map codeLine = new HashMap<>(); + Map allLable = iSysDictService.getAllLable(); + Date date = new Date(); + String user = ShiroUtils.getUserEntity().getNickname(); + for (int i = 1; i < read.size(); i++) { + List row = read.get(i); + if (CollectionUtils.isEmpty(row)){ + continue; + } + if (row.size()<5){ + errorInfo.add("当前行"+i+":"+"参数不全"); + continue; + } + codeLine.put(String.valueOf( row.get(0)),i); + + String type = allLable.get(String.valueOf(row.get(4))); + if (StringUtils.isEmpty(type)){ + errorInfo.add("当前行"+i+":"+"物料类型不存在"); + continue; + } + MaterialEntity entity = new MaterialEntity(); + entity.setMaterialCode(String.valueOf( row.get(0))); + entity.setMaterialName(String.valueOf( row.get(1))); + entity.setMaterialSpec(String.valueOf( row.get(2))); + entity.setUnitName(String.valueOf( row.get(3))); + entity.setUpdateTime(date); + entity.setUpdateName(user); + entity.setMaterialType(Integer.valueOf(type)); + entitys.add(entity); + } + List materialCodes = entitys.stream().map(MaterialEntity::getMaterialCode).collect(Collectors.toList()); + List has = this.baseMapper.selectList(new QueryWrapper() + .in("material_code", materialCodes)); + if (!CollectionUtils.isEmpty(has)){ + has.forEach(a->{ + Integer integer = codeLine.get(a.getMaterialCode()); + errorInfo.add("当前行"+integer+":"+a.getMaterialCode()+"编码数据已存在"); + }); + } + if (CollectionUtils.isEmpty(errorInfo)){ + this.saveBatch(entitys); + } + }catch (Exception ex){ + throw new RRException(ex.getMessage()); + }finally { + if (inputStream!=null){ + try { + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + return errorInfo; + } +} diff --git a/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java b/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java index 173f32f..e4093e6 100644 --- a/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java +++ b/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java @@ -38,24 +38,20 @@ public class PriceEntity implements Serializable { */ private String quoter; /** - * 接收人 + * 发货方信息 */ private String fattn; - /** - * 联系方式 - */ + private String fmobile; + private String finc; + private String fadd; private String ftel; /** - * 客户id - */ - private Long clientId; - /** - * 客户接收人 + * 收货方信息 */ private String tattn; - /** - * 客户接收人联系方法 - */ + private String tmobile; + private String tinc; + private String tadd; private String ttel; /** * 物料信息 diff --git a/base-fast/src/main/java/com/boge/modules/project/contract/controller/ProjectContractController.java b/base-fast/src/main/java/com/boge/modules/project/contract/controller/ProjectContractController.java index 134b4ca..ac24cc8 100644 --- a/base-fast/src/main/java/com/boge/modules/project/contract/controller/ProjectContractController.java +++ b/base-fast/src/main/java/com/boge/modules/project/contract/controller/ProjectContractController.java @@ -1,8 +1,13 @@ package com.boge.modules.project.contract.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.boge.common.query.PageQuery; import com.boge.common.utils.PageUtils; import com.boge.common.utils.R; +import com.boge.modules.contract.entity.ContractEntity; +import com.boge.modules.contract.entity.ContractQuery; import com.boge.modules.project.contract.entity.ProjectContractEntity; +import com.boge.modules.project.contract.entity.ProjectContractQuery; import com.boge.modules.project.contract.service.ProjectContractService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -30,13 +35,11 @@ public class ProjectContractController { */ @RequestMapping("/list") //@RequiresPermissions("flow:contract:list") - public R list(@RequestParam Map params){ - PageUtils page = contractService.queryPage(params); - - return R.ok().put("page", page); + public R list(PageQuery page, ProjectContractQuery query) { + Page entityPage = contractService.page(page.build(), query.build()); + return R.ok().put("page", new PageUtils(entityPage)); } - /** * 信息 */ diff --git a/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractEntity.java b/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractEntity.java index 8c26f46..b50cd2f 100644 --- a/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractEntity.java +++ b/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractEntity.java @@ -42,6 +42,10 @@ public class ProjectContractEntity implements Serializable { * 客户id */ private Long clientId; + /** + * 客户id + */ + private String clientName; /** * 物料信息 */ diff --git a/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractQuery.java b/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractQuery.java new file mode 100644 index 0000000..b5ce83c --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/project/contract/entity/ProjectContractQuery.java @@ -0,0 +1,33 @@ +package com.boge.modules.project.contract.entity; + +import com.boge.common.query.BaseQuery; +import com.boge.common.query.QParam; +import com.boge.common.query.QueryTEnum; +import com.boge.modules.contract.entity.ContractEntity; +import lombok.Data; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@Data +public class ProjectContractQuery extends BaseQuery { + private Integer isValidity; + private Integer isAcceptance; + private Integer contractType; + private String contractNumber; + private String[] acceptanceTime; + private String clientName; + + @Override + public void paramMapping() { + super.doP.put("contractNumber", QParam.builder().k(new String[]{"contract_number"}).type(QueryTEnum.LK).build()); + super.doP.put("clientName", QParam.builder().k(new String[]{"client_name"}).type(QueryTEnum.LK).build()); + super.doP.put("startTime", QParam.builder().k(new String[]{"acceptance_time"}).type(QueryTEnum.GE).build()); + super.doP.put("endTime", QParam.builder().k(new String[]{"acceptance_time"}).type(QueryTEnum.LE).build()); + super.doP.put("isValidity", QParam.builder().k(new String[]{"AND NOW()"+(Integer.valueOf(1).equals(isValidity)?"<=":">")+" DATE_ADD(acceptance_time, INTERVAL validity DAY)"}).type(QueryTEnum.LASTSQL).build()); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/service/impl/SysUserServiceImpl.java b/base-fast/src/main/java/com/boge/modules/sys/service/impl/SysUserServiceImpl.java index a4d08ac..eda7aa4 100644 --- a/base-fast/src/main/java/com/boge/modules/sys/service/impl/SysUserServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/sys/service/impl/SysUserServiceImpl.java @@ -50,7 +50,6 @@ public class SysUserServiceImpl extends ServiceImpl i @Override public PageUtils queryPage(Map params) { String username = (String)params.get("username"); - Long createUserId = (Long)params.get("createUserId"); IPage page = this.page( new Query().getPage(params), new QueryWrapper() diff --git a/base-vue/src/main.js b/base-vue/src/main.js index ee31c82..ae3447c 100644 --- a/base-vue/src/main.js +++ b/base-vue/src/main.js @@ -24,7 +24,7 @@ import './style/bpmn-custom-color.css' // 导入自定义的样式文件 Vue.prototype.$echarts = echarts; Vue.use(VueCookie) Vue.use(ElementUI) -Vue.config.productionTip = false +Vue.config.productionTip = true // 非生产环境, 适配mockjs模拟数据 // api: https://github.com/nuysoft/Mock if (process.env.NODE_ENV !== 'production') { diff --git a/base-vue/src/views/common/UploadDialog.vue b/base-vue/src/views/common/UploadDialog.vue new file mode 100644 index 0000000..7e057a6 --- /dev/null +++ b/base-vue/src/views/common/UploadDialog.vue @@ -0,0 +1,128 @@ + + + + diff --git a/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue b/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue index 1b4b8a0..597a18c 100644 --- a/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue +++ b/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue @@ -227,10 +227,10 @@ width="50"> + label="序号"> - + 查询 @@ -24,10 +24,10 @@ width="50"> + label="序号"> - + 查询 @@ -24,10 +24,10 @@ width="50"> + label="序号"> + label="序号"> + label="序号"> - + 查询 新增 + 导入 批量删除 @@ -24,10 +25,10 @@ width="50"> + label="序号"> + label="操作人"> + + + + diff --git a/base-vue/src/views/modules/materialprice/materialprice.vue b/base-vue/src/views/modules/materialprice/materialprice.vue new file mode 100644 index 0000000..f3d3052 --- /dev/null +++ b/base-vue/src/views/modules/materialprice/materialprice.vue @@ -0,0 +1,224 @@ + + + diff --git a/base-vue/src/views/modules/materialprice/price-list.vue b/base-vue/src/views/modules/materialprice/price-list.vue new file mode 100644 index 0000000..ff78efd --- /dev/null +++ b/base-vue/src/views/modules/materialprice/price-list.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/base-vue/src/views/modules/price/price-add-or-update.vue b/base-vue/src/views/modules/price/price-add-or-update.vue index 2ad6f11..1a71790 100644 --- a/base-vue/src/views/modules/price/price-add-or-update.vue +++ b/base-vue/src/views/modules/price/price-add-or-update.vue @@ -1,525 +1,528 @@ - - diff --git a/base-vue/src/views/modules/price/price.vue b/base-vue/src/views/modules/price/price.vue index 64acf41..9aa131b 100644 --- a/base-vue/src/views/modules/price/price.vue +++ b/base-vue/src/views/modules/price/price.vue @@ -150,7 +150,7 @@ dataListSelections: [], addOrUpdateVisible: false, tempVisible: false, - dictConfigs: [{type: 'dict', code: 'contract_type'}, {url: '/client/client/list', type: 'list', value: 'clientId', label: 'clientName'}], + dictConfigs: [{type: 'dict', code: 'contract_type'}, {url: '/client/client/list', type: 'list', value: 'clientId', label: 'clientName'}, {url: '/sys/user/list', type: 'list', value: 'userId', label: 'username'}], statusOpt: [{value: '1', label: '未审核'}, {value: '2', label: '审核通过'}, {value: '3', label: '审核驳回'}] } }, diff --git a/base-vue/src/views/modules/project/contract/contract-add-or-update.vue b/base-vue/src/views/modules/project/contract/contract-add-or-update.vue index d863737..1ddee7d 100644 --- a/base-vue/src/views/modules/project/contract/contract-add-or-update.vue +++ b/base-vue/src/views/modules/project/contract/contract-add-or-update.vue @@ -18,7 +18,7 @@ - + + label="序号">
- - + + + + + + + + + + + + + + + + + + + + + + + + + + + 查询 @@ -128,7 +171,12 @@ data () { return { dataForm: { - key: '' + isValidity: null, + isAcceptance: null, + acceptanceTime: [], + contractType: null, + contractNumber: null, + clientName: null }, dataList: [], pageIndex: 1, @@ -138,7 +186,7 @@ dataListSelections: [], addOrUpdateVisible: false, tempVisible: false, - dictConfigs: [{type: 'dict', code: 'contract_type'}, {url: '/client/client/list', type: 'list', value: 'clientId', label: 'clientName'}], + dictConfigs: [{type: 'dict', code: 'contract_type'}, {url: '/client/client/list', type: 'list', value: 'clientId', label: 'clientName'}, {type: 'dict', code: 'onoff'}], } }, mixins: [apiUtils], @@ -153,13 +201,26 @@ // 获取数据列表 getDataList () { this.dataListLoading = true + let startTime = null + let endTime = null + if (this.dataForm.acceptanceTime != null && this.dataForm.acceptanceTime.length > 1){ + // eslint-disable-next-line no-unused-expressions + startTime = this.dataForm.acceptanceTime[0] + endTime = this.dataForm.acceptanceTime[1] + } this.$http({ url: this.$http.adornUrl('/flow/projectContract/list'), method: 'get', params: this.$http.adornParams({ 'page': this.pageIndex, 'limit': this.pageSize, - 'key': this.dataForm.key + 'isValidity': this.dataForm.isValidity, + 'isAcceptance': this.dataForm.isAcceptance, + 'startTime': startTime, + 'endTime': endTime, + 'contractType': this.dataForm.contractType, + 'contractNumber': this.dataForm.contractNumber, + 'clientName': this.dataForm.clientName }) }).then(({data}) => { if (data && data.code === 0) { diff --git a/base-vue/src/views/modules/spare/spare.vue b/base-vue/src/views/modules/spare/spare.vue index a62ca85..a09f3ea 100644 --- a/base-vue/src/views/modules/spare/spare.vue +++ b/base-vue/src/views/modules/spare/spare.vue @@ -24,10 +24,10 @@ width="50"> + label="序号"> + label="序号"> + label="序号"> + label="序号"> + label="序号"> + label="序号">