From 309b9804b486aff7cea8de08953d297da0e0ad32 Mon Sep 17 00:00:00 2001 From: aikai Date: Fri, 28 Feb 2025 10:46:31 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=81=87=E6=9C=9F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/crmcontract/CrmContractMapper.xml | 2 +- .../holidayuserrecord/HolidayUserRecordServiceImpl.java | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/crmcontract/CrmContractMapper.xml b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/crmcontract/CrmContractMapper.xml index e8262664..72815c3f 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/crmcontract/CrmContractMapper.xml +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/crmcontract/CrmContractMapper.xml @@ -98,7 +98,7 @@ a.deleted = 0 and b.deleted = 0 - + AND a.owner_user_id in #{id} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java index 484217eb..04a81d67 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/holiday/holidayuserrecord/HolidayUserRecordServiceImpl.java @@ -281,9 +281,11 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { String year = String.valueOf(now.getYear()); newHolidayUserDOList.forEach( a -> { - newHolidayUserEmploymentRecordDOList.add(new HolidayUserEmploymentRecordDO().setUserId(a.getUserId()) - .setHolidaySettingId(holidaySetting.getId()) - .setYearNum(year)); + if (BigDecimal.ZERO.compareTo(a.getHolidayBalance()) > 0) { + newHolidayUserEmploymentRecordDOList.add(new HolidayUserEmploymentRecordDO().setUserId(a.getUserId()) + .setHolidaySettingId(holidaySetting.getId()) + .setYearNum(year)); + } } ); if (CollUtil.isNotEmpty(newHolidayUserEmploymentRecordDOList)) { @@ -300,6 +302,7 @@ public class HolidayUserRecordServiceImpl implements HolidayUserRecordService { List users = this.getUsersByRange(holidaySetting, holidaySettingRangeDOS); // -- 计算获取每个人的假期额度 Map userQuotaMap = this.getQuotaMap(users, holidayBalanceSettingDO, holidayWorkingAgeDOS); + log.info("计算获取每个人的假期额度 userQuotaMap:{}", userQuotaMap); // -- 获取用户的假期表 List userIds = users.stream().map(AdminUserDO::getId).collect(Collectors.toList()); Map userMap = users.stream().collect(Collectors.toMap(AdminUserDO::getId, a -> a)); From 47d41c7bcc8f5f4a0f271adf221739182ffffc13 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 1 Mar 2025 18:01:46 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat(bpm):=20=E4=BC=98=E5=8C=96=E5=90=88?= =?UTF-8?q?=E5=90=8C=E5=92=8C=E5=9B=9E=E6=AC=BE=E9=A1=B5=E9=9D=A2=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -重构了合同和回款页面的查询逻辑,支持"我的"和"下属"两种关系的查询- 新增 UserLiveTreeApi接口,用于获取用户结构树 - 优化了 SQL 查询条件,提高了查询效率 - 新增厂区配件领用相关功能 --- .../FinancialPaymentController.java | 6 + .../oa/vo/receipt/BpmOAReceiptPageReqVO.java | 3 + .../FinancialPaymentMapper.java | 3 + .../bpm/dal/mysql/oa/BpmOAContractMapper.java | 21 +--- .../bpm/dal/mysql/oa/BpmOAReceiptMapper.java | 22 +--- .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 3 +- .../rpc/config/RpcConfiguration.java | 3 +- .../FinancialPaymentService.java | 7 ++ .../FinancialPaymentServiceImpl.java | 6 + .../service/oa/BpmOAContractServiceImpl.java | 14 ++- .../service/oa/BpmOAReceiptServiceImpl.java | 26 +++- .../FinancialPaymentMapper.xml | 61 +++++++++ .../hrm/api/userlivetree/UserLiveTreeApi.java | 27 ++++ .../api/userlivetree/UserLiveTreeApiImpl.java | 29 +++++ .../vo/customer/RentalCustomerSaveReqVO.java | 1 - .../enums/ErrorCodeConstants.java | 1 + .../AccessoriesCollarController.java | 93 ++++++++++++++ .../vo/AccessoriesCollarPageReqVO.java | 32 +++++ .../vo/AccessoriesCollarRespVO.java | 52 ++++++++ .../vo/AccessoriesCollarSaveReqVO.java | 36 ++++++ .../factoryinfo/FactoryInfoController.java | 11 ++ .../admin/factoryinfo/vo/FactoryProfitVO.java | 107 ++++++++++++++++ .../admin/staff/StaffController.java | 2 +- .../AccessoriesCollarDO.java | 56 +++++++++ .../AccessoriesCollarMapper.java | 27 ++++ .../mysql/factoryinfo/FactoryInfoMapper.java | 4 + .../AccessoriesCollarService.java | 55 +++++++++ .../AccessoriesCollarServiceImpl.java | 74 +++++++++++ .../factoryinfo/FactoryInfoService.java | 10 ++ .../factoryinfo/FactoryInfoServiceImpl.java | 31 +++++ .../service/staff/StaffServiceImpl.java | 4 +- .../mapper/factoryinfo/FactoryInfoMapper.xml | 116 ++++++++++++++++++ 32 files changed, 899 insertions(+), 44 deletions(-) create mode 100644 yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java index 6e6e0e7a..261e080c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java @@ -106,4 +106,10 @@ public class FinancialPaymentController { return success(BeanUtils.toBean(pageResult, FinancialPaymentRespVO.class)); } + @GetMapping("/total") + @Operation(summary = "获得财务支付统计信息") + public CommonResult getPaymentTotal(@Valid FinancialPaymentPageReqVO pageReqVO) { + FinancialPaymentDO paymentDO = financialPaymentService.getPaymentTotal(pageReqVO); + return success(BeanUtils.toBean(paymentDO, FinancialPaymentRespVO.class)); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java index 39956594..b0c9855d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java @@ -28,4 +28,7 @@ public class BpmOAReceiptPageReqVO extends PageParam { @Schema(description = "查询模式") private String relation; + + @Schema(description = "合同编号") + private Long contractId; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java index 49c6aa4c..ed5849e8 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.financialpayment; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentPageReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -41,4 +42,6 @@ public interface FinancialPaymentMapper extends BaseMapperX * @param ids */ void cancel(@Param("ids") List ids); + + FinancialPaymentDO selectPaymentTotal(@Param("vo") FinancialPaymentPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java index 98c6959b..3e45f076 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java @@ -23,7 +23,7 @@ import java.util.Objects; @Mapper public interface BpmOAContractMapper extends BaseMapperX { default PageResult selectPage(BpmOAContractPageReqVO pageReqVO, - Long userId) { + List userIds) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); query.selectAll(BpmOAContractDO.class); @@ -39,25 +39,10 @@ public interface BpmOAContractMapper extends BaseMapperX { query.likeIfPresent(BpmOAContractDO::getCustomerName, pageReqVO.getCustomerName()); query.eqIfPresent(BpmOAContractDO::getStatus, pageReqVO.getStatus()); query.eqIfPresent(BpmOAContractDO::getResult, pageReqVO.getResult()); + query.inIfPresent(BpmOAContractDO::getUserId, userIds); query.apply(Objects.nonNull(pageReqVO.getSignatoryName()),"u.nickname Like CONCAT('%', {0}, '%')", pageReqVO.getSignatoryName()); query.apply(Objects.nonNull(pageReqVO.getCreateName()),"u1.nickname Like CONCAT('%', {0}, '%')", pageReqVO.getCreateName()); - if ("my".equals(pageReqVO.getRelation())) { - query.eq(BpmOAContractDO::getUserId, userId); - }else if ("sub".equals(pageReqVO.getRelation())){ - query.innerJoin("(" + - "\tSELECT DISTINCT\n" + - "\t\tu.id \n" + - "\tFROM\n" + - "\t\tsystem_users u\n" + - "\t\tINNER JOIN system_dept d ON d.leader_user_id = "+ userId +"\n" + - "\t\tINNER JOIN system_dept d1 ON d1.flag LIKE CONCAT( '%', d.id, '-' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '%-', d.id, '-%' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '-', d.id, '%' ) \n" + - "\tWHERE\n" + - "\t\tu.dept_id = d1.id \n" + - "\t\tAND u.STATUS = 0 \n" + - "\t) subordinate ON subordinate.id = t.user_id"); - } + query.orderByDesc(BpmOAContractDO::getCreateTime); return selectJoinPage(pageReqVO, BpmOAContractRespVO.class, query); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java index b3f357ad..a15513df 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; @@ -18,7 +19,7 @@ import java.util.Objects; @Mapper public interface BpmOAReceiptMapper extends BaseMapperX { - default PageResult selectReceiptPage(BpmOAReceiptPageReqVO pageReqVO, Long userId) { + default PageResult selectReceiptPage(BpmOAReceiptPageReqVO pageReqVO, List userIds) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); query.selectAll(BpmOAReceiptDO.class); @@ -29,26 +30,11 @@ public interface BpmOAReceiptMapper extends BaseMapperX { query.leftJoin(BpmOAContractDO.class, "c", BpmOAContractDO::getId, BpmOAReceiptDO::getContractId); query.leftJoin("system_users u on u.id = t.creator"); query.eqIfPresent(BpmOAReceiptDO::getResult, pageReqVO.getResult()); + query.in(CollUtil.isNotEmpty(userIds), BpmOAContractDO::getUserId, userIds); + query.apply(Objects.nonNull(pageReqVO.getContractId()), "c.id = {0}", pageReqVO.getContractId()); query.apply(Objects.nonNull(pageReqVO.getCustomerName()), "c.customer_name LIKE CONCAT('%', {0}, '%')", pageReqVO.getCustomerName()); query.apply(Objects.nonNull(pageReqVO.getContractName()), "c.contract_name LIKE CONCAT('%', {0}, '%')", pageReqVO.getContractName()); query.apply(Objects.nonNull(pageReqVO.getCreateName()),"u.nickname Like CONCAT('%', {0}, '%')", pageReqVO.getCreateName()); - if ("my".equals(pageReqVO.getRelation())) { - query.eq(BpmOAContractDO::getUserId, userId); - }else if ("sub".equals(pageReqVO.getRelation())){ - query.innerJoin("(" + - "\tSELECT DISTINCT\n" + - "\t\tu.id \n" + - "\tFROM\n" + - "\t\tsystem_users u\n" + - "\t\tINNER JOIN system_dept d ON d.leader_user_id = "+ userId +"\n" + - "\t\tINNER JOIN system_dept d1 ON d1.flag LIKE CONCAT( '%', d.id, '-' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '%-', d.id, '-%' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '-', d.id, '%' ) \n" + - "\tWHERE\n" + - "\t\tu.dept_id = d1.id \n" + - "\t\tAND u.STATUS = 0 \n" + - "\t) subordinate ON subordinate.id = t.user_id"); - } query.orderByDesc(BpmOAReceiptDO::getCreateTime); return selectJoinPage(pageReqVO, BpmOAReceiptRespVO.class, query); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java index 0666850b..a6cd3e25 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.task; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -97,7 +98,7 @@ public interface BpmTaskExtMapper extends BaseMapperX { queryWrapperX.innerJoin(BpmProcessInstanceExtDO.class, on -> on .eq(BpmTaskExtDO::getProcessInstanceId, BpmProcessInstanceExtDO::getProcessInstanceId) - .in(Objects.nonNull(userIds), BpmProcessInstanceExtDO::getStartUserId, userIds) + .in(CollUtil.isNotEmpty(userIds), BpmProcessInstanceExtDO::getStartUserId, userIds) .eq(StringUtils.isNotEmpty(pageVO.getName()), BpmProcessInstanceExtDO::getName, pageVO.getName())); queryWrapperX.likeRight(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_"); queryWrapperX.eq(BpmTaskExtDO::getAssigneeUserId, userId); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java index c41ca32e..7d6d3ff6 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.bpm.framework.rpc.config; import cn.iocoder.yudao.module.hrm.api.crmbusiness.BusinessApi; import cn.iocoder.yudao.module.hrm.api.crmcontract.ContractApi; import cn.iocoder.yudao.module.hrm.api.crmcustomer.CrmCustomerApi; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.product.api.storeproduct.StoreProductApi; @@ -43,7 +44,7 @@ import org.springframework.context.annotation.Configuration; SubscribeMessageSendApi.class, SocialClientApi.class, UsersExtApi.class, AttendanceApi.class, BankApi.class, ConfigApi.class, PositionApi.class, SupplierApi.class, AssetsApi.class, AssetsTypeApi.class, AssetReceiveApi.class, AttendanceApi.class, AttendanceGroupApi.class, WorkOvertimeApi.class, HolidayApi.class, RentalOrderApi.class, RentalDepositRecordApi.class, ProjectApi.class, RentalItemsRecordApi.class,AdminOauthUserOtherInfoApi.class, StoreProductAttrValueApi.class, StoreProductApi.class, - ContractApi.class, BusinessApi.class, CrmCustomerApi.class, StaffApi.class, LoanApi.class, FactoryInfoApi.class + ContractApi.class, BusinessApi.class, CrmCustomerApi.class, StaffApi.class, LoanApi.class, FactoryInfoApi.class, UserLiveTreeApi.class }) public class RpcConfiguration { } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java index 9bc9cdce..b782b2e9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java @@ -88,4 +88,11 @@ public interface FinancialPaymentService { * @return 支付信息列表 */ List getFinancialPaymentList(List processInstanceIds); + + /** + * 获取支付信息 统计 + * @param pageReqVO 查询条件 + * @return 统计信息 + */ + FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java index 5904a9c8..a8dc10f7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java @@ -252,4 +252,10 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService { return financialPaymentMapper.selectList(FinancialPaymentDO::getProcessInstanceId, processInstanceIds); } + + @Override + public FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO) { + pageReqVO.setReceiveUserId(getLoginUserId()); + return financialPaymentMapper.selectPaymentTotal(pageReqVO); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java index 509554d7..b0ff3352 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java @@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.hrm.api.crmcontract.ContractApi; import cn.iocoder.yudao.module.hrm.api.crmcontract.dto.CrmContractProductDTO; import cn.iocoder.yudao.module.hrm.api.crmcustomer.CrmCustomerApi; import cn.iocoder.yudao.module.hrm.api.crmcustomer.dto.CrmCustomerDTO; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; import cn.iocoder.yudao.module.product.api.storeproduct.StoreProductApi; import cn.iocoder.yudao.module.product.api.storeproductattrvalue.StoreProductAttrValueApi; import cn.iocoder.yudao.module.product.api.storeproductattrvalue.dto.StoreProductAttrValueApiDTO; @@ -107,6 +108,9 @@ public class BpmOAContractServiceImpl extends BpmOABaseService implements BpmOAC @Resource private CrmCustomerApi customerApi; + @Resource + private UserLiveTreeApi userLiveTreeApi; + @Override public Long createContract(Long userId, BpmOAContractCreateReqVO createReqVO) { // 新增合同DO @@ -265,7 +269,15 @@ public class BpmOAContractServiceImpl extends BpmOABaseService implements BpmOAC @Override public PageResult getContractPage(BpmOAContractPageReqVO pageReqVO) { - return contractMapper.selectPage(pageReqVO, getLoginUserId()); + List userIds = new ArrayList<>(); + if ("my".equals(pageReqVO.getRelation())) { + userIds.add(getLoginUserId()); + }else if ("sub".equals(pageReqVO.getRelation())){ + // 查询当前用户 所有下级用户编号 + userIds.addAll(userLiveTreeApi.getItemIdsByUserId(getLoginUserId()).getCheckedData()); + } + + return contractMapper.selectPage(pageReqVO, userIds); } @Override diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java index 15b08d18..7e9640d3 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java @@ -12,11 +12,15 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.BpmOAReceiptCr import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.BpmOAReceiptPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.BpmOAReceiptRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.ReceiptStatisticsVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAContractDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReceiptDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAContractMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAReceiptMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -25,6 +29,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -60,6 +65,12 @@ public class BpmOAReceiptServiceImpl extends BpmOABaseService implements BpmOARe @Resource private BpmProcessInstanceService bpmProcessInstanceService; + @Resource + private UserLiveTreeApi userLiveTreeApi; + + @Resource + private BpmOAContractMapper contractMapper; + @Override public Long createReceipt(Long userId, BpmOAReceiptCreateReqVO createReqVO) { @@ -103,7 +114,10 @@ public class BpmOAReceiptServiceImpl extends BpmOABaseService implements BpmOARe ProcessInstance instance = bpmProcessInstanceService.getProcessInstance(processInstanceId); if (instance.isEnded()) { - + // 更新合同表的回款金额 + contractMapper.update(null, new LambdaUpdateWrapper() + .setSql("return_money = return_money + " + receiptDO.getMoney()) + .eq(BpmOAContractDO::getId, receiptDO.getContractId())); } } @@ -133,7 +147,15 @@ public class BpmOAReceiptServiceImpl extends BpmOABaseService implements BpmOARe @Override public PageResult getReceiptPage(BpmOAReceiptPageReqVO pageReqVO) { - return receiptMapper.selectReceiptPage(pageReqVO, getLoginUserId()); + List userIds = new ArrayList<>(); + if ("my".equals(pageReqVO.getRelation())) { + userIds.add(getLoginUserId()); + }else if ("sub".equals(pageReqVO.getRelation())){ + // 查询当前用户 所有下级用户编号 + userIds.addAll(userLiveTreeApi.getItemIdsByUserId(getLoginUserId()).getCheckedData()); + } + + return receiptMapper.selectReceiptPage(pageReqVO, userIds); } @Override diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml index 377d42ac..811c918d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml @@ -102,4 +102,65 @@ a.id = #{id} + + diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java new file mode 100644 index 00000000..7aa2f9b4 --- /dev/null +++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.hrm.api.userlivetree; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.hrm.api.crmcustomer.dto.CrmCustomerDTO; +import cn.iocoder.yudao.module.hrm.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - CRM用户结构树") +public interface UserLiveTreeApi { + + String PREFIX = ApiConstants.PREFIX + "/crm/userLiveTree"; + + @GetMapping(PREFIX + "/get-list") + @Operation(summary = "通过用户id获取所有子集用户id") + @Parameter(name = "id", description = "用户编号", required = true, example = "1024") + CommonResult> getItemIdsByUserId(@RequestParam("id") Long id); +} diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java new file mode 100644 index 00000000..7edeff52 --- /dev/null +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.crm.api.userlivetree; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.crm.service.userlivetree.UserLiveTreeService; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * Flowable CRM Api 实现类 + */ +@RestController +@Validated +public class UserLiveTreeApiImpl implements UserLiveTreeApi { + + @Resource + private UserLiveTreeService userLiveTreeService; + + @Override + public CommonResult> getItemIdsByUserId(Long id) { + + return success(userLiveTreeService.getItemIdsByUserId(id)); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java index 527e0cab..a419c939 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java @@ -14,7 +14,6 @@ public class RentalCustomerSaveReqVO { private Long id; @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") - @NotEmpty(message = "客户名称不能为空") private String name; @Schema(description = "手机号") diff --git a/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java b/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java index 9e1e8c46..54728042 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java +++ b/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java @@ -18,6 +18,7 @@ public interface ErrorCodeConstants { ErrorCode SIZE_NOT_EXISTS = new ErrorCode(1_000_000_004, "规格不存在"); ErrorCode STAFF_NOT_EXISTS = new ErrorCode(1_000_000_005, "员工不存在"); + ErrorCode ACCESSORIES_COLLAR_NOT_EXISTS = new ErrorCode(1_000_000_006, "配件费用不存在"); //打包线模块 ErrorCode PACKAGE_NOT_EXISTS = new ErrorCode(1_000_001_001, "打包线信息不存在"); diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java new file mode 100644 index 00000000..19398ef8 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarRespVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; +import cn.iocoder.yudao.module.smartfactory.service.accessoriescollar.AccessoriesCollarService; +import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.Map; +import java.util.Set; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; + +@Tag(name = "管理后台 - 厂区配件领用") +@RestController +@RequestMapping("/smartfactory/accessories-collar") +@Validated +public class AccessoriesCollarController { + + @Resource + private AccessoriesCollarService accessoriesCollarService; + + @Resource + private FactoryInfoService factoryInfoService; + + @PostMapping("/create") + @Operation(summary = "创建厂区配件领用") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:create')") + public CommonResult createAccessoriesCollar(@Valid @RequestBody AccessoriesCollarSaveReqVO createReqVO) { + return success(accessoriesCollarService.createAccessoriesCollar(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新厂区配件领用") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:update')") + public CommonResult updateAccessoriesCollar(@Valid @RequestBody AccessoriesCollarSaveReqVO updateReqVO) { + accessoriesCollarService.updateAccessoriesCollar(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除厂区配件领用") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:delete')") + public CommonResult deleteAccessoriesCollar(@RequestParam("id") Long id) { + accessoriesCollarService.deleteAccessoriesCollar(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得厂区配件领用") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:query')") + public CommonResult getAccessoriesCollar(@RequestParam("id") Long id) { + AccessoriesCollarDO accessoriesCollar = accessoriesCollarService.getAccessoriesCollar(id); + return success(BeanUtils.toBean(accessoriesCollar, AccessoriesCollarRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得厂区配件领用分页") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:query')") + public CommonResult> getAccessoriesCollarPage(@Valid AccessoriesCollarPageReqVO pageReqVO) { + PageResult pageResult = BeanUtils.toBean(accessoriesCollarService.getAccessoriesCollarPage(pageReqVO), AccessoriesCollarRespVO.class); + if (CollUtil.isNotEmpty(pageResult.getList())) { + // 获取工厂编号 + Set factoryIds = convertSet(pageResult.getList(), AccessoriesCollarRespVO::getFactoryId); + // 获取工厂信息 + Map factoryMap = convertMap(factoryInfoService.getFactoryList(factoryIds), FactoryInfoDO::getId); + + pageResult.getList().forEach(data -> { + // 设置工厂名称 + data.setFactoryName(factoryMap.containsKey(data.getFactoryId()) ? factoryMap.get(data.getFactoryId()).getShortName() : null); + }); + } + return success(BeanUtils.toBean(pageResult, AccessoriesCollarRespVO.class)); + } +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java new file mode 100644 index 00000000..e7175390 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 厂区配件领用分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AccessoriesCollarPageReqVO extends PageParam { + + @Schema(description = "工厂编号", example = "10000008") + private Long factoryId; + + @Schema(description = "领用月份 | YYYY-MM") + private String month; + + @Schema(description = "状态 | 0未确认 1已确认", example = "0") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java new file mode 100644 index 00000000..b3ad7824 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 厂区配件领用 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AccessoriesCollarRespVO { + + @Schema(description = "厂区配件领用表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("厂区配件领用表单主键") + private Long id; + + @Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000008") + @ExcelProperty("工厂编号") + private Long factoryId; + + @Schema(description = "工厂名称", example = "工厂名称") + private String factoryName; + + @Schema(description = "领用月份 | YYYY-MM") + @ExcelProperty("领用月份 | YYYY-MM") + private String month; + + @Schema(description = "叉车配件费用") + @ExcelProperty("叉车配件费用") + private BigDecimal forkliftAccessories; + + @Schema(description = "打包配件费用") + @ExcelProperty("打包配件费用") + private BigDecimal packageAccessories; + + @Schema(description = "搬运劳保费用") + @ExcelProperty("搬运劳保费用") + private BigDecimal transportationAmount; + + @Schema(description = "状态 | 0未确认 1已确认", example = "0") + @ExcelProperty("状态 | 0未确认 1已确认") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java new file mode 100644 index 00000000..1c2d1b2c --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 厂区配件领用新增/修改 Request VO") +@Data +public class AccessoriesCollarSaveReqVO { + + @Schema(description = "厂区配件领用表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000008") + @NotNull(message = "工厂编号不能为空") + private Long factoryId; + + @Schema(description = "领用月份 | YYYY-MM") + private String month; + + @Schema(description = "叉车配件费用") + private BigDecimal forkliftAccessories; + + @Schema(description = "打包配件费用") + private BigDecimal packageAccessories; + + @Schema(description = "搬运劳保费用") + private BigDecimal transportationAmount; + + @Schema(description = "状态 | 0未确认 1已确认", example = "0") + private Integer status; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java index c3d42134..7c35da29 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java @@ -153,6 +153,17 @@ public class FactoryInfoController { return success(BeanUtils.toBean(pageResult, FactoryInfoRespVO.class)); } + @GetMapping("/get-profit") + @Operation(summary = "获得工厂每月利润") + @Parameter(name = "factoryId", description = "工厂编号") + @Parameter(name = "month", description = "查询月份") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')") + public CommonResult> getProfit(@RequestParam(name = "factoryId", required = false) Long factoryId, + @RequestParam("month") String month) { + + return success(factoryInfoService.getProfit(factoryId, month)); + } + @GetMapping("/export-excel") @Operation(summary = "导出工厂信息 Excel") @PreAuthorize("@ss.hasPermission('smartfactory:factory-info:export')") diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java new file mode 100644 index 00000000..8aaf611c --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 工厂利润VO") +@Data +public class FactoryProfitVO { + + @Schema(description = "工厂编号", example = "1024") + private Long factoryId; + + @Schema(description = "工厂名称", example = "芋道") + private String factoryName; + + @Schema(description = "结算月份", example = "2023-01") + private String settlementMonth; + + @Schema(description = "叉车收入", example = "10000") + private BigDecimal forkliftRevenue; + + @Schema(description = "打包收入", example = "10000") + private BigDecimal packageRevenue; + + @Schema(description = "搬运收入") + private BigDecimal porterageRevenue; + + @Schema(description = "叉车租赁收入") + private BigDecimal forkliftRentalRevenue; + + @Schema(description = "运输收入") + private BigDecimal transportationRevenue; + + @Schema(description = "叉车扣款") + private BigDecimal forkliftDeduction; + + @Schema(description = "打包扣款") + private BigDecimal packageDeduction; + + @Schema(description = "搬运扣款") + private BigDecimal porterageDeduction; + + @Schema(description = "水电扣款") + private BigDecimal hydropower; + + @Schema(description = "工伤保险") + private BigDecimal employment; + + @Schema(description = "其他(理赔、扣点)") + private BigDecimal other; + + @Schema(description = "叉车工资") + private BigDecimal forkliftSalary; + + @Schema(description = "打包工资") + private BigDecimal packageSalary; + + @Schema(description = "搬运工资") + private BigDecimal porterageSalary; + + @Schema(description = "运输工资") + private BigDecimal transportSalary; + + @Schema(description = "其他工资") + private BigDecimal otherSalary; + + @Schema(description = "叉车配件") + private BigDecimal forkliftAccessories; + + @Schema(description = "打包配件") + private BigDecimal packageAccessories; + + @Schema(description = "搬运劳保") + private BigDecimal transportationAmount; + + @Schema(description = "工伤赔偿") + private BigDecimal injuryAmount; + + @Schema(description = "借支") + private BigDecimal loanAmount; + + @Schema(description = "差旅费用") + private BigDecimal travelExpenses; + + @Schema(description = "其他") + private BigDecimal otherAmount; + + @Schema(description = "叉车支出") + private BigDecimal forkliftExpenses; + + @Schema(description = "打包支出") + private BigDecimal packageExpenses; + + @Schema(description = "搬运支出") + private BigDecimal transportationExpenses; + + @Schema(description = "叉车毛利") + private BigDecimal forkliftGrossProfit; + + @Schema(description = "打包毛利") + private BigDecimal packageGrossProfit; + + @Schema(description = "搬运毛利") + private BigDecimal porterageGrossProfit; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java index bc314a8c..2e50bc68 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java @@ -110,7 +110,7 @@ public class StaffController { Map factoryInfoMap = convertMap(factoryInfoService.getFactoryList(factoryIds), FactoryInfoDO::getId); result.getList().forEach(data -> { // 设置工厂名称 - data.setFactoryName(factoryInfoMap.containsKey(data.getFactoryId()) ? factoryInfoMap.get(data.getFactoryId()).getName() : null); + data.setFactoryName(factoryInfoMap.containsKey(data.getFactoryId()) ? factoryInfoMap.get(data.getFactoryId()).getShortName() : null); }); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java new file mode 100644 index 00000000..4ce475e2 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; + +/** + * 厂区配件领用 DO + * + * @author 符溶馨 + */ +@TableName("sf_accessories_collar") +@KeySequence("sf_accessories_collar_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccessoriesCollarDO extends BaseDO { + + /** + * 厂区配件领用表单主键 + */ + @TableId + private Long id; + /** + * 工厂编号 + */ + private Long factoryId; + /** + * 领用月份 | YYYY-MM + */ + private String month; + /** + * 叉车配件费用 + */ + private BigDecimal forkliftAccessories; + /** + * 打包配件费用 + */ + private BigDecimal packageAccessories; + /** + * 搬运劳保费用 + */ + private BigDecimal transportationAmount; + /** + * 状态 | 0未确认 1已确认 + */ + private Integer status; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java new file mode 100644 index 00000000..663d3c0f --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.smartfactory.dal.mysql.accessoriescollar; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarPageReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 厂区配件领用 Mapper + * + * @author 符溶馨 + */ +@Mapper +public interface AccessoriesCollarMapper extends BaseMapperX { + + default PageResult selectPage(AccessoriesCollarPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AccessoriesCollarDO::getFactoryId, reqVO.getFactoryId()) + .eqIfPresent(AccessoriesCollarDO::getMonth, reqVO.getMonth()) + .eqIfPresent(AccessoriesCollarDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(AccessoriesCollarDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AccessoriesCollarDO::getId)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java index fe90ae32..8122a68a 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryProfitVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.FactoryRollDataRespVO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; import org.apache.ibatis.annotations.Mapper; @@ -53,4 +54,7 @@ public interface FactoryInfoMapper extends BaseMapperX { * @return 返回与给定工厂ID相关联的天气代码,类型为String。 */ String getWeatherCodeByFactoryId(@Param("factoryId") Long factoryId, @Param("areaCode") String areaCode); + + List selectProfit(@Param("factoryId") Long factoryId, + @Param("month") String month); } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java new file mode 100644 index 00000000..b946070d --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.smartfactory.service.accessoriescollar; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 厂区配件领用 Service 接口 + * + * @author 符溶馨 + */ +public interface AccessoriesCollarService { + + /** + * 创建厂区配件领用 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createAccessoriesCollar(@Valid AccessoriesCollarSaveReqVO createReqVO); + + /** + * 更新厂区配件领用 + * + * @param updateReqVO 更新信息 + */ + void updateAccessoriesCollar(@Valid AccessoriesCollarSaveReqVO updateReqVO); + + /** + * 删除厂区配件领用 + * + * @param id 编号 + */ + void deleteAccessoriesCollar(Long id); + + /** + * 获得厂区配件领用 + * + * @param id 编号 + * @return 厂区配件领用 + */ + AccessoriesCollarDO getAccessoriesCollar(Long id); + + /** + * 获得厂区配件领用分页 + * + * @param pageReqVO 分页查询 + * @return 厂区配件领用分页 + */ + PageResult getAccessoriesCollarPage(AccessoriesCollarPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java new file mode 100644 index 00000000..f8060886 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.smartfactory.service.accessoriescollar; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.smartfactory.dal.mysql.accessoriescollar.AccessoriesCollarMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.*; + +/** + * 厂区配件领用 Service 实现类 + * + * @author 符溶馨 + */ +@Service +@Validated +public class AccessoriesCollarServiceImpl implements AccessoriesCollarService { + + @Resource + private AccessoriesCollarMapper accessoriesCollarMapper; + + @Override + public Long createAccessoriesCollar(AccessoriesCollarSaveReqVO createReqVO) { + // 插入 + AccessoriesCollarDO accessoriesCollar = BeanUtils.toBean(createReqVO, AccessoriesCollarDO.class); + accessoriesCollarMapper.insert(accessoriesCollar); + // 返回 + return accessoriesCollar.getId(); + } + + @Override + public void updateAccessoriesCollar(AccessoriesCollarSaveReqVO updateReqVO) { + // 校验存在 + validateAccessoriesCollarExists(updateReqVO.getId()); + // 更新 + AccessoriesCollarDO updateObj = BeanUtils.toBean(updateReqVO, AccessoriesCollarDO.class); + accessoriesCollarMapper.updateById(updateObj); + } + + @Override + public void deleteAccessoriesCollar(Long id) { + // 校验存在 + validateAccessoriesCollarExists(id); + // 删除 + accessoriesCollarMapper.deleteById(id); + } + + private void validateAccessoriesCollarExists(Long id) { + if (accessoriesCollarMapper.selectById(id) == null) { + throw exception(ACCESSORIES_COLLAR_NOT_EXISTS); + } + } + + @Override + public AccessoriesCollarDO getAccessoriesCollar(Long id) { + return accessoriesCollarMapper.selectById(id); + } + + @Override + public PageResult getAccessoriesCollarPage(AccessoriesCollarPageReqVO pageReqVO) { + return accessoriesCollarMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java index 7aebdccb..cb6daa40 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.smartfactory.service.factoryinfo; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryProfitVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryUpdateStatusReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.FactoryRollDataRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.ProvincesDataRespVO; @@ -136,4 +137,13 @@ public interface FactoryInfoService { * @param updateReqVO 更新信息 */ void updateFactoryStatus(FactoryUpdateStatusReqVO updateReqVO); + + /** + * 工厂每月利润 + * + * @param factoryId 工厂编号 + * @param month 月份 + * @return 利润列表 + */ + List getProfit(Long factoryId, String month); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java index dd1c5775..fc06b241 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.smartfactory.service.factoryinfo; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.DeptTypeEnum; @@ -10,6 +11,7 @@ import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryProfitVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryUpdateStatusReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.FactoryRollDataRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.ProvincesDataRespVO; @@ -22,6 +24,7 @@ import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespD import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.bouncycastle.dvcs.VPKCRequestBuilder; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -280,4 +283,32 @@ public class FactoryInfoServiceImpl implements FactoryInfoService { deptRespDTO.setStatus(updateReqVO.getStatus()); deptApi.updateFactoryDept(deptRespDTO); } + + @Override + public List getProfit(Long factoryId, String month) { + + List result = factoryInfoMapper.selectProfit(factoryId, month); + if (CollUtil.isNotEmpty(result)) { + // 设置叉车毛利、打包毛利、搬运毛利 = 收入 - 扣款 - 人员工资 - 支出 + result.forEach(vo -> { + // 设置叉车毛利 + vo.setForkliftGrossProfit(vo.getForkliftRevenue() + .subtract(vo.getForkliftDeduction()) + .subtract(vo.getForkliftSalary()) + .subtract(vo.getForkliftExpenses())); + // 设置打包毛利 + vo.setPackageGrossProfit(vo.getPackageRevenue() + .subtract(vo.getPackageDeduction()) + .subtract(vo.getPackageSalary()) + .subtract(vo.getPackageExpenses())); + // 设置搬运毛利 + vo.setPorterageGrossProfit(vo.getPorterageRevenue() + .subtract(vo.getPorterageDeduction()) + .subtract(vo.getPorterageSalary()) + .subtract(vo.getTransportationExpenses())); + }); + } + + return result; + } } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java index 899b83ae..8356df13 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java @@ -110,7 +110,9 @@ public class StaffServiceImpl implements StaffService { // 设置工种名称 dos.forEach(item -> { - item.setPostName(workTypeMap.getOrDefault(item.getWorkTypeId().toString(), "")); + if (item.getWorkTypeId() != null) { + item.setPostName(workTypeMap.getOrDefault(item.getWorkTypeId().toString(), "")); + } }); vo.setTotal(dos.size()); diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml index a59c28cd..0fb21570 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml @@ -31,4 +31,120 @@ left join sf_factory_info as b on a.code = #{areaCode} where b.id = #{factoryId} + + \ No newline at end of file From 6786ec0d3dce72db7c2e3317f4f0ac6b18c49417 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 1 Mar 2025 18:01:46 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat(bpm):=20=E4=BC=98=E5=8C=96=E5=90=88?= =?UTF-8?q?=E5=90=8C=E5=92=8C=E5=9B=9E=E6=AC=BE=E9=A1=B5=E9=9D=A2=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -重构了合同和回款页面的查询逻辑,支持"我的"和"下属"两种关系的查询- 新增 UserLiveTreeApi接口,用于获取用户结构树 - 优化了 SQL 查询条件,提高了查询效率 - 新增厂区配件领用相关功能 --- .../FinancialPaymentController.java | 9 +- .../oa/vo/receipt/BpmOAReceiptPageReqVO.java | 3 + .../FinancialPaymentMapper.java | 2 + .../bpm/dal/mysql/oa/BpmOAContractMapper.java | 21 +--- .../bpm/dal/mysql/oa/BpmOAReceiptMapper.java | 22 +--- .../bpm/dal/mysql/task/BpmTaskExtMapper.java | 5 +- .../rpc/config/RpcConfiguration.java | 3 +- .../FinancialPaymentService.java | 7 ++ .../FinancialPaymentServiceImpl.java | 6 + .../service/oa/BpmOAContractServiceImpl.java | 14 ++- .../service/oa/BpmOAReceiptServiceImpl.java | 26 +++- .../FinancialPaymentMapper.xml | 61 +++++++++ .../hrm/api/userlivetree/UserLiveTreeApi.java | 24 ++++ .../api/userlivetree/UserLiveTreeApiImpl.java | 29 +++++ .../vo/customer/RentalCustomerSaveReqVO.java | 1 - .../enums/ErrorCodeConstants.java | 1 + .../AccessoriesCollarController.java | 93 ++++++++++++++ .../vo/AccessoriesCollarPageReqVO.java | 33 +++++ .../vo/AccessoriesCollarRespVO.java | 51 ++++++++ .../vo/AccessoriesCollarSaveReqVO.java | 35 ++++++ .../factoryinfo/FactoryInfoController.java | 11 ++ .../admin/factoryinfo/vo/FactoryProfitVO.java | 107 ++++++++++++++++ .../admin/staff/StaffController.java | 2 +- .../AccessoriesCollarDO.java | 56 +++++++++ .../AccessoriesCollarMapper.java | 27 ++++ .../mysql/factoryinfo/FactoryInfoMapper.java | 4 + .../AccessoriesCollarService.java | 55 +++++++++ .../AccessoriesCollarServiceImpl.java | 71 +++++++++++ .../factoryinfo/FactoryInfoService.java | 10 ++ .../factoryinfo/FactoryInfoServiceImpl.java | 30 +++++ .../service/staff/StaffServiceImpl.java | 4 +- .../mapper/factoryinfo/FactoryInfoMapper.xml | 116 ++++++++++++++++++ 32 files changed, 891 insertions(+), 48 deletions(-) create mode 100644 yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java index 6e6e0e7a..2608bfba 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/financialpayment/FinancialPaymentController.java @@ -3,13 +3,13 @@ package cn.iocoder.yudao.module.bpm.controller.admin.financialpayment; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentSaveReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.financialpayment.vo.FinancialPaymentSaveVO; import cn.iocoder.yudao.module.bpm.controller.admin.financialpaymentitem.vo.FinancialPaymentItemRespVO; -import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpaymentitem.FinancialPaymentItemDO; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; @@ -17,7 +17,6 @@ import cn.iocoder.yudao.module.bpm.service.financialpaymentitem.FinancialPayment import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -106,4 +105,10 @@ public class FinancialPaymentController { return success(BeanUtils.toBean(pageResult, FinancialPaymentRespVO.class)); } + @GetMapping("/total") + @Operation(summary = "获得财务支付统计信息") + public CommonResult getPaymentTotal(@Valid FinancialPaymentPageReqVO pageReqVO) { + FinancialPaymentDO paymentDO = financialPaymentService.getPaymentTotal(pageReqVO); + return success(BeanUtils.toBean(paymentDO, FinancialPaymentRespVO.class)); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java index 39956594..b0c9855d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/receipt/BpmOAReceiptPageReqVO.java @@ -28,4 +28,7 @@ public class BpmOAReceiptPageReqVO extends PageParam { @Schema(description = "查询模式") private String relation; + + @Schema(description = "合同编号") + private Long contractId; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java index 49c6aa4c..f84b45ac 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/financialpayment/FinancialPaymentMapper.java @@ -41,4 +41,6 @@ public interface FinancialPaymentMapper extends BaseMapperX * @param ids */ void cancel(@Param("ids") List ids); + + FinancialPaymentDO selectPaymentTotal(@Param("vo") FinancialPaymentPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java index 98c6959b..3e45f076 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAContractMapper.java @@ -23,7 +23,7 @@ import java.util.Objects; @Mapper public interface BpmOAContractMapper extends BaseMapperX { default PageResult selectPage(BpmOAContractPageReqVO pageReqVO, - Long userId) { + List userIds) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); query.selectAll(BpmOAContractDO.class); @@ -39,25 +39,10 @@ public interface BpmOAContractMapper extends BaseMapperX { query.likeIfPresent(BpmOAContractDO::getCustomerName, pageReqVO.getCustomerName()); query.eqIfPresent(BpmOAContractDO::getStatus, pageReqVO.getStatus()); query.eqIfPresent(BpmOAContractDO::getResult, pageReqVO.getResult()); + query.inIfPresent(BpmOAContractDO::getUserId, userIds); query.apply(Objects.nonNull(pageReqVO.getSignatoryName()),"u.nickname Like CONCAT('%', {0}, '%')", pageReqVO.getSignatoryName()); query.apply(Objects.nonNull(pageReqVO.getCreateName()),"u1.nickname Like CONCAT('%', {0}, '%')", pageReqVO.getCreateName()); - if ("my".equals(pageReqVO.getRelation())) { - query.eq(BpmOAContractDO::getUserId, userId); - }else if ("sub".equals(pageReqVO.getRelation())){ - query.innerJoin("(" + - "\tSELECT DISTINCT\n" + - "\t\tu.id \n" + - "\tFROM\n" + - "\t\tsystem_users u\n" + - "\t\tINNER JOIN system_dept d ON d.leader_user_id = "+ userId +"\n" + - "\t\tINNER JOIN system_dept d1 ON d1.flag LIKE CONCAT( '%', d.id, '-' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '%-', d.id, '-%' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '-', d.id, '%' ) \n" + - "\tWHERE\n" + - "\t\tu.dept_id = d1.id \n" + - "\t\tAND u.STATUS = 0 \n" + - "\t) subordinate ON subordinate.id = t.user_id"); - } + query.orderByDesc(BpmOAContractDO::getCreateTime); return selectJoinPage(pageReqVO, BpmOAContractRespVO.class, query); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java index b3f357ad..a15513df 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAReceiptMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; @@ -18,7 +19,7 @@ import java.util.Objects; @Mapper public interface BpmOAReceiptMapper extends BaseMapperX { - default PageResult selectReceiptPage(BpmOAReceiptPageReqVO pageReqVO, Long userId) { + default PageResult selectReceiptPage(BpmOAReceiptPageReqVO pageReqVO, List userIds) { MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); query.selectAll(BpmOAReceiptDO.class); @@ -29,26 +30,11 @@ public interface BpmOAReceiptMapper extends BaseMapperX { query.leftJoin(BpmOAContractDO.class, "c", BpmOAContractDO::getId, BpmOAReceiptDO::getContractId); query.leftJoin("system_users u on u.id = t.creator"); query.eqIfPresent(BpmOAReceiptDO::getResult, pageReqVO.getResult()); + query.in(CollUtil.isNotEmpty(userIds), BpmOAContractDO::getUserId, userIds); + query.apply(Objects.nonNull(pageReqVO.getContractId()), "c.id = {0}", pageReqVO.getContractId()); query.apply(Objects.nonNull(pageReqVO.getCustomerName()), "c.customer_name LIKE CONCAT('%', {0}, '%')", pageReqVO.getCustomerName()); query.apply(Objects.nonNull(pageReqVO.getContractName()), "c.contract_name LIKE CONCAT('%', {0}, '%')", pageReqVO.getContractName()); query.apply(Objects.nonNull(pageReqVO.getCreateName()),"u.nickname Like CONCAT('%', {0}, '%')", pageReqVO.getCreateName()); - if ("my".equals(pageReqVO.getRelation())) { - query.eq(BpmOAContractDO::getUserId, userId); - }else if ("sub".equals(pageReqVO.getRelation())){ - query.innerJoin("(" + - "\tSELECT DISTINCT\n" + - "\t\tu.id \n" + - "\tFROM\n" + - "\t\tsystem_users u\n" + - "\t\tINNER JOIN system_dept d ON d.leader_user_id = "+ userId +"\n" + - "\t\tINNER JOIN system_dept d1 ON d1.flag LIKE CONCAT( '%', d.id, '-' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '%-', d.id, '-%' ) \n" + - "\t\tOR d1.flag LIKE CONCAT( '-', d.id, '%' ) \n" + - "\tWHERE\n" + - "\t\tu.dept_id = d1.id \n" + - "\t\tAND u.STATUS = 0 \n" + - "\t) subordinate ON subordinate.id = t.user_id"); - } query.orderByDesc(BpmOAReceiptDO::getCreateTime); return selectJoinPage(pageReqVO, BpmOAReceiptRespVO.class, query); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java index 0666850b..172bea01 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.task; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -14,12 +15,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import org.mapstruct.ap.internal.util.Strings; import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.Objects; @Mapper public interface BpmTaskExtMapper extends BaseMapperX { @@ -97,7 +96,7 @@ public interface BpmTaskExtMapper extends BaseMapperX { queryWrapperX.innerJoin(BpmProcessInstanceExtDO.class, on -> on .eq(BpmTaskExtDO::getProcessInstanceId, BpmProcessInstanceExtDO::getProcessInstanceId) - .in(Objects.nonNull(userIds), BpmProcessInstanceExtDO::getStartUserId, userIds) + .in(CollUtil.isNotEmpty(userIds), BpmProcessInstanceExtDO::getStartUserId, userIds) .eq(StringUtils.isNotEmpty(pageVO.getName()), BpmProcessInstanceExtDO::getName, pageVO.getName())); queryWrapperX.likeRight(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_"); queryWrapperX.eq(BpmTaskExtDO::getAssigneeUserId, userId); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java index c41ca32e..7d6d3ff6 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/rpc/config/RpcConfiguration.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.bpm.framework.rpc.config; import cn.iocoder.yudao.module.hrm.api.crmbusiness.BusinessApi; import cn.iocoder.yudao.module.hrm.api.crmcontract.ContractApi; import cn.iocoder.yudao.module.hrm.api.crmcustomer.CrmCustomerApi; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.product.api.storeproduct.StoreProductApi; @@ -43,7 +44,7 @@ import org.springframework.context.annotation.Configuration; SubscribeMessageSendApi.class, SocialClientApi.class, UsersExtApi.class, AttendanceApi.class, BankApi.class, ConfigApi.class, PositionApi.class, SupplierApi.class, AssetsApi.class, AssetsTypeApi.class, AssetReceiveApi.class, AttendanceApi.class, AttendanceGroupApi.class, WorkOvertimeApi.class, HolidayApi.class, RentalOrderApi.class, RentalDepositRecordApi.class, ProjectApi.class, RentalItemsRecordApi.class,AdminOauthUserOtherInfoApi.class, StoreProductAttrValueApi.class, StoreProductApi.class, - ContractApi.class, BusinessApi.class, CrmCustomerApi.class, StaffApi.class, LoanApi.class, FactoryInfoApi.class + ContractApi.class, BusinessApi.class, CrmCustomerApi.class, StaffApi.class, LoanApi.class, FactoryInfoApi.class, UserLiveTreeApi.class }) public class RpcConfiguration { } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java index 9bc9cdce..b782b2e9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentService.java @@ -88,4 +88,11 @@ public interface FinancialPaymentService { * @return 支付信息列表 */ List getFinancialPaymentList(List processInstanceIds); + + /** + * 获取支付信息 统计 + * @param pageReqVO 查询条件 + * @return 统计信息 + */ + FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java index 5904a9c8..a8dc10f7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/financialpayment/FinancialPaymentServiceImpl.java @@ -252,4 +252,10 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService { return financialPaymentMapper.selectList(FinancialPaymentDO::getProcessInstanceId, processInstanceIds); } + + @Override + public FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO) { + pageReqVO.setReceiveUserId(getLoginUserId()); + return financialPaymentMapper.selectPaymentTotal(pageReqVO); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java index 509554d7..b0ff3352 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAContractServiceImpl.java @@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.hrm.api.crmcontract.ContractApi; import cn.iocoder.yudao.module.hrm.api.crmcontract.dto.CrmContractProductDTO; import cn.iocoder.yudao.module.hrm.api.crmcustomer.CrmCustomerApi; import cn.iocoder.yudao.module.hrm.api.crmcustomer.dto.CrmCustomerDTO; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; import cn.iocoder.yudao.module.product.api.storeproduct.StoreProductApi; import cn.iocoder.yudao.module.product.api.storeproductattrvalue.StoreProductAttrValueApi; import cn.iocoder.yudao.module.product.api.storeproductattrvalue.dto.StoreProductAttrValueApiDTO; @@ -107,6 +108,9 @@ public class BpmOAContractServiceImpl extends BpmOABaseService implements BpmOAC @Resource private CrmCustomerApi customerApi; + @Resource + private UserLiveTreeApi userLiveTreeApi; + @Override public Long createContract(Long userId, BpmOAContractCreateReqVO createReqVO) { // 新增合同DO @@ -265,7 +269,15 @@ public class BpmOAContractServiceImpl extends BpmOABaseService implements BpmOAC @Override public PageResult getContractPage(BpmOAContractPageReqVO pageReqVO) { - return contractMapper.selectPage(pageReqVO, getLoginUserId()); + List userIds = new ArrayList<>(); + if ("my".equals(pageReqVO.getRelation())) { + userIds.add(getLoginUserId()); + }else if ("sub".equals(pageReqVO.getRelation())){ + // 查询当前用户 所有下级用户编号 + userIds.addAll(userLiveTreeApi.getItemIdsByUserId(getLoginUserId()).getCheckedData()); + } + + return contractMapper.selectPage(pageReqVO, userIds); } @Override diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java index 15b08d18..7e9640d3 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAReceiptServiceImpl.java @@ -12,11 +12,15 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.BpmOAReceiptCr import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.BpmOAReceiptPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.BpmOAReceiptRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.receipt.ReceiptStatisticsVO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAContractDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReceiptDO; +import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAContractMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAReceiptMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -25,6 +29,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -60,6 +65,12 @@ public class BpmOAReceiptServiceImpl extends BpmOABaseService implements BpmOARe @Resource private BpmProcessInstanceService bpmProcessInstanceService; + @Resource + private UserLiveTreeApi userLiveTreeApi; + + @Resource + private BpmOAContractMapper contractMapper; + @Override public Long createReceipt(Long userId, BpmOAReceiptCreateReqVO createReqVO) { @@ -103,7 +114,10 @@ public class BpmOAReceiptServiceImpl extends BpmOABaseService implements BpmOARe ProcessInstance instance = bpmProcessInstanceService.getProcessInstance(processInstanceId); if (instance.isEnded()) { - + // 更新合同表的回款金额 + contractMapper.update(null, new LambdaUpdateWrapper() + .setSql("return_money = return_money + " + receiptDO.getMoney()) + .eq(BpmOAContractDO::getId, receiptDO.getContractId())); } } @@ -133,7 +147,15 @@ public class BpmOAReceiptServiceImpl extends BpmOABaseService implements BpmOARe @Override public PageResult getReceiptPage(BpmOAReceiptPageReqVO pageReqVO) { - return receiptMapper.selectReceiptPage(pageReqVO, getLoginUserId()); + List userIds = new ArrayList<>(); + if ("my".equals(pageReqVO.getRelation())) { + userIds.add(getLoginUserId()); + }else if ("sub".equals(pageReqVO.getRelation())){ + // 查询当前用户 所有下级用户编号 + userIds.addAll(userLiveTreeApi.getItemIdsByUserId(getLoginUserId()).getCheckedData()); + } + + return receiptMapper.selectReceiptPage(pageReqVO, userIds); } @Override diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml index 377d42ac..811c918d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/financialpayment/FinancialPaymentMapper.xml @@ -102,4 +102,65 @@ a.id = #{id} + + diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java new file mode 100644 index 00000000..5a80b3fd --- /dev/null +++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/userlivetree/UserLiveTreeApi.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.hrm.api.userlivetree; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.hrm.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - CRM用户结构树") +public interface UserLiveTreeApi { + + String PREFIX = ApiConstants.PREFIX + "/crm/userLiveTree"; + + @GetMapping(PREFIX + "/get-list") + @Operation(summary = "通过用户id获取所有子集用户id") + @Parameter(name = "id", description = "用户编号", required = true, example = "1024") + CommonResult> getItemIdsByUserId(@RequestParam("id") Long id); +} diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java new file mode 100644 index 00000000..7edeff52 --- /dev/null +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/userlivetree/UserLiveTreeApiImpl.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.crm.api.userlivetree; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.crm.service.userlivetree.UserLiveTreeService; +import cn.iocoder.yudao.module.hrm.api.userlivetree.UserLiveTreeApi; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * Flowable CRM Api 实现类 + */ +@RestController +@Validated +public class UserLiveTreeApiImpl implements UserLiveTreeApi { + + @Resource + private UserLiveTreeService userLiveTreeService; + + @Override + public CommonResult> getItemIdsByUserId(Long id) { + + return success(userLiveTreeService.getItemIdsByUserId(id)); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java index 527e0cab..a419c939 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/rental/vo/customer/RentalCustomerSaveReqVO.java @@ -14,7 +14,6 @@ public class RentalCustomerSaveReqVO { private Long id; @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") - @NotEmpty(message = "客户名称不能为空") private String name; @Schema(description = "手机号") diff --git a/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java b/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java index 9e1e8c46..54728042 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java +++ b/zn-module-smartfactory/zn-module-smartfactory-api/src/main/java/cn/iocoder/yudao/module/smartfactory/enums/ErrorCodeConstants.java @@ -18,6 +18,7 @@ public interface ErrorCodeConstants { ErrorCode SIZE_NOT_EXISTS = new ErrorCode(1_000_000_004, "规格不存在"); ErrorCode STAFF_NOT_EXISTS = new ErrorCode(1_000_000_005, "员工不存在"); + ErrorCode ACCESSORIES_COLLAR_NOT_EXISTS = new ErrorCode(1_000_000_006, "配件费用不存在"); //打包线模块 ErrorCode PACKAGE_NOT_EXISTS = new ErrorCode(1_000_001_001, "打包线信息不存在"); diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java new file mode 100644 index 00000000..19398ef8 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/AccessoriesCollarController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarRespVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; +import cn.iocoder.yudao.module.smartfactory.service.accessoriescollar.AccessoriesCollarService; +import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.Map; +import java.util.Set; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; + +@Tag(name = "管理后台 - 厂区配件领用") +@RestController +@RequestMapping("/smartfactory/accessories-collar") +@Validated +public class AccessoriesCollarController { + + @Resource + private AccessoriesCollarService accessoriesCollarService; + + @Resource + private FactoryInfoService factoryInfoService; + + @PostMapping("/create") + @Operation(summary = "创建厂区配件领用") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:create')") + public CommonResult createAccessoriesCollar(@Valid @RequestBody AccessoriesCollarSaveReqVO createReqVO) { + return success(accessoriesCollarService.createAccessoriesCollar(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新厂区配件领用") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:update')") + public CommonResult updateAccessoriesCollar(@Valid @RequestBody AccessoriesCollarSaveReqVO updateReqVO) { + accessoriesCollarService.updateAccessoriesCollar(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除厂区配件领用") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:delete')") + public CommonResult deleteAccessoriesCollar(@RequestParam("id") Long id) { + accessoriesCollarService.deleteAccessoriesCollar(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得厂区配件领用") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:query')") + public CommonResult getAccessoriesCollar(@RequestParam("id") Long id) { + AccessoriesCollarDO accessoriesCollar = accessoriesCollarService.getAccessoriesCollar(id); + return success(BeanUtils.toBean(accessoriesCollar, AccessoriesCollarRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得厂区配件领用分页") + @PreAuthorize("@ss.hasPermission('smartfactory:accessories-collar:query')") + public CommonResult> getAccessoriesCollarPage(@Valid AccessoriesCollarPageReqVO pageReqVO) { + PageResult pageResult = BeanUtils.toBean(accessoriesCollarService.getAccessoriesCollarPage(pageReqVO), AccessoriesCollarRespVO.class); + if (CollUtil.isNotEmpty(pageResult.getList())) { + // 获取工厂编号 + Set factoryIds = convertSet(pageResult.getList(), AccessoriesCollarRespVO::getFactoryId); + // 获取工厂信息 + Map factoryMap = convertMap(factoryInfoService.getFactoryList(factoryIds), FactoryInfoDO::getId); + + pageResult.getList().forEach(data -> { + // 设置工厂名称 + data.setFactoryName(factoryMap.containsKey(data.getFactoryId()) ? factoryMap.get(data.getFactoryId()).getShortName() : null); + }); + } + return success(BeanUtils.toBean(pageResult, AccessoriesCollarRespVO.class)); + } +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java new file mode 100644 index 00000000..4a1a6197 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarPageReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 厂区配件领用分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AccessoriesCollarPageReqVO extends PageParam { + + @Schema(description = "工厂编号", example = "10000008") + private Long factoryId; + + @Schema(description = "领用月份 | YYYY-MM") + private String month; + + @Schema(description = "状态 | 0未确认 1已确认", example = "0") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java new file mode 100644 index 00000000..a89229ca --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarRespVO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 厂区配件领用 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AccessoriesCollarRespVO { + + @Schema(description = "厂区配件领用表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("厂区配件领用表单主键") + private Long id; + + @Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000008") + @ExcelProperty("工厂编号") + private Long factoryId; + + @Schema(description = "工厂名称", example = "工厂名称") + private String factoryName; + + @Schema(description = "领用月份 | YYYY-MM") + @ExcelProperty("领用月份 | YYYY-MM") + private String month; + + @Schema(description = "叉车配件费用") + @ExcelProperty("叉车配件费用") + private BigDecimal forkliftAccessories; + + @Schema(description = "打包配件费用") + @ExcelProperty("打包配件费用") + private BigDecimal packageAccessories; + + @Schema(description = "搬运劳保费用") + @ExcelProperty("搬运劳保费用") + private BigDecimal transportationAmount; + + @Schema(description = "状态 | 0未确认 1已确认", example = "0") + @ExcelProperty("状态 | 0未确认 1已确认") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java new file mode 100644 index 00000000..8ae476f6 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/accessoriescollar/vo/AccessoriesCollarSaveReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 厂区配件领用新增/修改 Request VO") +@Data +public class AccessoriesCollarSaveReqVO { + + @Schema(description = "厂区配件领用表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000008") + @NotNull(message = "工厂编号不能为空") + private Long factoryId; + + @Schema(description = "领用月份 | YYYY-MM") + private String month; + + @Schema(description = "叉车配件费用") + private BigDecimal forkliftAccessories; + + @Schema(description = "打包配件费用") + private BigDecimal packageAccessories; + + @Schema(description = "搬运劳保费用") + private BigDecimal transportationAmount; + + @Schema(description = "状态 | 0未确认 1已确认", example = "0") + private Integer status; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java index c3d42134..7c35da29 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/FactoryInfoController.java @@ -153,6 +153,17 @@ public class FactoryInfoController { return success(BeanUtils.toBean(pageResult, FactoryInfoRespVO.class)); } + @GetMapping("/get-profit") + @Operation(summary = "获得工厂每月利润") + @Parameter(name = "factoryId", description = "工厂编号") + @Parameter(name = "month", description = "查询月份") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')") + public CommonResult> getProfit(@RequestParam(name = "factoryId", required = false) Long factoryId, + @RequestParam("month") String month) { + + return success(factoryInfoService.getProfit(factoryId, month)); + } + @GetMapping("/export-excel") @Operation(summary = "导出工厂信息 Excel") @PreAuthorize("@ss.hasPermission('smartfactory:factory-info:export')") diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java new file mode 100644 index 00000000..8aaf611c --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryProfitVO.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 工厂利润VO") +@Data +public class FactoryProfitVO { + + @Schema(description = "工厂编号", example = "1024") + private Long factoryId; + + @Schema(description = "工厂名称", example = "芋道") + private String factoryName; + + @Schema(description = "结算月份", example = "2023-01") + private String settlementMonth; + + @Schema(description = "叉车收入", example = "10000") + private BigDecimal forkliftRevenue; + + @Schema(description = "打包收入", example = "10000") + private BigDecimal packageRevenue; + + @Schema(description = "搬运收入") + private BigDecimal porterageRevenue; + + @Schema(description = "叉车租赁收入") + private BigDecimal forkliftRentalRevenue; + + @Schema(description = "运输收入") + private BigDecimal transportationRevenue; + + @Schema(description = "叉车扣款") + private BigDecimal forkliftDeduction; + + @Schema(description = "打包扣款") + private BigDecimal packageDeduction; + + @Schema(description = "搬运扣款") + private BigDecimal porterageDeduction; + + @Schema(description = "水电扣款") + private BigDecimal hydropower; + + @Schema(description = "工伤保险") + private BigDecimal employment; + + @Schema(description = "其他(理赔、扣点)") + private BigDecimal other; + + @Schema(description = "叉车工资") + private BigDecimal forkliftSalary; + + @Schema(description = "打包工资") + private BigDecimal packageSalary; + + @Schema(description = "搬运工资") + private BigDecimal porterageSalary; + + @Schema(description = "运输工资") + private BigDecimal transportSalary; + + @Schema(description = "其他工资") + private BigDecimal otherSalary; + + @Schema(description = "叉车配件") + private BigDecimal forkliftAccessories; + + @Schema(description = "打包配件") + private BigDecimal packageAccessories; + + @Schema(description = "搬运劳保") + private BigDecimal transportationAmount; + + @Schema(description = "工伤赔偿") + private BigDecimal injuryAmount; + + @Schema(description = "借支") + private BigDecimal loanAmount; + + @Schema(description = "差旅费用") + private BigDecimal travelExpenses; + + @Schema(description = "其他") + private BigDecimal otherAmount; + + @Schema(description = "叉车支出") + private BigDecimal forkliftExpenses; + + @Schema(description = "打包支出") + private BigDecimal packageExpenses; + + @Schema(description = "搬运支出") + private BigDecimal transportationExpenses; + + @Schema(description = "叉车毛利") + private BigDecimal forkliftGrossProfit; + + @Schema(description = "打包毛利") + private BigDecimal packageGrossProfit; + + @Schema(description = "搬运毛利") + private BigDecimal porterageGrossProfit; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java index bc314a8c..2e50bc68 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java @@ -110,7 +110,7 @@ public class StaffController { Map factoryInfoMap = convertMap(factoryInfoService.getFactoryList(factoryIds), FactoryInfoDO::getId); result.getList().forEach(data -> { // 设置工厂名称 - data.setFactoryName(factoryInfoMap.containsKey(data.getFactoryId()) ? factoryInfoMap.get(data.getFactoryId()).getName() : null); + data.setFactoryName(factoryInfoMap.containsKey(data.getFactoryId()) ? factoryInfoMap.get(data.getFactoryId()).getShortName() : null); }); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java new file mode 100644 index 00000000..4ce475e2 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/accessoriescollar/AccessoriesCollarDO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; + +/** + * 厂区配件领用 DO + * + * @author 符溶馨 + */ +@TableName("sf_accessories_collar") +@KeySequence("sf_accessories_collar_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccessoriesCollarDO extends BaseDO { + + /** + * 厂区配件领用表单主键 + */ + @TableId + private Long id; + /** + * 工厂编号 + */ + private Long factoryId; + /** + * 领用月份 | YYYY-MM + */ + private String month; + /** + * 叉车配件费用 + */ + private BigDecimal forkliftAccessories; + /** + * 打包配件费用 + */ + private BigDecimal packageAccessories; + /** + * 搬运劳保费用 + */ + private BigDecimal transportationAmount; + /** + * 状态 | 0未确认 1已确认 + */ + private Integer status; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java new file mode 100644 index 00000000..663d3c0f --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/accessoriescollar/AccessoriesCollarMapper.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.smartfactory.dal.mysql.accessoriescollar; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarPageReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 厂区配件领用 Mapper + * + * @author 符溶馨 + */ +@Mapper +public interface AccessoriesCollarMapper extends BaseMapperX { + + default PageResult selectPage(AccessoriesCollarPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AccessoriesCollarDO::getFactoryId, reqVO.getFactoryId()) + .eqIfPresent(AccessoriesCollarDO::getMonth, reqVO.getMonth()) + .eqIfPresent(AccessoriesCollarDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(AccessoriesCollarDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AccessoriesCollarDO::getId)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java index fe90ae32..8122a68a 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryinfo/FactoryInfoMapper.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryProfitVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.FactoryRollDataRespVO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; import org.apache.ibatis.annotations.Mapper; @@ -53,4 +54,7 @@ public interface FactoryInfoMapper extends BaseMapperX { * @return 返回与给定工厂ID相关联的天气代码,类型为String。 */ String getWeatherCodeByFactoryId(@Param("factoryId") Long factoryId, @Param("areaCode") String areaCode); + + List selectProfit(@Param("factoryId") Long factoryId, + @Param("month") String month); } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java new file mode 100644 index 00000000..3e8a7be0 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.smartfactory.service.accessoriescollar; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; + +import javax.validation.Valid; + +/** + * 厂区配件领用 Service 接口 + * + * @author 符溶馨 + */ +public interface AccessoriesCollarService { + + /** + * 创建厂区配件领用 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createAccessoriesCollar(@Valid AccessoriesCollarSaveReqVO createReqVO); + + /** + * 更新厂区配件领用 + * + * @param updateReqVO 更新信息 + */ + void updateAccessoriesCollar(@Valid AccessoriesCollarSaveReqVO updateReqVO); + + /** + * 删除厂区配件领用 + * + * @param id 编号 + */ + void deleteAccessoriesCollar(Long id); + + /** + * 获得厂区配件领用 + * + * @param id 编号 + * @return 厂区配件领用 + */ + AccessoriesCollarDO getAccessoriesCollar(Long id); + + /** + * 获得厂区配件领用分页 + * + * @param pageReqVO 分页查询 + * @return 厂区配件领用分页 + */ + PageResult getAccessoriesCollarPage(AccessoriesCollarPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java new file mode 100644 index 00000000..440debde --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/accessoriescollar/AccessoriesCollarServiceImpl.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.smartfactory.service.accessoriescollar; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.accessoriescollar.vo.AccessoriesCollarSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.accessoriescollar.AccessoriesCollarDO; +import cn.iocoder.yudao.module.smartfactory.dal.mysql.accessoriescollar.AccessoriesCollarMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.ACCESSORIES_COLLAR_NOT_EXISTS; + +/** + * 厂区配件领用 Service 实现类 + * + * @author 符溶馨 + */ +@Service +@Validated +public class AccessoriesCollarServiceImpl implements AccessoriesCollarService { + + @Resource + private AccessoriesCollarMapper accessoriesCollarMapper; + + @Override + public Long createAccessoriesCollar(AccessoriesCollarSaveReqVO createReqVO) { + // 插入 + AccessoriesCollarDO accessoriesCollar = BeanUtils.toBean(createReqVO, AccessoriesCollarDO.class); + accessoriesCollarMapper.insert(accessoriesCollar); + // 返回 + return accessoriesCollar.getId(); + } + + @Override + public void updateAccessoriesCollar(AccessoriesCollarSaveReqVO updateReqVO) { + // 校验存在 + validateAccessoriesCollarExists(updateReqVO.getId()); + // 更新 + AccessoriesCollarDO updateObj = BeanUtils.toBean(updateReqVO, AccessoriesCollarDO.class); + accessoriesCollarMapper.updateById(updateObj); + } + + @Override + public void deleteAccessoriesCollar(Long id) { + // 校验存在 + validateAccessoriesCollarExists(id); + // 删除 + accessoriesCollarMapper.deleteById(id); + } + + private void validateAccessoriesCollarExists(Long id) { + if (accessoriesCollarMapper.selectById(id) == null) { + throw exception(ACCESSORIES_COLLAR_NOT_EXISTS); + } + } + + @Override + public AccessoriesCollarDO getAccessoriesCollar(Long id) { + return accessoriesCollarMapper.selectById(id); + } + + @Override + public PageResult getAccessoriesCollarPage(AccessoriesCollarPageReqVO pageReqVO) { + return accessoriesCollarMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java index 7aebdccb..cb6daa40 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.smartfactory.service.factoryinfo; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryProfitVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryUpdateStatusReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.FactoryRollDataRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.ProvincesDataRespVO; @@ -136,4 +137,13 @@ public interface FactoryInfoService { * @param updateReqVO 更新信息 */ void updateFactoryStatus(FactoryUpdateStatusReqVO updateReqVO); + + /** + * 工厂每月利润 + * + * @param factoryId 工厂编号 + * @param month 月份 + * @return 利润列表 + */ + List getProfit(Long factoryId, String month); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java index dd1c5775..d351569e 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryinfo/FactoryInfoServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.smartfactory.service.factoryinfo; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.DeptTypeEnum; @@ -10,6 +11,7 @@ import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryProfitVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryUpdateStatusReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.FactoryRollDataRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.ProvincesDataRespVO; @@ -280,4 +282,32 @@ public class FactoryInfoServiceImpl implements FactoryInfoService { deptRespDTO.setStatus(updateReqVO.getStatus()); deptApi.updateFactoryDept(deptRespDTO); } + + @Override + public List getProfit(Long factoryId, String month) { + + List result = factoryInfoMapper.selectProfit(factoryId, month); + if (CollUtil.isNotEmpty(result)) { + // 设置叉车毛利、打包毛利、搬运毛利 = 收入 - 扣款 - 人员工资 - 支出 + result.forEach(vo -> { + // 设置叉车毛利 + vo.setForkliftGrossProfit(vo.getForkliftRevenue() + .subtract(vo.getForkliftDeduction()) + .subtract(vo.getForkliftSalary()) + .subtract(vo.getForkliftExpenses())); + // 设置打包毛利 + vo.setPackageGrossProfit(vo.getPackageRevenue() + .subtract(vo.getPackageDeduction()) + .subtract(vo.getPackageSalary()) + .subtract(vo.getPackageExpenses())); + // 设置搬运毛利 + vo.setPorterageGrossProfit(vo.getPorterageRevenue() + .subtract(vo.getPorterageDeduction()) + .subtract(vo.getPorterageSalary()) + .subtract(vo.getTransportationExpenses())); + }); + } + + return result; + } } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java index 899b83ae..8356df13 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java @@ -110,7 +110,9 @@ public class StaffServiceImpl implements StaffService { // 设置工种名称 dos.forEach(item -> { - item.setPostName(workTypeMap.getOrDefault(item.getWorkTypeId().toString(), "")); + if (item.getWorkTypeId() != null) { + item.setPostName(workTypeMap.getOrDefault(item.getWorkTypeId().toString(), "")); + } }); vo.setTotal(dos.size()); diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml index a59c28cd..0fb21570 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml @@ -31,4 +31,120 @@ left join sf_factory_info as b on a.code = #{areaCode} where b.id = #{factoryId} + + \ No newline at end of file From 4bba4a550739840c73b4c47b1be860aa49b04de9 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Mon, 3 Mar 2025 19:29:55 +0800 Subject: [PATCH 4/7] =?UTF-8?q?refactor(system):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=BB=93=E7=AE=97=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构客户结算明细的更新逻辑,分为创建和更新两个步骤 - 在 FactoryInfoMapper 中使用 COALESCE 函数处理结算金额为空的情况 --- .../CustomerSettlementServiceImpl.java | 13 ++++++++++++- .../mapper/factoryinfo/FactoryInfoMapper.xml | 10 +++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java index fb5025c1..57a933c5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java @@ -95,8 +95,19 @@ public class CustomerSettlementServiceImpl implements CustomerSettlementService // 同步更新结算明细 if (CollUtil.isNotEmpty(updateReqVO.getSettlementItems())) { + // 获取需创建的 结算明细 + List createDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream() + .filter(item -> item.getId() == null) + .collect(Collectors.toList()); + // 获取需更新的 结算明细 + List updateDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream() + .filter(item -> item.getId() != null) + .collect(Collectors.toList()); + + //插入 + settlementItemMapper.insertBatch(createDO); // 更新 - settlementItemMapper.updateBatch(BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class)); + settlementItemMapper.updateBatch(updateDO); } customerSettlementMapper.updateById(updateObj); diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml index 0fb21570..31f3783a 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml @@ -47,11 +47,11 @@ scs.customer_id AS factoryId, factory.short_name AS factoryName, scs.settlement_month,-- 收入明细 - SUM( CASE WHEN ssi.business_type = 1 THEN ssi.settlement_amount ELSE 0 END ) AS forkliftRevenue,-- 叉车收入 - SUM( CASE WHEN ssi.business_type = 2 THEN ssi.settlement_amount ELSE 0 END ) AS packageRevenue,-- 打包收入 - SUM( CASE WHEN ssi.business_type = 3 THEN ssi.settlement_amount ELSE 0 END ) AS porterageRevenue,-- 搬运收入 - SUM( CASE WHEN ssi.business_type = 4 THEN ssi.settlement_amount ELSE 0 END ) AS forkliftRentalRevenue,-- 叉车租赁收入 - SUM( CASE WHEN ssi.business_type = 5 THEN ssi.settlement_amount ELSE 0 END ) AS transportationRevenue,-- 运输收入 + SUM( CASE WHEN ssi.business_type = 1 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS forkliftRevenue,-- 叉车收入 + SUM( CASE WHEN ssi.business_type = 2 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS packageRevenue,-- 打包收入 + SUM( CASE WHEN ssi.business_type = 3 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS porterageRevenue,-- 搬运收入 + SUM( CASE WHEN ssi.business_type = 4 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS forkliftRentalRevenue,-- 叉车租赁收入 + SUM( CASE WHEN ssi.business_type = 5 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS transportationRevenue,-- 运输收入 SUM( CASE WHEN ssi.business_type = 1 THEN ssi.deduction_amount ELSE 0 END ) AS forkliftDeduction,-- 叉车扣款 SUM( CASE WHEN ssi.business_type = 2 THEN ssi.deduction_amount ELSE 0 END ) AS packageDeduction,-- 打包扣款 SUM( CASE WHEN ssi.business_type = 3 THEN ssi.deduction_amount ELSE 0 END ) AS porterageDeduction,-- 搬运扣款 From 0a8e1c73ecfcf42400e7c39f8603256a04fb3c21 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Tue, 4 Mar 2025 21:26:42 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat(bpm):=20=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E5=BC=80=E6=94=AF=E7=94=B3=E8=AF=B7=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增生产开支申请分页接口和相关 VO 类 - 实现生产开支申请分页查询逻辑 - 添加分页查询所需的 SQL 映射文件 - 优化费用类型变量处理,支持多值 -调整薪资付款流程的部门判断逻辑 --- .../admin/oa/BpmOAExpensesController.java | 11 ++++ .../vo/expenses/BpmOAExpensesPageReqVO.java | 33 ++++++++++ .../vo/expenses/BpmOAExpensesPageRespVO.java | 61 +++++++++++++++++++ .../bpm/dal/mysql/oa/BpmOAExpensesMapper.java | 7 +++ .../impl/BpmTaskFactoryLeaderScript.java | 27 ++++---- .../bpm/service/oa/BpmOAExpensesService.java | 10 +++ .../service/oa/BpmOAExpensesServiceImpl.java | 14 +++++ .../mapper/oa/BpmOAExpensesMapper.xml | 60 ++++++++++++++++++ 8 files changed, 212 insertions(+), 11 deletions(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java index 1a7e9374..5d10528f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java @@ -1,7 +1,10 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService; @@ -59,4 +62,12 @@ public class BpmOAExpensesController { return success(respVO); } + + @GetMapping("/page") + @Operation(summary = "获得生产开支申请分页") + public CommonResult> getExpensesPage(BpmOAExpensesPageReqVO pageReqVO) { + + PageResult respVO = expensesService.getExpensesPage(pageReqVO); + return success(respVO); + } } \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java new file mode 100644 index 00000000..1c39c2d4 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 开支日报分页 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class BpmOAExpensesPageReqVO extends PageParam { + + @Schema(description = "申请人用户编号", example = "1") + private Long userId; + + @Schema(description = "所属工厂编号", example = "1") + private Long factoryId; + + @Schema(description = "费用类型 | 字典值参照bpm_oa_expenses_type") + private Integer type; + + @Schema(description = "费用板块 | 1叉车 2打包 3搬运 4运输") + private Integer costSection; + + @Schema(description = "审批通过时间") + private LocalDateTime[] endTime; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java new file mode 100644 index 00000000..141f6047 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageRespVO.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses; + +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; + +/** + * @author 符溶馨 + */ +@Schema(description = "管理后台 - 生产开支 请求Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BpmOAExpensesPageRespVO extends BpmOABaseRespVO { + + @Schema(description = "申请人用户编号") + private Long userId; + + @Schema(description = "申请人用户名称") + private String userName; + + @Schema(description = "收款人信息编号") + private Long bankId; + + @Schema(description = "收款人名称") + private String payeeName; + + @Schema(description = "银行卡号") + private String bankNo; + + @Schema(description = "开户行名称") + private String bankName; + + @Schema(description = "报销总金额") + private BigDecimal totalMoney; + + @Schema(description = "费用申请主键") + private Long expensesId; + + @Schema(description = "费用类型 | 字典值参照bpm_oa_expenses_type") + private Integer type; + + @Schema(description = "费用板块 | 1叉车 2打包 3搬运 4运输") + private Integer costSection; + + @Schema(description = "费用产生部门") + private Long deptId; + + @Schema(description = "费用产生部门名称") + private String deptName; + + @Schema(description = "支出金额") + private BigDecimal amount; + + @Schema(description = "费用明细") + private String detail; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java index 7290a4ee..b52cb8c9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java @@ -1,9 +1,16 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; @Mapper public interface BpmOAExpensesMapper extends BaseMapperX { + + IPage selectExpensesPage(@Param("page") IPage page, + @Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java index 44656920..eda3fd69 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/script/impl/BpmTaskFactoryLeaderScript.java @@ -4,15 +4,15 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO; +import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOALoanService; +import cn.iocoder.yudao.module.bpm.service.oa.BpmOASalaryService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; -import cn.iocoder.yudao.module.system.api.user.AdminUserApi; -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.context.annotation.Lazy; @@ -31,9 +31,6 @@ import static java.util.Collections.emptySet; @Component public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScript { - @Resource - private AdminUserApi userApi; - @Resource private DeptApi deptApi; @@ -53,6 +50,10 @@ public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScrip @Lazy // 解决循环依赖 private BpmOALoanService loanService; + @Resource + @Lazy + private BpmOASalaryService salaryService; + @Override public Set calculateTaskCandidateUsers(DelegateExecution execution) { // 获得发起人 @@ -87,14 +88,18 @@ public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScrip } break; case "oa_salary_2": - // 获取发起人的部门信息 - AdminUserRespDTO userRespDTO = userApi.getUser(Long.valueOf(processInstance.getStartUserId())).getCheckedData(); - DeptRespDTO deptRespDTO = deptApi.getDept(userRespDTO.getDeptId()).getCheckedData(); + // 根据流程实例ID 取到薪资付款流程表单 + BpmOASalaryDO salaryDO = salaryService.getByProcessInstanceId(processInstance.getProcessInstanceId()); + if (salaryDO != null) { - // 判断是否是属于工厂部门 - if (deptRespDTO.getFactoryId() != null) { - dept = deptApi.getDept(deptRespDTO.getParentId()).getCheckedData(); + // 获取申请部门信息 + DeptRespDTO deptRespDTO = deptApi.getDept(salaryDO.getCompanyDeptId()).getCheckedData(); + // 判断是否是属于工厂部门 + if (deptRespDTO != null && deptRespDTO.getFactoryId() != null) { + dept = deptApi.getDept(deptRespDTO.getParentId()).getCheckedData(); + } } + break; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java index d2527379..fb2c4152 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.bpm.service.oa; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; @@ -57,4 +60,11 @@ public interface BpmOAExpensesService { * @return 开支对象 */ BpmOAExpensesRespVO convertExpenses(BpmOAExpensesDO expenses); + + /** + * 获得生产开支申请分页 + * @param pageReqVO 分页信息 + * @return 分页结果 + */ + PageResult getExpensesPage(BpmOAExpensesPageReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java index 4b108bfd..39f2ea95 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java @@ -1,10 +1,14 @@ package cn.iocoder.yudao.module.bpm.service.oa; +import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAExpensesConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; @@ -18,6 +22,7 @@ import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,6 +32,7 @@ import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; @@ -82,6 +88,8 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE // 发起 BPM 流程 Map processInstanceVariables = new HashMap<>(); + String type = bpmOAExpensesItemDOS.stream().map(item -> item.getType().toString()).collect(Collectors.joining(",")); + processInstanceVariables.put("type", type); String processInstanceId = processInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(expenses.getId()))).getCheckedData(); @@ -163,4 +171,10 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE return BpmOAExpensesConvert.INSTANCE.convert1(expenses, expensesItemDOs, deptMap, bankRespDTO); } + + @Override + public PageResult getExpensesPage(BpmOAExpensesPageReqVO pageReqVO) { + IPage page = expensesMapper.selectExpensesPage(MyBatisUtils.buildPage(pageReqVO) ,pageReqVO); + return new PageResult<>(page.getRecords(), page.getTotal()); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml new file mode 100644 index 00000000..1fa05326 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + From c0d0515fe59cb17e4029b216be174cb9d3cb7894 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Tue, 4 Mar 2025 21:27:28 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix(zn-module-smartfactory):=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=B4=B9=E7=94=A8=E7=BB=9F=E8=AE=A1=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -将统计时间字段从 boei.application_date 改为 bp.end_time- 通过 bpm_process_instance_ext表获取流程结束时间,以反映实际费用发生时间 - 此修改提高了费用统计的准确性和可靠性 --- .../main/resources/mapper/factoryinfo/FactoryInfoMapper.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml index 31f3783a..d9fc41f4 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml @@ -100,7 +100,7 @@ LEFT JOIN ( SELECT boei.dept_id, - DATE_FORMAT( boei.application_date, '%Y-%m' ) AS month, + DATE_FORMAT( bp.end_time, '%Y-%m' ) AS month, SUM( CASE WHEN boei.type = 1 THEN boei.total_money ELSE 0 END ) AS forkliftAccessories,-- 叉车配件 SUM( CASE WHEN boei.type = 2 THEN boei.total_money ELSE 0 END ) AS packageAccessories,-- 打包配件 SUM( CASE WHEN boei.type = 6 AND boei.cost_section = 3 THEN boei.total_money ELSE 0 END ) AS transportationAmount,-- 搬运劳保 @@ -113,12 +113,13 @@ FROM bpm_oa_expenses_item boei JOIN bpm_oa_expenses boe ON boei.expenses_id = boe.id + JOIN bpm_process_instance_ext bp ON boe.process_instance_id = bp.process_instance_id WHERE boe.deleted = 0 and boe.result = 2 GROUP BY boei.dept_id, - DATE_FORMAT( boei.application_date, '%Y-%m' ) + DATE_FORMAT( bp.end_time, '%Y-%m' ) ) iii ON scs.customer_id = iii.dept_id AND scs.settlement_month = iii.MONTH LEFT JOIN ( From 940918d2b8897f8a0abb6b6e992324d566097c60 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Tue, 4 Mar 2025 22:24:01 +0800 Subject: [PATCH 7/7] =?UTF-8?q?refactor(factoryinfo):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改了 SQL 查询的结构,优化了表的连接方式 - 将结算月份参数化,提高查询灵活性 - 调整了工厂信息的获取方式,直接使用 sf_factory_info 表 - 优化了计算逻辑,使配件和支出的计算更加清晰 --- .../mapper/factoryinfo/FactoryInfoMapper.xml | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml index d9fc41f4..3d898a4f 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryinfo/FactoryInfoMapper.xml @@ -44,9 +44,9 @@ system_customer_settlement scs ) SELECT - scs.customer_id AS factoryId, - factory.short_name AS factoryName, - scs.settlement_month,-- 收入明细 + sf.id AS factoryId, + sf.short_name AS factoryName, + #{month} AS settlementMonth,-- 收入明细 SUM( CASE WHEN ssi.business_type = 1 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS forkliftRevenue,-- 叉车收入 SUM( CASE WHEN ssi.business_type = 2 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS packageRevenue,-- 打包收入 SUM( CASE WHEN ssi.business_type = 3 THEN COALESCE(ssi.settlement_amount, ssi.pre_settlement_amount) ELSE 0 END ) AS porterageRevenue,-- 搬运收入 @@ -63,19 +63,19 @@ COALESCE ( sss.porterageSalary, 0.00 ) AS porterageSalary,-- 搬运实发工资 COALESCE ( sss.transportSalary, 0.00 ) AS transportSalary,-- 运输实发工资 COALESCE ( sss.otherSalary, 0.00 ) AS otherSalary,-- 其他实发工资 - COALESCE ( iii.forkliftAccessories + sac.forklift_accessories, 0.00 ) AS forkliftAccessories, -- 叉车配件 - COALESCE ( iii.packageAccessories + sac.package_accessories, 0.00 ) AS packageAccessories, -- 打包配件 - COALESCE ( iii.transportationAmount + sac.transportation_amount, 0.00 ) AS transportationAmount, -- 搬运劳保 + COALESCE ( iii.forkliftAccessories, 0.00 ) + COALESCE ( sac.forklift_accessories, 0.00 ) AS forkliftAccessories, -- 叉车配件 + COALESCE ( iii.packageAccessories, 0.00 ) + COALESCE ( sac.package_accessories, 0.00 ) AS packageAccessories, -- 打包配件 + COALESCE ( iii.transportationAmount, 0.00 ) + COALESCE ( sac.transportation_amount, 0.00 ) AS transportationAmount, -- 搬运劳保 COALESCE ( iii.injuryAmount, 0.00 ) AS injuryAmount, -- 工伤赔偿 COALESCE ( loan.loanAmount, 0.00 ) AS loanAmount, -- 工资及借支 COALESCE ( iii.travelExpenses, 0.00 ) AS travelExpenses, -- 差旅费用 COALESCE ( iii.otherAmount, 0.00 ) AS otherAmount, -- 其他 - COALESCE ( iii.forkliftExpenses + sac.forklift_accessories, 0.00 ) AS forkliftExpenses, -- 叉车支出 - COALESCE ( iii.packageExpenses + sac.package_accessories, 0.00 ) AS packageExpenses, -- 打包支出 - COALESCE ( iii.transportationExpenses + sac.transportation_amount, 0.00 ) AS transportationExpenses -- 搬运支出 + COALESCE ( iii.forkliftExpenses, 0.00 ) + COALESCE ( sac.forklift_accessories, 0.00 ) AS forkliftExpenses, -- 叉车支出 + COALESCE ( iii.packageExpenses, 0.00 ) + COALESCE ( sac.package_accessories, 0.00 ) AS packageExpenses, -- 打包支出 + COALESCE ( iii.transportationExpenses, 0.00 ) + COALESCE ( sac.transportation_amount, 0.00 ) AS transportationExpenses -- 搬运支出 FROM - system_customer_settlement scs - LEFT JOIN sf_factory_info factory ON scs.customer_id = factory.id + sf_factory_info sf + LEFT JOIN system_customer_settlement scs ON sf.id = scs.customer_id AND scs.settlement_month = #{month} LEFT JOIN system_settlement_item ssi ON scs.id = ssi.settlement_id LEFT JOIN json_extracted je ON scs.id = je.settlement_id LEFT JOIN ( @@ -95,8 +95,8 @@ GROUP BY s.factory_id, ss.month - ) sss ON scs.customer_id = sss.factory_id - AND scs.settlement_month = sss.month + ) sss ON sf.id = sss.factory_id + AND sss.month = #{month} LEFT JOIN ( SELECT boei.dept_id, @@ -120,8 +120,8 @@ GROUP BY boei.dept_id, DATE_FORMAT( bp.end_time, '%Y-%m' ) - ) iii ON scs.customer_id = iii.dept_id - AND scs.settlement_month = iii.MONTH + ) iii ON sf.id = iii.dept_id + AND iii.MONTH = #{month} LEFT JOIN ( SELECT oaLoan.total_money as loanAmount, @@ -134,18 +134,20 @@ oaLoan.process_instance_id = bp.process_instance_id AND oaLoan.deleted = 0 AND oaLoan.result = 2 - ) loan ON scs.customer_id = loan.factoryId - AND scs.settlement_month = loan.endTime - LEFT JOIN sf_accessories_collar sac ON sac.factory_id = scs.customer_id - AND scs.settlement_month = sac.month + ) loan ON sf.id = loan.factoryId + AND loan.endTime = #{month} + LEFT JOIN sf_accessories_collar sac ON sac.factory_id = sf.id + AND sac.month = #{month} AND sac.status = 1 AND sac.deleted = 0 WHERE - scs.settlement_month = #{month} + sf.type = 3 + AND sf.deleted = 0 + AND sf.status = 0 - AND scs.customer_id = #{factoryId} + AND sf.id = #{factoryId} GROUP BY - scs.id; + sf.id; \ No newline at end of file