wuxw лет назад: 2
Родитель
Сommit
3e43af706f

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeDetailDto.java

@@ -39,6 +39,7 @@ public class FeeDetailDto extends PageDto implements Serializable {
 
     private String primeRate;
     private String detailId;
+    private String[] detailIds;
     private String receivableAmount;
     private String cycles;
     private String remark;
@@ -416,4 +417,12 @@ public class FeeDetailDto extends PageDto implements Serializable {
     public void setReceiptCode(String receiptCode) {
         this.receiptCode = receiptCode;
     }
+
+    public String[] getDetailIds() {
+        return detailIds;
+    }
+
+    public void setDetailIds(String[] detailIds) {
+        this.detailIds = detailIds;
+    }
 }

+ 7 - 0
java110-bean/src/main/java/com/java110/dto/invoiceApply/InvoiceApplyDto.java

@@ -16,6 +16,13 @@ import java.util.Date;
  **/
 public class InvoiceApplyDto extends OwnerInvoiceDto implements Serializable {
 
+    public static final String STATE_WAIT = "W";//W待审核 U 待上传 F 审核失败 G 带领用 C 已领用
+    public static final String STATE_UPLOAD = "U";//W待审核 U 待上传 F 审核失败 G 带领用 C 已领用
+    public static final String STATE_FAIL = "F";//W待审核 U 待上传 F 审核失败 G 带领用 C 已领用
+    public static final String STATE_GET = "G";//W待审核 U 待上传 F 审核失败 G 带领用 C 已领用
+    public static final String STATE_COMPLETE = "C";//W待审核 U 待上传 F 审核失败 G 带领用 C 已领用
+
+
     private String applyId;
     private String oiId;
     private String createUserId;

+ 41 - 22
java110-bean/src/main/java/com/java110/dto/invoiceApplyItem/InvoiceApplyItemDto.java

@@ -1,6 +1,7 @@
 package com.java110.dto.invoiceApplyItem;
 
 import com.java110.dto.PageDto;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -14,14 +15,17 @@ import java.util.Date;
  **/
 public class InvoiceApplyItemDto extends PageDto implements Serializable {
 
+    public static final String ITEM_TYPE_ACCT = "1001";//1001 账户预存 2002 物业缴费
+    public static final String ITEM_TYPE_FEE = "2002";//1001 账户预存 2002 物业缴费
+
     private String itemId;
-private String applyId;
-private String itemType;
-private String itemName;
-private String itemAmount;
-private String itemObjId;
-private String remark;
-private String communityId;
+    private String applyId;
+    private String itemType;
+    private String itemName;
+    private String itemAmount;
+    private String itemObjId;
+    private String remark;
+    private String communityId;
 
 
     private Date createTime;
@@ -32,49 +36,64 @@ private String communityId;
     public String getItemId() {
         return itemId;
     }
-public void setItemId(String itemId) {
+
+    public void setItemId(String itemId) {
         this.itemId = itemId;
     }
-public String getApplyId() {
+
+    public String getApplyId() {
         return applyId;
     }
-public void setApplyId(String applyId) {
+
+    public void setApplyId(String applyId) {
         this.applyId = applyId;
     }
-public String getItemType() {
+
+    public String getItemType() {
         return itemType;
     }
-public void setItemType(String itemType) {
+
+    public void setItemType(String itemType) {
         this.itemType = itemType;
     }
-public String getItemName() {
+
+    public String getItemName() {
         return itemName;
     }
-public void setItemName(String itemName) {
+
+    public void setItemName(String itemName) {
         this.itemName = itemName;
     }
-public String getItemAmount() {
+
+    public String getItemAmount() {
         return itemAmount;
     }
-public void setItemAmount(String itemAmount) {
+
+    public void setItemAmount(String itemAmount) {
         this.itemAmount = itemAmount;
     }
-public String getItemObjId() {
+
+    public String getItemObjId() {
         return itemObjId;
     }
-public void setItemObjId(String itemObjId) {
+
+    public void setItemObjId(String itemObjId) {
         this.itemObjId = itemObjId;
     }
-public String getRemark() {
+
+    public String getRemark() {
         return remark;
     }
-public void setRemark(String remark) {
+
+    public void setRemark(String remark) {
         this.remark = remark;
     }
-public String getCommunityId() {
+
+    public String getCommunityId() {
         return communityId;
     }
-public void setCommunityId(String communityId) {
+
+    public void setCommunityId(String communityId) {
         this.communityId = communityId;
     }
 

+ 60 - 36
java110-bean/src/main/java/com/java110/po/invoiceApply/InvoiceApplyPo.java

@@ -17,6 +17,7 @@ package com.java110.po.invoiceApply;
 
 import java.io.Serializable;
 import java.util.Date;
+
 /**
  * 类表述: Po 数据模型实体对象 基本保持与数据库模型一直 用于 增加修改删除 等时的数据载体
  * add by 吴学文 at 2023-10-08 16:26:34 mail: 928255095@qq.com
@@ -28,90 +29,113 @@ import java.util.Date;
 public class InvoiceApplyPo implements Serializable {
 
     private String applyId;
-private String oiId;
-private String createUserId;
-private String ownerName;
-private String invoiceType;
-private String applyTel;
-private String invoiceAmount;
-private String createUserName;
-private String remark;
-private String statusCd = "0";
-private String state;
-private String communityId;
-public String getApplyId() {
+    private String oiId;
+    private String createUserId;
+    private String ownerName;
+    private String invoiceType;
+    private String applyTel;
+    private String invoiceAmount;
+    private String createUserName;
+    private String remark;
+    private String statusCd = "0";
+    private String state;
+    private String communityId;
+
+    public String getApplyId() {
         return applyId;
     }
-public void setApplyId(String applyId) {
+
+    public void setApplyId(String applyId) {
         this.applyId = applyId;
     }
-public String getOiId() {
+
+    public String getOiId() {
         return oiId;
     }
-public void setOiId(String oiId) {
+
+    public void setOiId(String oiId) {
         this.oiId = oiId;
     }
-public String getCreateUserId() {
+
+    public String getCreateUserId() {
         return createUserId;
     }
-public void setCreateUserId(String createUserId) {
+
+    public void setCreateUserId(String createUserId) {
         this.createUserId = createUserId;
     }
-public String getOwnerName() {
+
+    public String getOwnerName() {
         return ownerName;
     }
-public void setOwnerName(String ownerName) {
+
+    public void setOwnerName(String ownerName) {
         this.ownerName = ownerName;
     }
-public String getInvoiceType() {
+
+    public String getInvoiceType() {
         return invoiceType;
     }
-public void setInvoiceType(String invoiceType) {
+
+    public void setInvoiceType(String invoiceType) {
         this.invoiceType = invoiceType;
     }
-public String getApplyTel() {
+
+    public String getApplyTel() {
         return applyTel;
     }
-public void setApplyTel(String applyTel) {
+
+    public void setApplyTel(String applyTel) {
         this.applyTel = applyTel;
     }
-public String getInvoiceAmount() {
+
+    public String getInvoiceAmount() {
         return invoiceAmount;
     }
-public void setInvoiceAmount(String invoiceAmount) {
+
+    public void setInvoiceAmount(String invoiceAmount) {
         this.invoiceAmount = invoiceAmount;
     }
-public String getCreateUserName() {
+
+    public String getCreateUserName() {
         return createUserName;
     }
-public void setCreateUserName(String createUserName) {
+
+    public void setCreateUserName(String createUserName) {
         this.createUserName = createUserName;
     }
-public String getRemark() {
+
+    public String getRemark() {
         return remark;
     }
-public void setRemark(String remark) {
+
+    public void setRemark(String remark) {
         this.remark = remark;
     }
-public String getStatusCd() {
+
+    public String getStatusCd() {
         return statusCd;
     }
-public void setStatusCd(String statusCd) {
+
+    public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
-public String getState() {
+
+    public String getState() {
         return state;
     }
-public void setState(String state) {
+
+    public void setState(String state) {
         this.state = state;
     }
-public String getCommunityId() {
+
+    public String getCommunityId() {
         return communityId;
     }
-public void setCommunityId(String communityId) {
+
+    public void setCommunityId(String communityId) {
         this.communityId = communityId;
     }
 
 
-
 }

+ 110 - 103
java110-db/src/main/resources/mapper/acct/InvoiceApplyItemV1ServiceDaoImplMapper.xml

@@ -5,129 +5,136 @@
 <mapper namespace="invoiceApplyItemV1ServiceDaoImpl">
 
 
-
-
-
     <!-- 保存发票申请项信息 add by wuxw 2018-07-03 -->
     <insert id="saveInvoiceApplyItemInfo" parameterType="Map">
         insert into invoice_apply_item(
-item_id,apply_id,item_type,item_name,item_amount,item_obj_id,remark,community_id
-) values (
-#{itemId},#{applyId},#{itemType},#{itemName},#{itemAmount},#{itemObjId},#{remark},#{communityId}
-)
+        item_id,apply_id,item_type,item_name,item_amount,item_obj_id,remark,community_id
+        ) values (
+        #{itemId},#{applyId},#{itemType},#{itemName},#{itemAmount},#{itemObjId},#{remark},#{communityId}
+        )
     </insert>
 
 
+    <insert id="saveInvoiceApplyItems" parameterType="Map">
+        insert into invoice_apply_item(
+        item_id,apply_id,item_type,item_name,item_amount,item_obj_id,remark,community_id
+        ) values
+        <foreach collection="invoiceApplyItemPos" item="item" separator=",">
+            (#{item.itemId},#{item.applyId},#{item.itemType},#{item.itemName},#{item.itemAmount},#{item.itemObjId},#{item.remark},#{item.communityId})
+        </foreach>
+    </insert>
+
 
     <!-- 查询发票申请项信息 add by wuxw 2018-07-03 -->
     <select id="getInvoiceApplyItemInfo" parameterType="Map" resultType="Map">
-        select  t.item_id,t.item_id itemId,t.apply_id,t.apply_id applyId,t.item_type,t.item_type itemType,t.item_name,t.item_name itemName,t.item_amount,t.item_amount itemAmount,t.item_obj_id,t.item_obj_id itemObjId,t.remark,t.status_cd,t.status_cd statusCd,t.community_id,t.community_id communityId 
-from invoice_apply_item t 
-where 1 =1 
-<if test="itemId !=null and itemId != ''">
-   and t.item_id= #{itemId}
-</if> 
-<if test="applyId !=null and applyId != ''">
-   and t.apply_id= #{applyId}
-</if> 
-<if test="itemType !=null and itemType != ''">
-   and t.item_type= #{itemType}
-</if> 
-<if test="itemName !=null and itemName != ''">
-   and t.item_name= #{itemName}
-</if> 
-<if test="itemAmount !=null and itemAmount != ''">
-   and t.item_amount= #{itemAmount}
-</if> 
-<if test="itemObjId !=null and itemObjId != ''">
-   and t.item_obj_id= #{itemObjId}
-</if> 
-<if test="remark !=null and remark != ''">
-   and t.remark= #{remark}
-</if> 
-<if test="statusCd !=null and statusCd != ''">
-   and t.status_cd= #{statusCd}
-</if> 
-<if test="communityId !=null and communityId != ''">
-   and t.community_id= #{communityId}
-</if> 
-order by t.create_time desc
-<if test="page != -1 and page != null ">
-   limit #{page}, #{row}
-</if> 
+        select t.item_id,t.item_id itemId,t.apply_id,t.apply_id applyId,t.item_type,t.item_type
+        itemType,t.item_name,t.item_name itemName,t.item_amount,t.item_amount itemAmount,t.item_obj_id,t.item_obj_id
+        itemObjId,t.remark,t.status_cd,t.status_cd statusCd,t.community_id,t.community_id communityId
+        from invoice_apply_item t
+        where 1 =1
+        <if test="itemId !=null and itemId != ''">
+            and t.item_id= #{itemId}
+        </if>
+        <if test="applyId !=null and applyId != ''">
+            and t.apply_id= #{applyId}
+        </if>
+        <if test="itemType !=null and itemType != ''">
+            and t.item_type= #{itemType}
+        </if>
+        <if test="itemName !=null and itemName != ''">
+            and t.item_name= #{itemName}
+        </if>
+        <if test="itemAmount !=null and itemAmount != ''">
+            and t.item_amount= #{itemAmount}
+        </if>
+        <if test="itemObjId !=null and itemObjId != ''">
+            and t.item_obj_id= #{itemObjId}
+        </if>
+        <if test="remark !=null and remark != ''">
+            and t.remark= #{remark}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="communityId !=null and communityId != ''">
+            and t.community_id= #{communityId}
+        </if>
+        order by t.create_time desc
+        <if test="page != -1 and page != null ">
+            limit #{page}, #{row}
+        </if>
 
     </select>
 
 
-
-
     <!-- 修改发票申请项信息 add by wuxw 2018-07-03 -->
     <update id="updateInvoiceApplyItemInfo" parameterType="Map">
-        update  invoice_apply_item t set t.status_cd = #{statusCd}
-<if test="newBId != null and newBId != ''">
-,t.b_id = #{newBId}
-</if> 
-<if test="itemId !=null and itemId != ''">
-, t.item_id= #{itemId}
-</if> 
-<if test="itemType !=null and itemType != ''">
-, t.item_type= #{itemType}
-</if> 
-<if test="itemName !=null and itemName != ''">
-, t.item_name= #{itemName}
-</if> 
-<if test="itemAmount !=null and itemAmount != ''">
-, t.item_amount= #{itemAmount}
-</if> 
-<if test="itemObjId !=null and itemObjId != ''">
-, t.item_obj_id= #{itemObjId}
-</if> 
-<if test="remark !=null and remark != ''">
-, t.remark= #{remark}
-</if> 
-<if test="communityId !=null and communityId != ''">
-, t.community_id= #{communityId}
-</if> 
- where 1=1 <if test="applyId !=null and applyId != ''">
-and t.apply_id= #{applyId}
-</if> 
+        update invoice_apply_item t set t.status_cd = #{statusCd}
+        <if test="newBId != null and newBId != ''">
+            ,t.b_id = #{newBId}
+        </if>
+        <if test="itemId !=null and itemId != ''">
+            , t.item_id= #{itemId}
+        </if>
+        <if test="itemType !=null and itemType != ''">
+            , t.item_type= #{itemType}
+        </if>
+        <if test="itemName !=null and itemName != ''">
+            , t.item_name= #{itemName}
+        </if>
+        <if test="itemAmount !=null and itemAmount != ''">
+            , t.item_amount= #{itemAmount}
+        </if>
+        <if test="itemObjId !=null and itemObjId != ''">
+            , t.item_obj_id= #{itemObjId}
+        </if>
+        <if test="remark !=null and remark != ''">
+            , t.remark= #{remark}
+        </if>
+        <if test="communityId !=null and communityId != ''">
+            , t.community_id= #{communityId}
+        </if>
+        where 1=1
+        <if test="applyId !=null and applyId != ''">
+            and t.apply_id= #{applyId}
+        </if>
 
     </update>
 
     <!-- 查询发票申请项数量 add by wuxw 2018-07-03 -->
-     <select id="queryInvoiceApplyItemsCount" parameterType="Map" resultType="Map">
-        select  count(1) count 
-from invoice_apply_item t 
-where 1 =1 
-<if test="itemId !=null and itemId != ''">
-   and t.item_id= #{itemId}
-</if> 
-<if test="applyId !=null and applyId != ''">
-   and t.apply_id= #{applyId}
-</if> 
-<if test="itemType !=null and itemType != ''">
-   and t.item_type= #{itemType}
-</if> 
-<if test="itemName !=null and itemName != ''">
-   and t.item_name= #{itemName}
-</if> 
-<if test="itemAmount !=null and itemAmount != ''">
-   and t.item_amount= #{itemAmount}
-</if> 
-<if test="itemObjId !=null and itemObjId != ''">
-   and t.item_obj_id= #{itemObjId}
-</if> 
-<if test="remark !=null and remark != ''">
-   and t.remark= #{remark}
-</if> 
-<if test="statusCd !=null and statusCd != ''">
-   and t.status_cd= #{statusCd}
-</if> 
-<if test="communityId !=null and communityId != ''">
-   and t.community_id= #{communityId}
-</if> 
+    <select id="queryInvoiceApplyItemsCount" parameterType="Map" resultType="Map">
+        select count(1) count
+        from invoice_apply_item t
+        where 1 =1
+        <if test="itemId !=null and itemId != ''">
+            and t.item_id= #{itemId}
+        </if>
+        <if test="applyId !=null and applyId != ''">
+            and t.apply_id= #{applyId}
+        </if>
+        <if test="itemType !=null and itemType != ''">
+            and t.item_type= #{itemType}
+        </if>
+        <if test="itemName !=null and itemName != ''">
+            and t.item_name= #{itemName}
+        </if>
+        <if test="itemAmount !=null and itemAmount != ''">
+            and t.item_amount= #{itemAmount}
+        </if>
+        <if test="itemObjId !=null and itemObjId != ''">
+            and t.item_obj_id= #{itemObjId}
+        </if>
+        <if test="remark !=null and remark != ''">
+            and t.remark= #{remark}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="communityId !=null and communityId != ''">
+            and t.community_id= #{communityId}
+        </if>
 
 
-     </select>
+    </select>
 
 </mapper>

+ 12 - 0
java110-db/src/main/resources/mapper/fee/FeeDetailServiceDaoImplMapper.xml

@@ -155,6 +155,12 @@
         <if test="detailId !=null and detailId != ''">
             and t.detail_id= #{detailId}
         </if>
+        <if test="detailIds !=null ">
+            and t.detail_id in
+            <foreach collection="detailIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="receivableAmount !=null and receivableAmount != ''">
             and t.receivable_amount= #{receivableAmount}
         </if>
@@ -281,6 +287,12 @@
         <if test="detailId !=null and detailId != ''">
             and t.detail_id= #{detailId}
         </if>
+        <if test="detailIds !=null ">
+            and t.detail_id in
+            <foreach collection="detailIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="receivableAmount !=null and receivableAmount != ''">
             and t.receivable_amount= #{receivableAmount}
         </if>

+ 4 - 0
java110-interface/src/main/java/com/java110/intf/acct/IInvoiceApplyItemV1InnerServiceSMO.java

@@ -41,6 +41,9 @@ public interface IInvoiceApplyItemV1InnerServiceSMO {
     @RequestMapping(value = "/saveInvoiceApplyItem", method = RequestMethod.POST)
     public int saveInvoiceApplyItem(@RequestBody  InvoiceApplyItemPo invoiceApplyItemPo);
 
+    @RequestMapping(value = "/saveInvoiceApplyItems", method = RequestMethod.POST)
+    int saveInvoiceApplyItems(@RequestBody List<InvoiceApplyItemPo> invoiceApplyItemPos);
+
     @RequestMapping(value = "/updateInvoiceApplyItem", method = RequestMethod.POST)
     public int updateInvoiceApplyItem(@RequestBody  InvoiceApplyItemPo invoiceApplyItemPo);
 
@@ -65,4 +68,5 @@ public interface IInvoiceApplyItemV1InnerServiceSMO {
      */
     @RequestMapping(value = "/queryInvoiceApplyItemsCount", method = RequestMethod.POST)
     int queryInvoiceApplyItemsCount(@RequestBody InvoiceApplyItemDto invoiceApplyItemDto);
+
 }

+ 200 - 2
service-acct/src/main/java/com/java110/acct/cmd/invoice/SaveInvoiceApplyCmd.java

@@ -15,23 +15,47 @@
  */
 package com.java110.acct.cmd.invoice;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Cmd;
 import com.java110.core.annotation.Java110Transactional;
+import com.java110.core.context.CmdContextUtils;
 import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.account.AccountReceiptDto;
+import com.java110.dto.fee.FeeDetailDto;
+import com.java110.dto.invoiceApply.InvoiceApplyDto;
+import com.java110.dto.invoiceApplyItem.InvoiceApplyItemDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.dto.ownerInvoice.OwnerInvoiceDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.acct.IInvoiceApplyItemV1InnerServiceSMO;
 import com.java110.intf.acct.IInvoiceApplyV1InnerServiceSMO;
+import com.java110.intf.acct.IOwnerInvoiceV1InnerServiceSMO;
+import com.java110.intf.fee.IAccountReceiptV1InnerServiceSMO;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeDetailV1InnerServiceSMO;
+import com.java110.intf.fee.IPayFeeV1InnerServiceSMO;
+import com.java110.intf.user.IOwnerV1InnerServiceSMO;
+import com.java110.intf.user.IUserV1InnerServiceSMO;
+import com.java110.po.account.AccountReceiptPo;
 import com.java110.po.invoiceApply.InvoiceApplyPo;
+import com.java110.po.invoiceApplyItem.InvoiceApplyItemPo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 类表述:保存
  * 服务编码:invoiceApply.saveInvoiceApply
@@ -52,29 +76,203 @@ public class SaveInvoiceApplyCmd extends Cmd {
     @Autowired
     private IInvoiceApplyV1InnerServiceSMO invoiceApplyV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IOwnerInvoiceV1InnerServiceSMO ownerInvoiceV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IInvoiceApplyItemV1InnerServiceSMO invoiceApplyItemV1InnerServiceSMOImpl;
+
+
+    @Autowired
+    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IAccountReceiptV1InnerServiceSMO accountReceiptV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         Assert.hasKeyAndValue(reqJson, "oiId", "请求报文中未包含oiId");
         Assert.hasKeyAndValue(reqJson, "invoiceType", "请求报文中未包含invoiceType");
         Assert.hasKeyAndValue(reqJson, "ownerName", "请求报文中未包含ownerName");
-        Assert.hasKeyAndValue(reqJson, "applyTel", "请求报文中未包含applyTel");
-        Assert.hasKeyAndValue(reqJson, "invoiceAmount", "请求报文中未包含invoiceAmount");
         Assert.hasKeyAndValue(reqJson, "communityId", "请求报文中未包含communityId");
 
+        //todo 查询发票抬头补充 申请手机号
+
+        OwnerInvoiceDto ownerInvoiceDto = new OwnerInvoiceDto();
+        ownerInvoiceDto.setOiId(reqJson.getString("oiId"));
+        ownerInvoiceDto.setCommunityId(reqJson.getString("communityId"));
+        List<OwnerInvoiceDto> ownerInvoiceDtos = ownerInvoiceV1InnerServiceSMOImpl.queryOwnerInvoices(ownerInvoiceDto);
+
+        Assert.listOnlyOne(ownerInvoiceDtos, "发票抬头不存在");
+
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setMemberId(ownerInvoiceDtos.get(0).getOwnerId());
+        ownerDto.setCommunityId(reqJson.getString("communityId"));
+        List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
+
+        if (ownerDtos == null || ownerDtos.isEmpty()) {
+            throw new CmdException("业主不存在");
+        }
+
+        reqJson.put("applyTel", ownerDtos.get(0).getLink());
+
     }
 
+    /**
+     * {"invoiceAddress":"精神分裂水电费和水电费水电费","invoiceFlag":"ACCT","invoiceName":"张三丰","invoiceNum":"123585452156215",
+     * "invoiceType":"1001","ownerId":"772023063013350054","ownerName":"qq2","detailIds":[],
+     * "arIds":["112023091107560029","112023090897430042"],
+     * "communityId":"2023052267100146"}
+     *
+     * @param event              事件对象
+     * @param cmdDataFlowContext 数据上文对象
+     * @param reqJson            请求报文
+     * @throws CmdException
+     */
     @Override
     @Java110Transactional
     public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
 
+        String userId = CmdContextUtils.getUserId(cmdDataFlowContext);
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(userId);
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "用户未登录");
+
         InvoiceApplyPo invoiceApplyPo = BeanConvertUtil.covertBean(reqJson, InvoiceApplyPo.class);
         invoiceApplyPo.setApplyId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID));
+
+        List<InvoiceApplyItemPo> invoiceApplyItemPos = new ArrayList<>();
+        BigDecimal invoiceAmount = new BigDecimal("0.0");
+        //todo 计算已缴费用
+        invoiceAmount = computeFeeDetail(reqJson, invoiceApplyItemPos, invoiceAmount, invoiceApplyPo);
+
+        //todo 计算账户费用
+        invoiceAmount = computeAcctDetail(reqJson, invoiceApplyItemPos, invoiceAmount, invoiceApplyPo);
+
+        if (invoiceApplyItemPos.isEmpty()) {
+            throw new CmdException("未包含开票项");
+        }
+
+        invoiceApplyPo.setInvoiceAmount(invoiceAmount.doubleValue() + "");
+        invoiceApplyPo.setCreateUserId(userId);
+        invoiceApplyPo.setCreateUserName(userDtos.get(0).getName());
+        invoiceApplyPo.setState(InvoiceApplyDto.STATE_WAIT);
         int flag = invoiceApplyV1InnerServiceSMOImpl.saveInvoiceApply(invoiceApplyPo);
 
         if (flag < 1) {
             throw new CmdException("保存数据失败");
         }
 
+
+        //todo 保存开票申请项
+        invoiceApplyItemV1InnerServiceSMOImpl.saveInvoiceApplyItems(invoiceApplyItemPos);
+
+
         cmdDataFlowContext.setResponseEntity(ResultVo.success());
     }
+
+
+    /**
+     * 计算已缴费费用
+     *
+     * @param reqJson             "detailIds":[],
+     * @param invoiceApplyItemPos
+     * @return
+     */
+    private BigDecimal computeFeeDetail(JSONObject reqJson, List<InvoiceApplyItemPo> invoiceApplyItemPos, BigDecimal invoiceAmount, InvoiceApplyPo invoiceApplyPo) {
+
+        if (!reqJson.containsKey("detailIds")) {
+            return invoiceAmount;
+        }
+
+        JSONArray detailIds = reqJson.getJSONArray("detailIds");
+        if (detailIds == null || detailIds.isEmpty()) {
+            return invoiceAmount;
+        }
+
+        FeeDetailDto feeDetailDto = new FeeDetailDto();
+        feeDetailDto.setDetailIds(detailIds.toArray(new String[detailIds.size()]));
+        feeDetailDto.setCommunityId(reqJson.getString("communityId"));
+        List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
+
+        if (feeDetailDtos == null || feeDetailDtos.isEmpty()) {
+            return invoiceAmount;
+        }
+        InvoiceApplyItemPo invoiceApplyItemPo = null;
+        for (FeeDetailDto tmpFeeDetailDto : feeDetailDtos) {
+            invoiceAmount = invoiceAmount.add(new BigDecimal(tmpFeeDetailDto.getReceivedAmount()));
+            invoiceApplyItemPo = new InvoiceApplyItemPo();
+            invoiceApplyItemPo.setApplyId(invoiceApplyPo.getApplyId());
+            invoiceApplyItemPo.setCommunityId(invoiceApplyPo.getCommunityId());
+            invoiceApplyItemPo.setItemAmount(tmpFeeDetailDto.getReceivedAmount());
+            invoiceApplyItemPo.setItemId(GenerateCodeFactory.getGeneratorId("11"));
+            invoiceApplyItemPo.setItemName(tmpFeeDetailDto.getFeeName()
+                    + "("
+                    + DateUtil.getFormatTimeStringB(tmpFeeDetailDto.getStartTime())
+                    + "~"
+                    + DateUtil.getFormatTimeStringB(tmpFeeDetailDto.getEndTime())
+                    + ")");
+            invoiceApplyItemPo.setItemObjId(tmpFeeDetailDto.getDetailId());
+            invoiceApplyItemPo.setItemType(InvoiceApplyItemDto.ITEM_TYPE_FEE);
+            invoiceApplyItemPos.add(invoiceApplyItemPo);
+        }
+
+        return invoiceAmount;
+    }
+
+
+    /**
+     * "arIds":["112023091107560029","112023090897430042"],
+     *
+     * @param reqJson
+     * @param invoiceApplyItemPos
+     * @param invoiceAmount
+     * @param invoiceApplyPo
+     * @return
+     */
+    private BigDecimal computeAcctDetail(JSONObject reqJson, List<InvoiceApplyItemPo> invoiceApplyItemPos, BigDecimal invoiceAmount, InvoiceApplyPo invoiceApplyPo) {
+        if (!reqJson.containsKey("arIds")) {
+            return invoiceAmount;
+        }
+
+        JSONArray arIds = reqJson.getJSONArray("arIds");
+        if (arIds == null || arIds.isEmpty()) {
+            return invoiceAmount;
+        }
+
+
+        AccountReceiptDto accountReceiptDto = new AccountReceiptDto();
+        accountReceiptDto.setArIds(arIds.toArray(new String[arIds.size()]));
+        accountReceiptDto.setCommunityId(reqJson.getString("communityId"));
+        List<AccountReceiptDto> accountReceiptDtos = accountReceiptV1InnerServiceSMOImpl.queryAccountReceipts(accountReceiptDto);
+        if (accountReceiptDtos == null || accountReceiptDtos.isEmpty()) {
+            return invoiceAmount;
+        }
+
+        InvoiceApplyItemPo invoiceApplyItemPo = null;
+        for (AccountReceiptDto tmpAccountReceiptDto : accountReceiptDtos) {
+            invoiceAmount = invoiceAmount.add(new BigDecimal(tmpAccountReceiptDto.getReceivedAmount()));
+            invoiceApplyItemPo = new InvoiceApplyItemPo();
+            invoiceApplyItemPo.setApplyId(invoiceApplyPo.getApplyId());
+            invoiceApplyItemPo.setCommunityId(invoiceApplyPo.getCommunityId());
+            invoiceApplyItemPo.setItemAmount(tmpAccountReceiptDto.getReceivedAmount());
+            invoiceApplyItemPo.setItemId(GenerateCodeFactory.getGeneratorId("11"));
+            invoiceApplyItemPo.setItemName(tmpAccountReceiptDto.getOwnerName());
+            invoiceApplyItemPo.setItemObjId(tmpAccountReceiptDto.getArId());
+            invoiceApplyItemPo.setItemType(InvoiceApplyItemDto.ITEM_TYPE_FEE);
+            invoiceApplyItemPos.add(invoiceApplyItemPo);
+        }
+
+
+        return invoiceAmount;
+    }
 }

+ 8 - 0
service-acct/src/main/java/com/java110/acct/dao/IInvoiceApplyItemV1ServiceDao.java

@@ -40,6 +40,13 @@ public interface IInvoiceApplyItemV1ServiceDao {
      */
     int saveInvoiceApplyItemInfo(Map info) throws DAOException;
 
+    /**
+     * 保存发票申请项
+     * @param info
+     * @return
+     */
+    int saveInvoiceApplyItems(Map info);
+
 
 
 
@@ -70,4 +77,5 @@ public interface IInvoiceApplyItemV1ServiceDao {
      */
     int queryInvoiceApplyItemsCount(Map info);
 
+
 }

+ 9 - 0
service-acct/src/main/java/com/java110/acct/dao/impl/InvoiceApplyItemV1ServiceDaoImpl.java

@@ -60,6 +60,15 @@ public class InvoiceApplyItemV1ServiceDaoImpl extends BaseServiceDao implements
         return saveFlag;
     }
 
+    @Override
+    public int saveInvoiceApplyItems(Map info) {
+        logger.debug("保存 saveInvoiceApplyItems 入参 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.insert("invoiceApplyItemV1ServiceDaoImpl.saveInvoiceApplyItems",info);
+
+        return saveFlag;
+    }
+
 
     /**
      * 查询发票申请项信息(instance)

+ 9 - 0
service-acct/src/main/java/com/java110/acct/smo/impl/InvoiceApplyItemV1InnerServiceSMOImpl.java

@@ -29,7 +29,9 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
@@ -52,6 +54,13 @@ public class InvoiceApplyItemV1InnerServiceSMOImpl extends BaseServiceSMO implem
         return saveFlag;
     }
 
+    @Override
+    public int saveInvoiceApplyItems(@RequestBody   List<InvoiceApplyItemPo> invoiceApplyItemPos) {
+        Map infos = new HashMap<>();
+        infos.put("invoiceApplyItemPos",invoiceApplyItemPos);
+        int saveFlag = invoiceApplyItemV1ServiceDaoImpl.saveInvoiceApplyItems(infos);
+        return saveFlag;
+    }
      @Override
     public int updateInvoiceApplyItem(@RequestBody  InvoiceApplyItemPo invoiceApplyItemPo) {
         int saveFlag = invoiceApplyItemV1ServiceDaoImpl.updateInvoiceApplyItemInfo(BeanConvertUtil.beanCovertMap(invoiceApplyItemPo));